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 in kernel 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

Quellen

reddit.com/r/docker
LCOW auf GitHub