Windows Server 2016: Docker mit Windows

Mit Windows Server Container integriert Microsoft die Docker-Technologie in sein Server-Betriebssystem. Damit lassen sich sichere Clouddienste und Webserver betreiben, die sehr schnell bereitgestellt werden können.

Neben der Nano-Server-Installation und Storage Spaces Direct gehören Windows Server Container als Docker-Implementation zu den wichtigsten Neuerungen in Windows Server 2016. Windows Server Container lassen sich auf Wunsch auch in Nano-Servern betreiben und Nano-Server lassen sich wiederum als Cluster installieren. Die neue Technologie bietet also nicht nur wesentlich kleinere „Fussabdrücke“ für Server und den Overhead im Netzwerk, sondern auch bessere Leistung und Hochverfügbarkeit.

Windows Server Container bieten die Möglichkeit Cloudanwendungen oder Webdienste schnell, einfach und sicher zu betreiben. Alles was Unternehmen dazu benötigen, ist ein Containerhost. Dabei kann es sich um einen physischen Server handeln, eine VM oder einen virtuellen Computer in Microsoft Azure. Innerhalb des Container-Hosts, der zum Beispiel auf Basis eines Nano- oder Core-Servers mit Windows Server 2016 zur Verfügung gestellt wird, verwalten Administratoren Images für Container und die Container selbst. Derzeit gibt es dafür keine grafische Oberfläche, die Verwaltung findet über die PowerShell oder Befehlszeile statt. Auch die Container selbst werden mit der Befehlszeile oder der PowerShell verwaltet.

Windows Server 2016: Docker mit Windows (Bild: ZDNet.de)Windows Server Container in Microsoft Azure kostenlos testen

Derzeit ist der schnellste Weg um Windows Server Container zu testen, innerhalb von Microsoft Azure einen neuen virtuellen Computer zu erstellen. Die Testmöglichkeiten stehen auch über ein Test-Abonnement von Microsoft Azure zur Verfügung. Bei dieser Preview handelt es sich um eine Core-Installation von Windows Server 2016.

Auch wenn die Container-Technologie bereits recht weit in Windows Server 2016 integriert ist, gibt es noch einige Probleme. Funktioniert ein Befehl im Container oder dem Containerhost nicht, hilft es oft, wenn dieser neu gestartet wird. In der PowerShell wird der Befehl mit der Pfeiltaste nach oben erneut angezeigt.

 

Windows Server Container in der PowerShell verwalten

Container werden am besten über die PowerShell verwaltet. Das gilt auch dann, wenn Administratoren die Container-Technologie lokal installieren. Mit dem Befehl powershell wird in der Befehlszeile direkt in die PowerShell gewechselt. Umgekehrt können Administratoren mit cmd wieder in die Befehlszeile zurück wechseln. Alle Befehle für Verwaltung von Containern werden über den Befehl get-command -Module Containers angezeigt.

In der PowerShell stehen zahlreiche Befehle für die Verwaltung von Containern zur Verfügung (Screenshot: Thomas Joos).In der PowerShell stehen zahlreiche Befehle für die Verwaltung von Containern zur Verfügung (Screenshot: Thomas Joos).

Um sich alle Container-Images anzeigen zu lassen, die auf dem Container-Host erstellt werden können, verwenden Administratoren das CMDlet Get-ContainerImage. Es besteht die Möglichkeit aus einem installierten Container wiederum ein Image zu erstellen. Werden danach auf Basis dieses Images weitere Container erstellt, erhalten diese automatisch alle Anpassungen und Einstellungen des ursprünglichen Containers. Das ist einer der Vorteile der Container-Technologie: Unternehmen können sehr schnell viele Container bereitstellen. Die Vorgehensweise dazu ist sehr einfach. Einen neuen Standard-Container erstellen Administratoren zum Beispiel mit:

New-Container -Name „Containertest“ -ContainerImageName WindowsServerCore -SwitchName „Virtual Switch“

Dadurch wird ein erster Container auf Basis des Standard Windows Server 2016-Images verwendet. Container sind nach der Erstellung noch ausgeschaltet, ähnlich zu virtuellen Servern. Um ihn zu starten, wird der Befehl Start-Container -Name „Containertest“ eingegeben. Anschließend kann eine PowerShell-Sitzung in diesem Container eröffnet werden, um Serverdienste im Container zu verwalten. Dazu wird die ID des Containers benötigt. Diese wird mit get-container |fl ContainerID angezeigt.

