Docker in WSL 2 verwenden
2. März 2020 von Matt Hernandez, @fiveisprime
Letzten Juni kündigte das Docker-Team an, dass sie daran arbeiten werden, Docker mit dem Windows Subsystem for Linux (WSL) zum Laufen zu bringen. All dies wird durch die jüngsten Änderungen an der Architektur von WSL ermöglicht, das innerhalb einer leichtgewichtigen virtuellen Maschine (VM) läuft, worüber wir in einem früheren Blogbeitrag über WSL 2 gesprochen haben. Seit dieser Ankündigung hat das Docker-Team eine Technical Preview von Docker veröffentlicht, die die Unterstützung für die Ausführung mit WSL 2 beinhaltet.
Dieser Artikel erklärt, wie die Docker Desktop Technical Preview funktioniert und wie Sie die Docker-Erweiterung mit der Technical Preview verwenden können.
Wie es funktioniert
Diese neue Docker-Architektur funktioniert ähnlich wie die WSL Remote Development-Unterstützung von Visual Studio Code, bei der die Docker CLI, die auf dem Host-Computer läuft, Befehle innerhalb des Docker Integration Package ausführt, das auf der Remote-WSL-VM läuft.

Bildnachweis: Docker Engineering
DockerD läuft direkt innerhalb von WSL, sodass keine Hyper-V-VM benötigt wird und alle Linux-Container innerhalb des Linux-Userspace unter Windows laufen, was die Leistung und Kompatibilität verbessert.
Einrichtung
Zuerst einige Voraussetzungen
- Installieren Sie Windows 10 Insider Preview Build 18975 (Slow) oder neuer für WSL 2.
- Installieren Sie Ubuntu aus dem Microsoft Store.
- Aktivieren Sie WSL 2, indem Sie dieser Anleitung folgen.
- Installieren Sie die WSL-Erweiterung für VS Code.
- Installieren Sie die Docker WSL 2 Technical Preview.
Nach der Installation erkennt Docker, dass Sie WSL installiert haben, und fordert Sie auf, die WSL-Integration zu aktivieren. Für dieses Tutorial möchten Sie WSL-Integration aktivieren.

Diese Option ermöglicht es Ihnen, Docker Desktop über die Docker CLI direkt aus Ihrer Linux-Distribution heraus aufzurufen.
Wenn Sie mehrere Linux-Distributionen haben, stellen Sie sicher, dass die WSL-Integration in Ihren Docker-Einstellungen nur für die richtige aktiviert ist.

Nachdem dies konfiguriert ist, werden alle Befehle im Linux-Kontext ausgeführt. Dies gilt auch für Docker-Befehle, die aus PowerShell ausgeführt werden. Das Ausführen von etwas wie docker run mongo… startet einen Linux-Container innerhalb der WSL-VM.

Wenn Sie den Befehl docker ps in WSL ausführen, sehen Sie den Container wie erwartet. Beachten Sie, dass die Container-ID übereinstimmt.

VS Code verwenden
Mit dieser Einrichtung und Funktionalität können Sie die VS Code Docker-Erweiterung installieren und auf Ihre Container zugreifen. Wenn Sie bereits WSL 2 und die WSL-Erweiterung verwenden, hilft Ihnen dies, Docker in Ihren WSL-Workflow zu integrieren, anstatt den Kontext zu wechseln, wenn Sie Container benötigen. Und da der Kontext der Docker CLI auf die Verwendung von DockerD in WSL eingestellt ist, funktioniert die Erweiterung mit Ihren Containern unabhängig davon, ob Sie VS Code über die WSL-Erweiterung geöffnet haben.
Beachten Sie, wie ich im Screenshot unten in WSL verbunden bin und arbeite und dennoch Container erstelle/ausführe, ohne meine bevorzugte Umgebung zu verlassen (zsh in Ubuntu).

Thema: Noctis Sereno
Ich persönlich habe mit dieser Konfiguration eine deutliche Verbesserung der Container-Ausführungszeiten festgestellt, und jeder Teil meines typischen Entwicklungs-Workflows bleibt gleich. Ich verwende auch die Dev Containers-Erweiterung innerhalb von WSL, um spezifische Umgebungen zu testen, ohne sie direkt auf meinem Computer einzurichten.
Wir möchten Ihr Feedback
Beachten Sie, dass Sie Vorabversion-Software verwenden, und obwohl der Windows Insiders Slow-Ring sehr stabil ist, können einige Probleme auftreten. Wenn Sie etwas finden, das nicht wie erwartet funktioniert, eröffnen Sie bitte ein Issue über das Feedback-Tool in Windows. Direkte Docker-Probleme oder Feedback können im Docker for Windows-Repository protokolliert werden.
Viel Spaß beim Programmieren!
Matt Hernandez, VS Code Program Manager @fiveisprime