In einem früheren Artikel hat mein Kollege Johannes Höhne einen schönen Beitrag gepostet, der aufzeigt, wie man auf seinem Rechner das Tool MiniKube zum Laufen bringt.

Ich hatte vor einiger Zeit ein ähnliches Ziel. Bei mir beschränkte es sich allerdings darauf, Docker auf meinem Windows-Rechner möglichst einfach zu nutzen. Dafür scheint der Docker-Desktop die einfachste Variante zu sein. Bei der Umsetzung ergeben sich dabei jedoch ein paar Probleme – insbesondere, wenn man auch VirtualBox nutzt und nicht die veraltete Variante von Docker mit Vagrant einsetzen möchte.

Und genau für das Szenario, wie man VirtualBox und Hyper-V zusammen nutzen kann, möchte ich im Folgenden eine Lösung aufzeigen.

Hypervisor-Typen

Sucht man im Web nach Windows und Docker, landet man zwangsläufig beim Docker-Desktop für Windows. Aber da war doch noch etwas… genau: Hyper-V und VirtualBox können nicht gemeinsam genutzt werden. Hyper-V ist ein sogenannter Typ-1 Hypervisor. Sobald es aktiviert ist, wird Windows, stark vereinfach gesagt, nicht mehr „normal“ gestartet, sondern als VM, also als Gast, auf dem Hypervisor ausgeführt. Ein Typ-1 Hypervisor arbeitet sehr Hardware-nah, und bildet damit eine Zwischenschicht zwischen der Hardware und den Gast-Systemen, in diesem Fall also dem eigentlichen Windows-System.

 

VirtualBox ist ein sogenannter Typ-2 Hypervisor. Dieser Typ wird als (mehr oder weniger „normale“) Windows-Anwendung gestartet und nutzt die Geräte-Treiber des Host-Systems, um darüber auf die Hardware zuzugreifen.

Hypervision type 2 - VirtualBox

Und genau an dieser Stelle kommen sich beide Hypervisoren in die Quere. Man kann zwar beide Typen auf der gleichen Windows-Installation nutzen – allerdings nicht zeitgleich. Da diese Einschränkung für meine Zwecke keine Rolle spielt, habe ich das so umgesetzt, dass entweder Hyper-V oder VirtualBox nutzbar ist.

Hyper-V installieren

Für den Einsatz braucht man für den Einsatz von Docker for Windows Hyper-V. Dieses Feature muss als erstes in Windows aktiviert (d.h. installiert) werden.

Der Einfachheit halber führe ich in einer Elevated PowerShell (d.h. mit Administrator-Rechten, bspw. Strg + Shift + Linksklick auf PowerShell-Link z.B. im Startmenü) folgenden Befehl aus und installiere damit Hyper-V:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Windows Bootloader anpassen

Nachdem das Feature installiert ist, folgt nun der entscheidende Teil der Vorbereitung, um Hyper-V und VirtualBox nebeneinander nutzen zu können. Dazu wird der Bootloader von Windows angepasst und ein Startmenü-Eintrag erstellt. Mit einer Option wird Windows als Gast auf Hyper-V gestartet, bei der anderen Option wird Hyper-V deaktiviert und Windows ganz normal gestartet.

Bevor wir mit irgendwelchen Änderungen am Bootloader von Windows beginnen, ist es sinnvoll, zunächst ein Backup anzulegen.

bcdedit /export backup.bcd

Über den folgenden Befehl kann dieser Stand jederzeit wieder eingespielt werden.

bcdedit /import backup.bcd

Den neuen Eintrag erstellen wir mit dem folgenden Befehl:

bcdedit /copy "{current}" /d "KEIN Hyper-V"

Dieser Befehl gibt eine GUID zurück. Diese merken wir uns oder kopieren sie gleich in die Zwischenablage.

Als nächstes wird nun für diesen Eintrag Hyper-V deaktiviert:

bcdedit /set "{GUIDvonVorher}" hypervisorlaunchtype off

Jetzt kann noch, je nach Vorliebe, der Start ohne Hyper-V zum Default gemacht werden:

bcdedit /default "{GUID}"

