Docker-Container im Subsystem für Linux 2 (WSL 2) ausführen


    Tags: , ,

    Docker Container für WindowsDie Version 2 des WSL bringt nicht nur eine neue Archi­tektur auf Basis einer virtu­ellen Maschine, einen eigenen Linux-Kernel und ein natives EXT4-Datei­system, sondern auch eine engere Inte­gration mit Docker. Auf diese Weise lassen sich Linux-Container sehr einfach im Kontext von Windows nutzen.

    Container verpacken Applikationen zusammen mit System­diensten oder sonstigen Services, von denen sie abhängen. Dazu gehört übrigens auch eine eigene Instanz des File-Systems. Dies vereinfacht und beschleunigt das Deployment, weil Anwendungen ihre eigene Umgebung mitbringen und damit nicht von der Konfiguration des Host-Systems abhängen.

    Als Marktführer hat sich die Firma Docker etabliert. Sie definiert das Packaging-Format für Container und stellt darüber hinaus mit Docker Hub auch ein Repository für Images zur Ver­fügung. Für das Management mehrerer Container, unter anderem für Lastverteilung oder Failover, entwickelt sich Kubernetes zum Standard.

    Unter Linux sind Container schon länger populär und stärker verbreitet als unter Windows, das erst mit Server 2016 eine entsprechende Unterstützung erhielt. Das WSL 2 verbessert die Unterstützung für Linux-Container, indem es den Ressourcen­verbrauch (RAM, CPU-Auslastung) auf das tatsächlich benötigte Maß beschränkt und insgesamt die Performance erhöht.

    Durch das große Angebot an vorgefertigten Container-Images für Linux kann man diverse Services im Kontext von Windows bereitstellen. Das gilt etwa für Datenbanken, Web-Server oder den ganzen LAMP-Stack, den man nicht mehr auf herkömmliche Weise in das OS installieren muss.

    WSL 2 für Docker vorbereiten

    Falls noch nicht geschehen, installiert man im ersten Schritt das Subsystem für Linux unter Windows 2004, Server 2004 oder einer neueren Version (siehe dazu meine Anleitung). Standardmäßig wird das WSL dabei für die Version 1 konfiguriert. Daher sollte man nach dem Hinzufügen einer Distribution über den Microsoft Store prüfen, ob eine Konvertierung zu WSL 2 erforderlich ist. Dies lässt sich über

    wsl -l -v

    feststellen. Mit den Parametern --set-default-version <version> bzw. -s <Distro> <version> kann wsl.exe die Version 2 als Standard festlegen oder für eine bestimmte Linux-Distribution erzwingen.

    Docker Desktop installieren

    Nun steht die Installation von Docker Desktop für Windows an. Die Software kann man von der Website des Herstellers herunterladen, anschließend führt man das Setup aus. Solange es nur darum geht, Linux-Container im Kontext von WSL 2 auszuführen, dann muss man das Windows-Feature Container nicht aktivieren.

    Installation von Docker für Windows. Die Komponenten für WSL 2 sollten ausgewählt werden.

    Nachdem man Docker gestartet hat, öffnet man über das Tray-Applet die Einstellungen und stellt sicher, dass Use the WSL 2 based engine aktiviert ist.

    Die Einstellung für die WSL 2 Engine muss aktiviert sein.

    Falls man versucht hat, Docker unter einem Standard­benutzer auszuführen, dann scheitert dies an fehlenden Berechtigungen. Daher muss man Konten, die Docker starten sollen, in die lokale Gruppe docker-users aufnehmen. Standardmäßig enthält sie nur den User, der Docker installiert hat.

    Benutzer, die das Recht haben sollen, Docker auszuführen, müssen Mitglied in der Gruppe docker-users sein.

    Bevor man einen Container in einer Distribution von WSL 2 startet, sollte man in den Docker-Einstellungen unter Resources => WSL integration nachsehen, ob Docker für das gewünschte Linux aktiviert ist. Standardmäßig ist das nur für die Default-Distribution der Fall.

    Docker für die gewünschten Distributionen aktivieren

    Container ausführen

    Ist auch diese Voraussetzung gegeben, dann kann man die Linux-Distribution am Beispiel von Ubuntu 18.04 mit

    wsl -d ubuntu-18.04

    starten.

    Um einen ersten Container zu erzeugen und die Funktions­tüchtigkeit der Installation zu prüfen, bietet Docker einige Beispiel-Images an. So richtet der Befehl

    docker run -dp 80:80 docker/getting-started

    einen Container ein, in dem ein nginx-Web-Server läuft und der die Docker-Dokumentation enthält. Der Aufruf kann sowohl von der Windows-Seite, etwa in PowerShell, oder aus der bash unter Linux erfolgen.

    Ausführen eines einfachen Containers mit der Docker-Dokumentation

    Mit ihm verbindet man sich, indem man entweder unter Windows im Browser http://localhost aufruft (weil in diesem Fall Port 80 des Containers auf Port 80 des Host zugeordnet wurde) oder indem man die Unix-Shell im Container öffnet.

    Beide Aktionen kann man über die entsprechenden Icons in der Docker-Konsole veranlassen und erspart sich im Fall der CLI die Eingabe der Container-ID für docker exec.

    Aufruf der Shell im Container über die Docker-GUI

    Neben solchen simplen Anwendungen gibt es zahlreiche vorgefertigte Images, die man mit Hilfe des docker-Befehls herunterladen und umgehend im Container starten kann. Darunter finden sich etwa auch komplette LAMP-Stacks.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    1 Kommentar

    Guten Tag Herr Sommergut,

    vielen Dank für diese top Anleitung!
    Mein Mainboard hat zwei Netzwerkkarten, wie weise ich Docker die eine und dem "Rest-Windows" die andere Karte zu?
    Ich habe versucht die Virtuellen Switche in Hyper V dementsprechend umzustellen, leider lässt das Windows nicht zu.

    Der 30TB Pc soll weiterhin als Office PC & Datenspeicher "normal genutzt" werden und nun eben nebenbei Docker mit Pihole, Nextcloud und einem KNX-Visu-Server (cometvisu) laufen lassen.
    Falls Sie mir helfen könnten wäre ich sehr dankbar!
    Vielen Dank und viele Grüße,

    Achim