Docker mit Windows Server 2019 und LCOW
Unter Windows Server 2019 kann man zeitgleich Windows sowie Linux Container starten. Dabei setzt Docker auch den Linux Core on Windows (LCOW). Dieser ist aber unter Server 2019 nicht von Haus aus dabei.
Docker installieren
Zunächst installiert man den Feed von Docker in der Powershell
Install-Module DockerMsftProvider -Force
oder falls dieser schon da ist kann ein update nicht schaden:
Update-Module DockerMsftProvider -Verbose -Force
Un zu schauen welche Versionen von Docker zur verfügung stehen lässt man sich mit folgendem Befehl eine Liste ausgeben:
Find-Package docker -ProviderName DockerMSFTProvider -AllVersions
Name Version Source Summary
---- ------- ------ -------
Docker 17.06.2-ee-17 DockerDefault Contains Docker EE for use with Windows Server.
Docker 18.03.1-ee-4 DockerDefault Contains Docker EE for use with Windows Server.
Docker 18.09.0 DockerDefault Contains Docker EE for use with Windows Server.
Die Unterstützung für LCOW ist erst ab Version 18.09.0 verfügbar und somit muss mindestens diese Version installiert sein
Install-Package -Name docker -ProviderName DockerMsftProvider -RequiredVersion 18.09.0 -Update -Force
Wichtig ist am Ende den Docker Dienst neu zu starten.
Restart-Service Docker
INFO: Zum Zeitpunkt des Schreibens war es erforderlich, dass Docker die "experimental" Features aktiviert haben musste.
LCOW installieren
Docker ist nun installiert, wird aber beim starten eines Linux Containers scheitern da wichtige Teile fehlen.
Als erstes läd man sich das release.zip
von dem linuxkit/LCOW Projekt herunter:
github.com/linuxkit/lcow/releases
Führt man nun dieses Script aus werden alle benötigten Teile an die richtigen Stellen entpackt:
Remove-Item "$env:ProgramFiles\Linux Containers" -Force -Recurse
Expand-Archive .\release.zip -DestinationPath "$Env:ProgramFiles\Linux Containers\."
Rename-Item -Path "$Env:ProgramFiles\Linux Containers\bootx64.efi" -NewName "kernel"
INFO: Wichtig ist dabei das umbenennen der Datei
bootx64.efi
inkernel
ohne Dateiendung.
Hat man diese Schritte erfolgreich hintern sich gebracht sollte das starten eines Linux Containers einwandfrei funktionieren:
docker run --platform linux --rm -ti busybox sh