Tags: Container, Windows Server 2016, PowerShell
Windows 10 und Server 2016 unterstützen die Einrichtung von Docker-kompatiblen Containern, die wahlweise Images von Server Core oder Nano Server ausführen können. Die verfügbaren Basis-Images enthalten keine Rollen und Features, so dass man beispielsweise IIS oder ASP.NET erst installieren muss.
Bevor man Anwendungen in einem Container ausführen kann, muss man das Feature im Host-Betriebssystem aktivieren. Abhängig vom Typ des Containers benötigt man zudem Hyper-V, unter Windows 10 ist der Hypervisor grundsätzlich nötig. Wie man dabei vorgeht, beschreiben unsere Anleitungen zu Windows 10 und Server 2016.
Basis-Images herunterladen
Nach Anschluss der Vorbereitung und dem erfolgreichen Test des Features besteht der nächste Schritt normalerweise darin, dass man ein Image des OS herunterlädt, auf dessen Grundlage man eigene Container erstellt.
Nano Server empfiehlt sich aufgrund des deutlich geringeren Ressourcenverbrauchs, aber das ausschließliche Management via PowerShell ist nicht jedermanns Sache. Zudem unterstützt er nicht alle Rollen und Features. Deren Zahl wird sich nach Microsofts Plänen künftig noch weiter verringern.
Die Basis-Images gehören nicht zum Lieferumfang von Windows, sondern müssen heruntergeladen werden. Diesem Zweck dient der pull-Befehl von Docker. Im Fall von Nano Server würde er
docker pull microsoft/nanoserver
lauten, bei Server Core dagegen
docker pull microsoft/windowsservercore
Während Nano Server nicht einmal die Binaries für die unterstützten Rollen und Features enthält, sind diese bei Server Core zumindest an Bord. Keines der beiden Images stellt jedoch aus der Box irgendwelche Dienste zur Verfügung.
Features in interaktiver Shell installieren
Daher muss man die benötigten Rollen anschließend selbst hinzufügen. Dies kann man in einer interaktiven Shell tun, indem man einen Container mit
docker run -it microsoft/nanoserver powershell.exe
startet. In diesem Fall hat man sich für das Image von Nano Server entschieden und muss daher die benötigten Packages mittels PowerShell OneGet herunterladen. Dafür installiert man einen eigenen Provider und sucht mit Find-NanoServerPackage nach den gewünschten Paketen (das genaue Vorgehen beschreibt diese Anleitung: Rollen und Features installieren in Nano Server 2016).
Führt man jedoch mit
docker run -it microsoft/windowsservercore
Server Core im Container aus, dann stehen dort die Cmdlets des Server Manager zur Verfügung. Daher kann man sich die verfügbaren Rollen und Features mit Get-WindowsFeature anzeigen lassen und die benötigten mit Install-Feature hinzufügen (siehe dazu meine Anleitung Rollen und Features installieren mit PowerShell). Ein Aufruf zum Hinzufügen von IIS könnte so aussehen:
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Möchte man von diesem angepassten Container ein eigenes Image ableiten, dann ermittelt man mit
docker ps -a
die ID des ursprünglichen Abbilds und führt dann
docker commit <containerid> MyImage
aus.
Rollen und Features über dockerfile installieren
Eine Alternative zum interaktiven Installieren von Rollen und Features bestünde darin, die erforderlichen Kommandos in einer so genannten dockerfile zu hinterlegen und mit ihrer Hilfe ein eigenes Image zu erzeugen.
Der Inhalt derselben könnte so aussehen:
Wenn man die Datei nun beispielsweise unter dem Namen docker-iis speichert, dann könnte man ein IIS-Image folgendermaßen erstellen:
docker build -t iis:10 - < docker-iis
Das neue Image erhielte dann den Namen iis und die Version 10.
Vorgefertigte Images nutzen
Schließlich besteht noch die Möglichkeit, anstatt der rohen Basis-Images solche zu verwenden, die Microsoft etwa auf Github bereitstellt. Dort finden sich Abbilder von beiden Server-Varianten, die auch Anwendungen wie SQL Server (Express) enthalten.
Um etwa das Core-Image mit integriertem IIS zu bekommen, gibt man
docker pull microsoft/iis
ein.
Damit erspart man sich die Installation von Features, aber man muss darauf achten, dass dieses Image auch regelmäßig aktualisiert wird. Das könnte bei weniger populären Abbildern nicht der Fall sein, so dass die eigenen Images, die man davon ableitet, nicht mehr auf dem aktuellen Stand sind.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Project Honolulu 1711: Integration von PowerShell und RDP, Management von Windows 10
- Update für Windows Server 2016: Reduzierter Nano Server, RDMA in VMs, Dedup für ReFS, PowerShell 6
- Neu in Windows Server: Linux-Subsystem, SMB für Container, Insider Program
- Installationsvarianten (Nano, Core, Desktop) und Editionen von Windows Server erkennen
- Anleitung: Windows Server Container mit Docker-Kommandos erstellen
Weitere Links
1 Kommentar
Was mir daraus noch nicht so ganz klar hervorgeht... Prinzipiell ist das doch so eine Art VM, wenn auch das Betriebssystem vom vorhandenen abgeleitet wird. Wo werden denn nun für einzelne Dienste/Programme wie z. B. SQL Programmdateien, %programdata%, ggf. %appdata% und die Konfiguration gespeichert, ggf. auch Registry-Einstellungen?!? Wie kann in diese "Docker-VM" eingegriffen werden, z. B. für Firewall-Einstellungen für statische SQL-Ports, oder muss die lokale Windows-Firewall die Einstellungen vornehmen? Kriegt jedes Docker-Image eine eigene IP-Adresse? Wie funktionieren Sockets für ein Docker-Image? ein bestimmter TCP-Port (z. B. 1433 als Standardport für MSSQL) kann ja nicht mehrfach an eine IP vergeben werden.