Anleitung: Windows Server Container mit Docker-Kommandos erstellen

    Windows Server ContainerZu den signi­fi­kanten Neuerungen in Server 2016 zählen Con­tainer. Sie er­lauben im Ver­gleich zu VMs eine leicht­gewich­tige Virtua­li­sie­rung von Hard­ware und Appli­kationen. Windows Server Con­tainer bauen dabei auf die Docker-Tech­no­logie. Des­halb lassen sie sich mit den bekann­ten Docker-Kom­man­dos ein­richten und ver­walten.

    Windows Server Container teilen sich den Kernel eines Host-Betriebs­systems. Sie können entweder direkt auf der Server-Hardware oder als Hyper-V Container auch in einer verschachtelten VM implementiert werden. Beide Möglichkeiten habe ich bereits in einem vorangegangen Artikel erläutert.

    In diesem Lab konzentriere ich mich auf die Basisin­stallation von Windows Server Container und nutze hierfür Windows Server 2016 Standard Edition mit Desktop Experience in einer VM. Generell besteht auch die Möglichkeit, dafür beispiels­weise eine D1_V2-Maschine in Azure samt Container-Unterstützung zu buchen.

    Der native Docker-Dienst bildet die Grundlage und Befehle werden über den Docker Client abgesetzt. Container lassen sich so auf Basis von OS-Images erstellen und wenn gewünscht in das öffentliche Repository hinaufladen. Das Docker Hub Repository bietet auch für die Microsoft-Plattform fertige Images mit stateful-Applikationen wie SQL Server 2016 Express.

    Client-Server Modell bei Docker, Quelle: Microsoft

    Docker installieren und Container Feature aktivieren

    Um eine Basis für die Nutzung von Containern zu erlangen, ist erst einmal die Docker-Engine samt Client zur Befehls­verwaltung erforderlich. Der Grundstein für ein OneGet-PackageManagement wird so gelegt:

    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

    Dabei installiert man den benötigten NuGet-Provider gleich mit. Sobald dieser Vorgang abgeschlossen ist, wird Docker mit folgendem Cmdlet installiert:

    Install-Package -Name docker -ProviderName DockerMsftProvider

    Zu Beginn wird der Packet-Manager benötigt, dann kann Docker installiert werden.

    Danach zeigt der Server Manager unterhalb von Hinzufügen von Rollen und Features das aktivierte Container-Feature an. Auch ein

    Get-WindowsFeature Containers

    verifiziert diesen Sachverhalt. Nach erfolgreicher Installation und dem nötigen Neustart des Servers wird dann der Docker-Dienst ausgeführt.

    Docker überprüfen und Befehle auflisten

    Grundsätzlich ist es vorab interessant zu wissen, ob der Dienst aktuell gestartet ist, in welcher Version sich das Client-Server Modell befindet und wie die Befehls-Zusammen­setzung aussieht. Beginnen kann man hierbei mit

    Get-Service Docker

    um zu überprüfen, dass der Dienst vorhanden und auch gestartet ist. Eine Versionsabfrage startet das Docker-Kommando

    docker version

    Ein docker help liefert eine Übersicht über mögliche Schalter, Verwaltungs- und Ausführungskommandos.

    Verifizieren von Docker unter Windows Server

    OS Base-Images herunterladen

    Als Grundlage für Container dienen OS Base-Images, welche vom Hub herunter­geladen werden können. Diese sollten mit dem Betriebs­system des Container-Hosts über­einstimmen, ein winver liefert hier für den Abgleich die nötigen Daten. Mit

    docker search windowsservercore

    suche ich im Docker Hub nach einer Quelle für ein Windows Server Core Image. Im Browser ist das über https://hub.docker.com möglich. Ein

    docker pull microsoft/windowsservercore:10.0.14393.447

    zieht dann dieses gewünschte Base-Image herunter. Für den Download eines Images samt SQL Server Express liefert folgendes Kommando das gewünschte Ergebnis:

    docker pull microsoft/mssql-server-windows-express

    Nachdem die erforderlichen Images in das lokale Repository geladen wurden, besteht die Möglichkeit diese mit

    docker images

    aufzulisten.

    Mit docker pull werden Images in das lokale Repository geladen.

    Container erstellen und ausführen

    Auf Grundlage der heruntergeladenen Images lassen sich nun Container erstellen und starten. Das Anstarten des Containers mit installiertem SQL Server Express und NAT kann folgendermaßen aussehen:

    docker run -d -p 1433:1433 -e sa_password=Passw0rd -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express

    Ein docker run Befehl setzt sich zusammen aus docker create und docker start, bildet also den beschreibbaren Layer über dem Image. In diesem Beispiel gebe ich dem RUN-Kommando mit dem Schalter -p ein Port-Mapping auf den Weg. Der erste Anteil von TCP 1433:1433 beschreibt den Host-Port und der zweite den Container-Port. Bei einem IIS-Container wäre eine mögliche Zuordnung 80:80. Äquivalent dazu wird der Container mit

    docker stop

    beendet oder mit

    docker restart

    neu gestartet. Über den Befehl

    docker ps

    erhalte ich dann eine Liste über die laufenden Container inklusive Namen und Port-Mappings. Der Switch -a listet auch die gestoppten Container auf. Ein Umbenennen des Containers wird über

    docker rename <aktueller Name> <neuer Name>

    erledigt.

    Mit Docker run wird der Container erstellt und gestartet.

    Nachdem der Container einen brauchbaren Namen erhalten hat, schaue ich mir über

    docker top <Container Name>

    die laufenden Prozesse im Container an, unteranderem erkennt man hier die Prozesse sqlservr.exe, sqlwriter.exe und die sqlbrowser.exe inklusive dedizierter Prozess-ID, CPU-Zeit und Speicherbelegung. Um sich interaktiv im Container zu bewegen, nutze ich das Kommando:

    docker exec -i <Container Name> powershell

    2 Kommentare

    Bild von MrIL
    MrIL sagt:
    13. Dezember 2016 - 16:15

    Bei mir kam nach dem Befehl "Install-Package -Name docker -ProviderName DockerMsftProvider" die Fehlermeldung "Install-Package : KB3176936 or later is required for docker to work"

    Das Update habe ich manuell im Windows Update Catalog runtergeladen, hat danach immer noch nicht getan.

    PowerShell - sconfig - 6) Updates herunterladen u. installieren zeigte keine Reaktion.

    Habe dann unter http://www.drwindows.de/windows-10-desktop/93987-windows-10-update-pack-... die Download "Windows 10 Update-Pack by DrWindows November 2016 - 64 Bit" runtergeladen und laufen lassen, nach dem Neustart konnte ich den Docker installieren und die Windows Update GUI hat mir sogar angezeigt dass neue Updates verfügbar sind. Windows Server 2016 1607 Build 14393.447

    Bild von MrIL
    MrIL sagt:
    13. Dezember 2016 - 16:18

    Mein Fehler, vor dem Update-Pack hatte ich die Build 14393.0, nicht die 14393.447