Um eine PowerShell-Sitzung innerhalb des Containers zu starten, wird der Befehl Enter-PSSession verwendet. Wichtig ist, dass die Container-ID mitgegeben wird sowie die Option RunAsAdministrator, damit innerhalb des Containers mit Administratorrechten gearbeitet wird. Der Container hat eine eigene IP-Adresse erhalten, damit der mit dem Netzwerk/Internet kommunizieren kann. Die Syntax des Befehls sieht folgendermaßen aus:

Enter-PSSession -ContainerId <ID> -RunAsAdministrator

In der PowerShell-Sitzung kann der Container erstellt, gestartet und auch verwaltet werden (Screenshot: Thomas Joos).In der PowerShell-Sitzung kann der Container erstellt, gestartet und auch verwaltet werden (Screenshot: Thomas Joos).

Sobald die Verbindung aufgebaut wurde, ist ein Teil der ID in der PowerShell-Sitzung zu sehen. Alle Befehle, die Administratoren hier eingeben, werden im Container durchgeführt. Mit exit verlassen Administratoren die Sitzung im Container und arbeiten wieder mit dem eigentlichen Container-Host.

Praxis: Web Server in einem Container betreiben

Container dienen natürlich nicht dem Selbstzweck der eigenen Verwaltung, sondern können komplette Serverdienste bereitstellen. In Zukunft sind hier zahlreiche Erweiterungen zu erwarten. Die generelle Verwaltung von Containern und die Installation von Diensten, werden innerhalb des Containers und des Container-Hosts in der PowerShell vorgenommen. Ob Microsoft in Zukunft auch weitere Möglichkeiten bieten wird, ist derzeit noch nicht klar.

Um eine Beispielumgebung zu installieren, können Administratoren zum Beispiel einen Webserver in einem Container installieren. In einem Container werden dazu zuerst die Installationsdateien von nginx heruntergeladen und direkt im Container gespeichert. Mit dieser Software lässt sich schnell und einfach ein Webserver in einem Container betreiben:

wget -uri ‚http://nginx.org/download/nginx-1.9.4.zip‘ -OutFile „c:\nginx-1.9.4.zip“

Nach dem Download befindet sich im Container im C-Laufwerk die Installationsdatei von nginx. Um die ZIP-Datei zu extrahieren, wird der PowerShell-Befehl Expand-Archive verwendet:

Expand-Archive -Path C:\nginx-1.9.4.zip -DestinationPath c:\ -Force

Danach wird die PowerShell-Sitzung des Containers mit exit beendet und der Container mit Stop-Container -name „Containertest“ beendet. Hier ist schnell zu sehen, dass die Verwaltung von Containern im Grunde genommen sehr ähnlich zur Verwaltung lokaler Server ist. Administratoren müssen sich also nicht komplett neue Arbeitsweisen angewöhnen.

Deployment: Container als Image speichern und weitere Container erstellen

An dieser Stelle besteht jetzt die Möglichkeit den Container als neues Image zu speichern. Damit können weitere Container erstellt werden, die wiederum bereits über die Web Server-Software verfügen. Dazu wird der folgende Befehl verwendet:

$webserverimage = New-ContainerImage -ContainerName „Containertest“ -Publisher „Contoso“ -Name nginxweb -Version 1.0

Der Vorteil dabei ist, dass durch die Speicherung als Variable sehr schnell die wichtigsten Daten zur Verfügung stehen. Auf dem gleichen Weg können Administratoren auch für andere Serverdienste vorgehen.

Danach wird das neue Image mit Get-ContainerImage anzeigt und steht zur Verfügung um neue Container zu erstellen. Anschließend lassen sich schnell weitere Container erstellen, welche das Image als Grundlage verwenden:

$webservercontainer = New-Container -Name web1 -ContainerImageName nginxweb -SwitchName „Virtual Switch“

Sobald der Container gestartet ist, wird er mit Start-Container gestartet:

Start-Container $webservercontainer

Um eine PowerShell-Sitzung zu öffnen, kann die ID auch direkt aus der Variablen $webservercontainer verwendet werden:

Enter-PSSession -ContainerId $webservercontainer.ContainerId -RunAsAdministrator

In der PowerShell erstellen Administratoren sehr schnell neue Images und aus Images neue Container, die wiederum in der PowerShell verwaltet werden (Screenshot: Thomas Joos).In der PowerShell erstellen Administratoren sehr schnell neue Images und aus Images neue Container, die wiederum in der PowerShell verwaltet werden (Screenshot: Thomas Joos).

Web Server und Netzwerke im Container verwalten

Um den Web Server im Container auf Basis von nginx zu starten, wird in der PowerShell-Sitzung des Containers in das Installationsverzeichnis von nginx gewechselt. Der Webserver wird mit start nginx gestartet. Für die interne Verwendung ist es sinnvoll, sich vorher mit ipconfig die interne IP-Adresse des Containers anzeigen zu lassen. Über diese Adresse kann der Webserver getestet werden. Mit exit kann die Sitzung im Container wieder beendet werden.

