Lesezeit
3 Minuten
Seite 2 - Windows-Server-Container (2)
Mit dem Docker-Client durchsuchen Sie den Docker-Hub nach Images auf Basis von Windows Server 2016. Dazu verwenden Sie zum Beispiel den Befehl docker search Microsoft. Um das Container-Image für die Installation von IIS auf Basis eines Core-Servers mit Windows Server 2016 herunterzuladen, verwenden Sie:
Seite 2: Beispiel – Webserver im Container
ln/Thomas Joos
[5] http://nginx.org
docker pull microsoft/iis: windowsservercoreAlle Images, die Sie bereits auf dem Server eingebunden haben, finden Sie mit docker images. Sobald das IIS-Image heruntergeladen haben, stellen Sie es mit docker run bereit:
docker run -d -p 80:80 microsoft/iis:windowsservercore ping -t localhost
Über den Befehl können Sie auch gleich die Ports aktivieren ("-p") und sicherstellen, dass der IIS als Dienst gestartet wird ("-d").
Bild 2: Innerhalb einer PowerShell-Sitzung können Sie einen Container erstellen, starten und auch verwalten.
Alle gestarteten Container sehen Sie mit docker ps. Nehmen Sie Änderungen an einem Container vor, können Sie diesen Container zum Beispiel als neues Image speichern und auf Basis dieses Images weitere Container. Dazu verwenden Sie den Befehl docker ps -a, um sich den Namen des Containers anzuzeigen. Anschließend erstellten Sie das Image mit docker commit:
docker commit Name Neuer NameAuf Basis dieses Images erstellen Sie jederzeit weitere Container. Das Ganze lässt sich auch automatisieren, indem Sie ein Dockerfile verwenden. Erstellen Sie dazu ein Verzeichnis auf dem Host und in dem Verzeichnis eine Datei "Dockerfile" (ohne Endung). Sie können den Vorgang zum Beispiel mit der PowerShell durchführen:
powershell new-item c:\build\ Dockerfile –ForceDie Automatisierung nehmen Sie über Befehle in der Datei vor. Dazu müssen Sie die Datei "Dockerfile" im Notepad öffnen, etwa mit notepad c:\build\Dockerfile. In der Datei legen Sie dann zum Beispiel fest, dass ein neues Image erstellt werden soll, das den IIS als Basis nutzt. In der Datei können Sie auch bestimmen, dass Änderungen an der Konfiguration vorgenommen werden:
FROM microsoft/iis:windowsservercore RUN echo "Dockerfile-Test für automatische Bereitstellung" > c:\inetpub\wwwroot\index.htmlUm auf Basis dieser Änderungen wieder ein Image zu erstellen, verwenden Sie in diesem Beispiel:
docker build -t iis-dockerfile c:\Build
Beispiel: Webserver im Container
Um eine Testumgebung zu installieren, können Sie zum Beispiel einen Webserver auf Basis von nginx in einem Container installieren. Dazu laden Sie die Installationsdateien von nginx [5] herunter und speichern diese im Container:
wget -uri 'http://nginx.org/ download/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, verwenden Sie den PowerShell-Befehl Expand-Archive:
-OutFile "c:\nginx-1.9.4.zip"
Expand-Archive -Path C:\nginx1.9.4.zip -DestinationPath c:\ -ForceIn unserem Beispiel erstellen Sie auf Basis des Servers ein neues Image, etwa mit:
$webserverimage = New-ContainerImage -ContainerName "web"Danach heben Sie einen neuen Container aus der Taufe, der das Image als Grundlage verwendet:
-Publisher "Contoso" -Name nginxweb -Version 1.0
$webservercontainer = New-Container -Name web1Anschließend starten Sie den erstellten Container mit Start-Container $webservercontainer. Wollen Sie eine PowerShell-Sitzung öffnen, benötigen Sie entweder wieder die ID des Containers oder Sie fragen die ID des Containers direkt in der PowerShell ab:
-ContainerImageName nginxweb -SwitchName "Virtual Switch"
Enter-PSSession -ContainerId $webservercontainer.ContainerId
–RunAsAdministrator
Wollen Sie den Webserver im Container auf Basis von nginx starten, wechseln Sie in das Verzeichnis von nginx. Mit start nginx starten Sie den Webserver.
Bild 3: In der PowerShell erstellen Sie neue Images und aus Images neue Container, die wiederum in der PowerShell verwaltet werden.
Auf dem Container-Host erstellen Sie in der PowerShell ein neues Port-Mapping. Dieses leitet Zugriffe auf den Host zum Container weiter. In diesem Beispiel hat der Host die IP-Adresse 172.16.0.1. Der Container erhält die IP-Adresse 172.16.0.2:
Add-NetNatStaticMapping -NatName "ContainerNat" -Protocol TCPZudem muss der Port des Webservers in der Firewall auf dem Containerhost freigegeben werden:
-ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2
-InternalPort 80 -ExternalPort 80
if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"}))Sie können erstellte Container mit Änderungen, die Sie durchgeführt haben, als neues Image speichern und dieses Image wiederum für neue Container verwenden. Auf diesem Weg schaffen Sie also enorm schnell zahlreiche Container mit allen Einstellungen, die Sie benötigen. Um ein Image zu erstellen, verwenden Sie zum Beispiel folgenden Befehl:
{ New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80"
-Protocol tcp -LocalPort 80 -Action Allow -Enabled True }
docker commit dockertest meincontainerimageSobald Sie das Image erstellt haben, können Sie es mit dem Befehl docker images anzeigen und es als Grundlage für einen neuen Container verwenden:
docker run -it --name dockertest2 meincontainerimage cmdUm Container zu löschen, verwenden Sie wie schon erwähnt docker rm Name des Containers. Images löschen Sie wiederum mit docker rmi Name des Images.
Seite 2: Beispiel – Webserver im Container
Im dritten Teil geht es darum, welche Rolle Container in Azure spielen und wie es um Hyper-V-Container in Windows Server 2016 bestellt ist. Außerdem widmen wir uns der Frage nach der Kompatibilität und dem Parallelbetrieb von Containern. Im ersten Teil haben wir erklärt, wie die Betriebssystem-Virtualisierung mit Docker genau funktioniert und wie Sie Container mit dem Docker-Client verwalten.
<< Vorherige Seite | Seite 2 von 2 |
ln/Thomas Joos
[5] http://nginx.org