Tags: Windows Server 2016, Container
Zu den signifikanten Neuerungen in Server 2016 zählen Container. Sie erlauben im Vergleich zu VMs eine leichtgewichtige Virtualisierung von Hardware und Applikationen. Windows Server Container bauen dabei auf die Docker-Technologie. Deshalb lassen sie sich mit den bekannten Docker-Kommandos einrichten und verwalten.
Windows Server Container teilen sich den Kernel eines Host-Betriebssystems. 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 Basisinstallation 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 beispielsweise 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.
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 Befehlsverwaltung 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
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-Zusammensetzung 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.
OS Base-Images herunterladen
Als Grundlage für Container dienen OS Base-Images, welche vom Hub heruntergeladen werden können. Diese sollten mit dem Betriebssystem des Container-Hosts übereinstimmen, 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.
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.
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
Täglich Know-how für IT-Pros mit unserem Newsletter
Marcel Küppers arbeitet seit über 25 Jahren in der IT, aktuell als Team Leader, zuvor als Consultant und Infrastructure Architect unter anderem für den japanischen Konzern JTEKT/TOYODA mit Verantwortung über die Europastandorte Krefeld und Paris.
Darüber hinaus wirkte er als Berater im EU-Projekt-Team für alle Lokationen des Konzerns mit und ist spezialisiert auf hochverfügbare virtualisierte Microsoft-Umgebungen plus Hybrid Cloud Solutions.
Zertifizierungen: MS Specialist und MCTS für Hyper-V/SCVMM, MCSE, MCITP, MCSA. Zusätzlich zertifiziert für PRINCE2 Projektmanagementmethode.
Verwandte Beiträge
- Rollen und Features in Container-Images installieren
- 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
- Windows Server 2016: Die wichtigsten Neuerungen im Überblick
- Transparentes Container-Netzwerk in Windows Server 2016 konfigurieren
3 Kommentare
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
Mein Fehler, vor dem Update-Pack hatte ich die Build 14393.0, nicht die 14393.447
Schöner Artikel aber mir kommen nur drei Positionen wenn man den Befehl get-command -module containers eingibt, wie können die anderen Positionen hinzugefügt werden?
Get-ContainerNetwork
New-ContainerNetwork
Remove-ContainerNetwork