Um den Webserver zu testen, erstellen Administratoren auf dem Container-Host in der PowerShell zunächst ein neues Port-Mapping, welches den Zugriff auf den Host direkt zum Container weiterleitet. In diesem Beispiel hat der Host die IP-Adresse 172.16.0.1. Der Container erhält die IP-Adresse 172.16.0.2. Der externe Zugriff auf den Host wird dann zum Container weitergeleitet. Dazu wird auf dem Host der folgende Befehl eingegeben:

Add-NetNatStaticMapping -NatName „ContainerNat“ -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -InternalPort 80 -ExternalPort 80

In diesem Beispiel wird mit dem Port 80 gearbeitet. Dieser Port muss in der Firewall auf dem Containerhost freigegeben werden:

if (!(Get-NetFirewallRule | where {$_.Name -eq „TCP80“})) {

    New-NetFirewallRule -Name „TCP80“ -DisplayName „HTTP on TCP/80“ -Protocol tcp -LocalPort 80 -Action Allow -Enabled True

}

Auf dem Host wird der Zugriff per HTTP freigeschaltet um den Webserver zu testen (Screenshot: Thomas Joos).Auf dem Host wird der Zugriff per HTTP freigeschaltet um den Webserver zu testen (Screenshot: Thomas Joos).

Endpunkte in Microsoft Azure erstellen

Damit über das Internet auf die nginx-Webseite des Containers zugegriffen werden kann, muss am Beispiel von Microsoft Azure ein Endpunkt eingerichtet werden, der den Zugriff auch Port 80 erlaubt. Die Konfiguration findet über den Menüpunkt Endpunkte in der Weboberfläche statt. Um einen neuen Endpunkt in Microsoft Azure zu erstellen, wird der Menüpunkt Hinzufügen im unteren Bereich gewählt. Durch die Option Eigenständigen Endpunkt Hinzufügen wird der Zugriff gesteuert. In diesem Beispiel wird als öffentlicher Port und als privater Port 80 verwendet sowie als Name „HTTP“. An dieser Stelle ist der nginx- Webserver bereits über das Internet erreichbar.

Die öffentliche IP-Adresse des Containerhosts ist über den Punkt Öffentliche Virtuelle IP-Adresse auf der linken Seite zu sehen. In einem Browser wird die IP-Adresse angegeben. Die Adresse wird zu Microsoft Azure weitergeleitet und durch die erstellten Regeln direkt in den Container. Da hier nginx gestartet ist, öffnet sich die Standardseite von nginx.

Die nginx-Webseite im Container ist auch problemlos über das Internet verwendbar (Screenshot: Thomas Joos).Die nginx-Webseite im Container ist auch problemlos über das Internet verwendbar (Screenshot: Thomas Joos).

Um die Webseite des Servers anzupassen, wird auf dem Host wieder eine PowerShell-Sitzung im Container geöffnet:

Enter-PSSession -ContainerId $webservercontainer.ContainerId -RunAsAdministrator

Microsoft bietet eine kleine Beispielwebseite an, die mit dem folgenden Befehl in nginx eingebunden werden kann:

wget -uri ‚https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/doc-site/virtualization/windowscontainers/quick_start/SampleFiles/index.html‘ -OutFile „C:\nginx-1.9.4\html\index.html“

Wird die Seite neu aufgerufen, erscheint bereits die neue Seite. Auf diesem Weg können Administratoren natürlich auch beliebig weitere Anpassungen vornehmen.

Fazit

Windows Server Container auf Basis von Docker sind eine der wichtigsten Neuerungen in Windows Server 2016. Mit den Containern lassen sich sichere Clouddienste und Webserver betreiben, die sehr schnell bereitgestellt werden können. Administratoren sollten sich bereits jetzt mit dem Thema auseinandersetzen und die Möglichkeiten von Windows Server Containern testen. In kommenden Technical Previews werden die Funktionen erweitert. Bereits jetzt lassen sich Container recht zuverlässig testen. Die Verwaltung in der PowerShell ist nicht sehr kompliziert. Die Installation von Containern ist auch auf lokalen Servern möglich, empfiehlt sich aber derzeit wegen der komplexen Installation nicht wirklich. Der Test mit Azure verläuft deutlich einfacher.

 

Weitere Artikel zum Thema Windows Server 2016:

Neueste Kommentare 

Noch keine Kommentare zu Windows Server 2016: Docker mit Windows

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *