iX 3/2017
S. 92
Wissen
Container, Docker, Windows
Aufmacherbild

Docker-Container in Windows 10 und Windows Server 2016

Hafenfenster

Im Zuge der Öffnung für die Linux-Welt kann sich Microsoft auch dem Container-Trend nicht entziehen. In Zusammenarbeit mit der Firma Docker ermöglicht Microsoft inzwischen den Betrieb von Docker-Containern auf Windows 10 und Windows Server 2016.

Microsoft bietet zwei Arten von Containern mit gehosteten Windows-Anwendungen an: Neben den einfachen Docker-Containern, die das Unternehmen „Windows Server Container“ nennt, gibt es noch „Hyper-V-Container“, bei denen die Container stärker isoliert in einer virtuellen Maschine in Hyper-V laufen und den Kernel nicht mit dem Host teilen. Die Hyper-V-Container verwenden eine stark optimierte virtuelle Maschine, sodass sie eine Art Zwischenstufe zwischen Docker-Containern und virtuellen Maschinen darstellen.

Windows Server Container benötigen Hyper-V nicht, hier erfolgt nur ein Sandboxing von Prozessen, Dateisystem und der Registry. Nested Virtualization, also der Betrieb von Hyper-V-Containern in einer virtuellen Maschine, ist mit Windows 10 und Windows Server 2016 als Hyper-V-Host möglich, setzt aber eine entsprechende Konfiguration voraus ([a], siehe „Alle Links“ am Ende des Artikels).

Vier Varianten von Docker auf Windows

Windows Server 2016 unterstützt beide Containerformen, Windows 10 derzeit nur Hyper-V-Container. In beiden Fällen läuft als Betriebssystembasis (Base OS Image) Windows Server 2016 in der Variante Core oder Nano Server. Allerdings muss für Server-Container die Versionsnummer des Hosts und des Base OS Image in den ersten drei Teilen (Major, Minor, Build) übereinstimmen. Bei Hyper-V-Containern teilen sich Gast und Host den Kernel nicht, weswegen Windows hier bei den Versionsnummern etwas toleranter ist. Wie stark Abweichungen in künftigen Versionen sein dürfen, lässt Microsoft aber noch offen.

Tabelle
Tabelle: Erlaubte Konstellationen von Host-System und Container

Auf einem Nano-Server-Host können Nutzer nur Windows Server Container mit dem Base OS Image „Nano Server“ betreiben. Bei den stärker isolierten Hyper-V-Containern fällt diese Einschränkung weg (siehe Tabelle „Erlaubte Konstellationen von Host-System und Container“).

Es gibt mittlerweile vier Varianten zum Betrieb von Docker-Containern auf Windows (Abb. 1).

Von diesen Windows-Containern unterscheiden sich die beiden Implementierungen für Linux-Container auf Windows. Sie verwenden Linux in einer virtuellen Maschine und kommen von der Firma Docker selbst. Neben der Docker Toolbox [b], die ab Windows 7 und Windows Server 2008 R2 Linux-Container auf Basis von VirtualBox anbietet, gibt es mittlerweile auch Docker for Windows [c], das Hyper-V für diesen Zweck nutzt (siehe Abbildung 1). Docker for Windows, das leicht mit den Windows-Containern von Microsoft verwechselt wird, läuft aktuell nur auf Windows 10 Professional, Enterprise oder Education ab Version 1511 Build 10586 mit installiertem Hyper-V.

Dank der Zusammenarbeit zwischen Docker und Microsoft können in allen vier Docker-Varianten die gleichen Kommandozeilenwerkzeuge zum Einsatz kommen. Diese erlauben eine Fernverwaltung von Containern über Dockers Remote API.

Installation in Windows Server 2016

Alle Varianten von Windows Server 2016 können Windows-Container hosten, auch Server Core und Nano Server [1]. Die Docker-Werkzeuge müssen Nutzer sich aber erst beschaffen. Die Docker-Installation in Windows Server 2016 basiert auf dem OneGet-Paketmanagement-Konzept [d], das Microsoft mit PowerShell 5.0 eingeführt und auch auf die Versionen 3.0 und 4.0 portiert hat. OneGet selbst verwaltet keine Pakete, sondern Paketmanager. Diese werden implementiert durch einen OneGet-Provider. Dazu muss der Nutzer eine PowerShell-Konsole oder deren Integrated Scripting Environment (ISE) mit Administratorrechten starten. Als Erstes ist ein Modul aus der PowerShell Gallery [e] zu installieren, das den Docker-Provider für OneGet bereitstellt:

Install-Module -Name DockerMsftProvider -Force

Eventuell muss man dem Aktualisieren des NuGet-Providers zustimmen. Das PowerShell-Modul für Docker installiert sich unter C:\Program Files\WindowsPowerShell\Modules und sollte nach dem Aufruf von Get-Module listavailable erscheinen. Danach lassen sich die eigentlichen Docker-Werkzeuge installieren:

Install-Package -Name docker -ProviderName 
 DockerMsftProvider -Force

Der Download erfolgt von https://dockermsft.blob.core.windows.net/dockercontainer und installiert unter C:\Program Files\Docker Docker-Client (docker.exe) und -Server (dockerd.exe) – derzeit in Version 1.12.2. Die Paketinstallation aktiviert das optionale Windows-Server-Feature „containers“ und richtet die Server-Binary dockerd.exe als Windows-Systemdienst namens „Docker“ ein. Danach ist ein Neustart erforderlich.

Listing 1: Beispielkonfiguration für daemon.json

{    
    "graph": "d:\\docker",
    "group" : "users"
}

Mit der Eingabe von docker version und docker info können Nutzer den Erfolg der Installation prüfen. Die Ausgabe verrät zudem, dass Docker seine Container und Images im lokalen Repository unter C:\ProgramData\docker ablegt. Die Konfiguration liegt in der Datei C:\ProgramData\docker\config\daemon.json, die zu Beginn leer ist. Listing 1 zeigt eine Konfiguration, die den Pfad für Images und Container festlegt und allen Windows-Benutzern (Mitgliedern der Gruppe users) das Recht zum Verwalten von Docker gibt. Sonst könnten dies nur Administratoren. Die Docker-Dokumentation enthält einen eigenen Abschnitt für die Optionen unter Windows [f]. Nach jeder Änderung verlangt der Docker-Dienst einen Neustart: Restart-Service docker.

Installation in Windows 10