Standardmäßig hat das Startmenü ein Timeout von 30 Sekunden. Da heutzutage Rechner mit SSD längst Startzeiten von wenigen Sekunden haben, ist das natürlich eine gefühlt unendliche Verlängerung. Deshalb habe ich bei mir das Timeout auf 3 Sekunden herabgesetzt:

bcdedit /timeout 3

Dies ist gerade lang genug, um beim bewussten Starten mit Hyper-V genug Zeit zum Drücken einer Taste (dann stoppt nämlich der Timer) und trotzdem eine nicht zu lange Verzögerung beim normalen Start des Rechners zu haben.

Schlussendlich kann noch die Reihenfolge der Einträge geändert werden. Ich habe meinen Standard-Starteintrag gerne als ersten in der Liste:

bcdedit /displayorder "{GUID}" /addfirst

Fertig.

Docker installieren

Nach obigem Vorgehen ist für die aktuelle Startkonfiguration Hyper-V bereits aktiviert. Nun kann ich Docker for Windows installieren. Die Installation dafür ist auf den offiziellen Docker-Seiten beschrieben. Das Installationspaket findet man ebenfalls dort.

Docker installieren

Alternativ gibt es natürlich noch den schnelleren Weg mit chocolatey.

cinst –y docker-desktop

Nach dem fälligen Neustart habe ich nun beim Start die Auswahl, ob ich mit oder ohne Hyper-V arbeiten möchte oder doch mit meinem VirtualBox VMs. Und wenn ich einmal zwischendurch wechseln muss: dann halte ich beim Klick auf Neustart die Shift-Taste gedrückt, komme ich direkt in das Windows-Bootmenü, muss nicht vor dem Rechner warten und zur richtigen Zeit eine Taste drücken.

Damit habe ich nun eine flexible Umgebung geschaffen, in der ich wahlweise und je nach Aufgabe Hyper-V oder VirtualBox nutzen kann. Was man damit dann alles anfangen kann, ist Stoff für einen anderen Beitrag. Man kann z.B. direkt mit dem Beitrag von Johannes fortfahren.

Performance mit Hyper-V

Noch ein Hinweis für alle die sich wie ich fragen, ob damit die Performance meines Systems in die Knie geht und ob ich nicht mehr wie bisher mit meinem Rechner arbeiten kann. Immerhin haben wir es doch jetzt mit einem Windows in einer VM zu tun. Dazu kann ich von meiner Seite aus sagen, dass es selbst mit diversen Benchmarks für meine Umgebung keine messbaren Einschränkungen gibt, zumindest nicht außerhalb der üblichen Messungenauigkeiten. Nur eine kleine Einschränkung gibt es. Sobald ich einen externen Switch in Hyper-V über meinen WiFi-Adapter konfiguriere, bricht die Leistung ein. Diesen brauche ich aber glücklicherweise nicht, da der Default-Switch von Hyper-V über NAT den Internet-Zugriff von Docker aus bereits ermöglicht. Je nach Szenario kann das aber etwas sein, was man im Kopf behalten sollte. Ein solcher Switch ist aber auch einfach entfernt und ebenso einfach wieder hinzugefügt.

Jetzt teilen auf:

4 Comments

  1. Andreas Ranci 4. April 2021 at 10:34 - Reply

    Kurz und knapp, das Thema, das viele beschäftigt: warum läuft meine alte VM mit VirtualBox oder VM Ware unter Windows plötzlich nicht mehr.
    Danke für die prägnante Darstellung.

    • Christian Ziem 7. April 2021 at 7:49 - Reply

      Hallo Andreas,
      vielen Dank. Es freut mich, wenn der Beitrag helfen kann.
      Grüße, Christian

  2. Markus 18. Juni 2021 at 5:11 - Reply

    Danke für diesen Artikel. Er hat mir bei meiner Problematik mit VirtualBox und der aktuellsten Windows Insider geholfen. Jetzt kann ich verspätet auch endlich Windows 11 testen.

    • Christian Ziem 21. Juni 2021 at 9:59 - Reply

      Hallo Markus,
      danke für deinen Kommentar und ich freue mich, dass ich dich mit dem Beitrag unterstützen konnte.
      Grüße, Christian

Jetzt kommentieren