Rollen und Features in Container-Images installieren

    Docker ContainerWindows 10 und Server 2016 unter­stützen die Ein­richtung von Docker-kompa­tiblen Con­tainern, die wahl­weise Images von Server Core oder Nano Server aus­führen können. Die ver­füg­baren Basis-Images ent­halten keine Rol­len und Features, so dass man bei­spiels­weise IIS oder ASP.NET erst instal­lieren 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 Ressourcen­verbrauchs, 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

    Basis-Image für Nano Server herunterladen

    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 inter­aktiven 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.

    Container auf Basis eines angepassten Images starten

    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 beispiels­weise unter dem Namen docker-iis speichert, dann könnte man ein IIS-Image folgender­maßen erstellen:

    docker build -t iis:10 - < docker-iis

    Das neue Image erhielte dann den Namen iis und die Version 10.

    Installation von Rollen und Features mittels dockerfile

    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.

    Vorgefertigtes Container-Image für IIS herunterladen

    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.

    1 Kommentar

    Bild von Martin Feuerstein
    Martin Feuerstein sagt:
    2. August 2017 - 15:28

    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.