Erste Schritte mit Docker-Remotecontainern unter WSL 2

Diese Schritt-für-Schritt-Anleitung hilft Ihnen bei den ersten Schritten bei der Entwicklung mit Remotecontainern, indem Sie Docker Desktop für Windows mit WSL 2 (Windows-Subsystem für Linux, Version 2) einrichten.

Docker Desktop für Windows bietet eine Entwicklungsumgebung zum Erstellen, Versenden und Ausführen von dockerisierten Apps. Durch Aktivieren der WSL 2-basierten Engine können Sie sowohl Linux- als auch Windows Container in Docker Desktop auf demselben Computer ausführen. (Docker Desktop ist für den persönlichen Gebrauch und kleine Unternehmen kostenlos. Informationen zu den Preisen für Pro, Team oder Unternehmen finden Sie unter Häufig gestellte Fragen zur Docker-Website.

Übersicht über Docker-Container

Docker ist ein Tool zum Erstellen, Bereitstellen und Ausführen von Anwendungen mithilfe von Containern. Mithilfe von Containern können Entwickler eine App mit allen benötigten Komponenten (Bibliotheken, Frameworks, Abhängigkeiten usw.) packen und alles als ein Paket bereitstellen. Durch die Verwendung eines Containers wird sichergestellt, dass die App unabhängig von angepasstem Einstellungen oder zuvor installierten Bibliotheken auf dem Computer unverändert ausgeführt wird, auch wenn es sich um einen anderen Computer handelt als der zum Schreiben und Testen des App-Codes verwendete. Dadurch können sich Entwickler auf das Schreiben von Code konzentrieren, ohne sich Gedanken über das System machen zu müssen, auf dem der Code ausgeführt wird.

Docker-Container ähneln virtuellen Computern, erstellen aber kein vollständiges virtuelles Betriebssystem. Stattdessen ermöglicht Docker der App die Verwendung desselben Linux-Kernels wie das System, auf dem sie ausgeführt wird. Dadurch benötigt das App-Paket nur noch die nicht auf dem Hostcomputer verfügbaren Komponenten. Dies verringert die Paketgröße und verbessert die Leistung.

Kontinuierliche Verfügbarkeit durch die Verwendung von Docker-Containern mit Tools wie Kubernetes ist ein weiterer Grund für die Beliebtheit von Containern. Dadurch können mehrere Versionen des App-Containers zu unterschiedlichen Zeitpunkten erstellt werden. Anstatt ein gesamtes System für Updates oder Wartungsmaßnahmen offline zu schalten, können alle Container (und die jeweiligen Microservices) ohne Unterbrechung ersetzt werden. Du kannst einen neuen Container mit all deinen Updates vorbereiten, den Container für die Produktion einrichten und erst dann auf den neuen Container verweisen, wenn er bereit ist. Du kannst auch verschiedene Versionen deiner App mithilfe von Containern archivieren und bei Bedarf als Sicherheitsfallback ausführen.

Weitere Informationen finden Sie unter Einführung in Docker-Container auf Microsoft Learn.

Voraussetzungen

Hinweis

WSL kann Verteilungen sowohl im WSL-Modus 1 als auch im WSL 2-Modus ausführen. Sie können dies überprüfen, indem Sie PowerShell öffnen und eingeben: wsl -l -v . Stellen Sie sicher, dass ihre Distribution für die Verwendung von WSL 2 festgelegt ist, indem Sie Folgendes eingeben: wsl --set-version <distro> 2 . Ersetzen Sie durch <distro> den Distributionsnamen (z. B. Ubuntu 18.04).

In WSL Version 1 konnte die Docker-Engine aufgrund grundlegender Unterschiede zwischen Windows und Linux nicht direkt in WSL ausgeführt werden, sodass das Docker-Team eine alternative Lösung mit Hyper-V-VMs und LinuxKit entwickelte. Da WSL 2 jetzt jedoch auf einem Linux-Kernel mit vollständiger Systemaufrufkapazität ausgeführt wird, kann Docker in WSL 2 vollständig ausgeführt werden. Dies bedeutet, dass Linux-Container nativ ohne Emulation ausgeführt werden können, was zu einer besseren Leistung und Interoperabilität zwischen Ihren Windows und Linux-Tools führt.

Installieren von Docker Desktop

Da das WSL 2-Back-End in Docker Desktop für Windows unterstützt wird, können Sie in einer Linux-basierten Entwicklungsumgebung arbeiten und Linux-basierte Container erstellen, während Sie Visual Studio Code zum Bearbeiten und Debuggen von Code verwenden und Ihren Container im Microsoft Edge Browser auf Windows ausführen.

So installieren Sie Docker (nach der installation von WSL):

  1. Laden Sie Docker Desktop herunter, und befolgen Sie die Installationsanweisungen.

  2. Starten Sie nach der Installation Docker Desktop über die Windows Startmenü, und wählen Sie dann das Docker-Symbol aus dem ausgeblendeten Symbolmenü Ihrer Taskleiste aus. Klicken Sie mit der rechten Maustaste auf das Symbol, um das Docker-Befehlsmenü anzuzeigen, und wählen Sie "Einstellungen" aus. Docker Desktop-Dashboardsymbol

  3. Stellen Sie sicher, dass "Use the WSL 2 based engine" (WSL 2-basierte Engine verwenden) in Einstellungen Allgemein aktiviert > ist. Allgemeine Einstellungen für Docker Desktop

  4. Wählen Sie aus Ihren installierten WSL 2-Distributionen aus, für die Sie die Docker-Integration aktivieren möchten, indem Sie zu Einstellungen > > Ressourcen-WSL-Integration gehen. Docker Desktop-Ressourceneinstellungen

  5. Um zu bestätigen, dass Docker installiert wurde, öffnen Sie eine WSL-Distribution (z. B. Ubuntu), und zeigen Sie die Version und Buildnummer an, indem Sie Folgendes eingeben: docker --version

  6. Testen Sie, ob Ihre Installation ordnungsgemäß funktioniert, indem Sie ein einfaches integriertes Docker-Image ausführen, indem Sie: docker run hello-world

Tipp

Hier sind einige hilfreiche Docker-Befehle, die Sie kennen sollten:

  • Auflisten der in der Docker-Befehlszeilenschnittstelle verfügbaren Befehle: docker
  • Auflisten von Informationen zu einem bestimmten Befehl: docker <COMMAND> --help
  • Auflisten der Docker-Images auf deinem Computer (zu diesem Zeitpunkt nur das Hello-World-Image): docker image ls --all
  • Listen Sie die Container auf Ihrem Computer mit oder auf docker container ls --all docker ps -a (ohne das Flag -a show all werden nur ausgeführte Container angezeigt).
  • Listen Sie systemweite Informationen zur Docker-Installation auf, einschließlich Statistiken und Ressourcen (CPU & Arbeitsspeicher), die Ihnen im WSL 2-Kontext zur Verfügung stehen, mit: docker info

Entwickeln in Remotecontainern mit VS Code

Um mit der Entwicklung von Apps mit Docker mit WSL 2 zu beginnen, empfehlen wir die Verwendung von VS Code zusammen mit der Remote-WSL-Erweiterung und der Docker-Erweiterung.

  • Installieren Sie die VS Code Remote-WSL-Erweiterung. Mit dieser Erweiterung können Sie Ihr Linux-Projekt, das unter WSL ausgeführt wird, in VS Code öffnen (sie müssen sich keine Gedanken über Pfadprobleme, binäre Kompatibilität oder andere betriebssystemübergreifende Herausforderungen machen).

  • Installieren Sie die VS Code Remote-Containers Erweiterung. Mit dieser Erweiterung können Sie Ihren Projektordner oder Ihr Repository innerhalb eines Containers öffnen, indem Sie den vollständigen Featuresatz von Visual Studio Code nutzen, um Ihre Entwicklungsarbeit innerhalb des Containers zu erledigen.

  • Installieren Sie die VS Code Docker-Erweiterung. Diese Erweiterung fügt die Funktionalität zum Erstellen, Verwalten und Bereitstellen von Containeranwendungen aus VS Code hinzu. (Sie benötigen die Remote-Container Erweiterung, um den Container tatsächlich als Entwicklungsumgebung zu verwenden.)

Wir verwenden Docker, um einen Entwicklungscontainer für ein vorhandenes App-Projekt zu erstellen.

  1. In diesem Beispiel verwende ich den Quellcode aus meinem Hallo Welt-Tutorial für Django in der Dokumentation zur Einrichtung der Python-Entwicklungsumgebung. Sie können diesen Schritt überspringen, wenn Sie lieber Ihren eigenen Projektquellcode verwenden möchten. Um meine HelloWorld-Django-Web-App von GitHub herunterzuladen, öffnen Sie ein WSL-Terminal (z.B. Ubuntu), und geben Sie Folgendes ein:git clone https://github.com/mattwojo/helloworld-django.git

    Hinweis

    Speichern Sie Ihren Code immer im gleichen Dateisystem, in dem Sie Tools verwenden. Dies führt zu einer schnelleren Dateizugriffsleistung. In diesem Beispiel verwenden wir eine Linux-Distribution (Ubuntu) und möchten unsere Projektdateien im WSL-Dateisystem \\wsl\ speichern. Das Speichern von Projektdateien im Windows Dateisystem würde die Verwendung von Linux-Tools in WSL für den Zugriff auf diese Dateien erheblich verlangsamen.

  2. Wechseln Sie in Ihrem WSL-Terminal in den Quellcodeordner für dieses Projekt:

    cd helloworld-django
    
  3. Öffnen Sie das Projekt in VS Code, das auf dem lokalen Remote-WSL-Erweiterungsserver ausgeführt wird, indem Sie Folgendes eingeben:

    code .
    

    Vergewissern Sie sich, dass Sie mit Ihrer WSL Linux-Distribution verbunden sind, indem Sie den grünen Remoteindikator in der unteren linken Ecke Ihrer VS Code-Instanz überprüfen.

    VS Code WSL-Remoteindikator

  4. Geben Sie im VS Code Befehlspalette (STRG+UMSCHALT+P) Folgendes ein: Remotecontainer: Ordner in Container öffnen... Wenn dieser Befehl nicht angezeigt wird, während Sie mit der Eingabe beginnen, überprüfen Sie, ob Sie die oben verknüpfte Remotecontainererweiterung installiert haben.

    VS Code Remotecontainerbefehl

  5. Wählen Sie den Projektordner aus, den Sie containerisieren möchten. In meinem Fall ist dies \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code Remotecontainerordner

  6. Eine Liste der Containerdefinitionen wird angezeigt, da im Projektordner (Repository) noch keine DevContainer-Konfiguration vorhanden ist. Die liste der angezeigten Containerkonfigurationsdefinitionen wird nach Ihrem Projekttyp gefiltert. Für mein Django-Projekt wähle ich Python 3 aus.

    VS Code Konfigurationsdefinitionen für Remotecontainer

  7. Eine neue Instanz von VS Code wird geöffnet, beginnt mit der Erstellung des neuen Images, und sobald der Build abgeschlossen ist, wird der Container gestartet. Sie sehen, dass ein neuer .devcontainer Ordner mit Containerkonfigurationsinformationen in einer - und -Datei angezeigt Dockerfile devcontainer.json wurde.

    VS Code Ordner ".devcontainer"

  8. Um zu bestätigen, dass Ihr Projekt weiterhin sowohl mit WSL als auch innerhalb eines Containers verbunden ist, öffnen Sie das VS Code integrierte Terminal (STRG+UMSCHALT+~). Überprüfen Sie das Betriebssystem, indem Sie Folgendes eingeben: uname und die Python-Version mit: python3 --version . Sie sehen, dass der uname als "Linux" zurückgelangt wurde, sodass Sie weiterhin mit der WSL 2-Engine verbunden sind, und die Python-Versionsnummer basiert auf der Containerkonfiguration, die sich von der python-Version unterscheidet, die in Ihrer WSL-Distribution installiert ist.

  9. Öffnen Sie zum Ausführen und Debuggen Ihrer App innerhalb des Containers mit Visual Studio Code zuerst das Menü Ausführen (STRG+UMSCHALT+D, oder wählen Sie die Registerkarte in der Menüleiste ganz links aus). Wählen Sie dann Ausführen und Debuggen aus, um eine Debugkonfiguration auszuwählen, und wählen Sie die Konfiguration aus, die Am besten zu Ihrem Projekt passt (in meinem Beispiel ist dies "Django"). Dadurch wird launch.json eine Datei im .vscode Ordner Ihres Projekts mit Anweisungen zum Ausführen Ihrer App erstellt.

    VS Code Debugkonfiguration ausführen

  10. Wählen Sie in VS Code Debuggen starten aus (oder drücken Sie > einfach F5). Dadurch wird ein Terminal in VS Code geöffnet, und es sollte ein Ergebnis wie das folgende angezeigt werden: "Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C". Halten Sie die Steuerungstaste gedrückt, und wählen Sie die angezeigte Adresse aus, um Ihre App in Ihrem Standardwebbrowser zu öffnen und zu sehen, wie Ihr Projekt im Container ausgeführt wird.

    VS Code ausführen eines Docker-Containers

Sie haben nun erfolgreich einen Remoteentwicklungscontainer mit Docker Desktop konfiguriert, der vom WSL 2-Back-End unterstützt wird und in dem Sie coden, erstellen, ausführen, bereitstellen oder debuggen können, indem Sie VS Code!

Problembehandlung

WSL-Docker-Kontext veraltet

Wenn Sie eine frühe Tech Preview von Docker für WSL verwendet haben, verfügen Sie möglicherweise über einen Docker-Kontext namens "wsl", der jetzt veraltet ist und nicht mehr verwendet wird. Sie können mit dem Folgenden überprüfen: docker context ls . Sie können diesen "wsl"-Kontext entfernen, um Fehler mit dem Befehl zu vermeiden: docker context rm wsl Da Sie den Standardkontext sowohl für Windows als auch für WSL2 verwenden möchten.

Mögliche Fehler, die bei diesem veralteten wsl-Kontext auftreten können, sind: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. oder error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

Weitere Informationen zu diesem Problem finden Sie unter Einrichten von Docker in Windows System for Linux (WSL2) auf Windows 10.

Probleme beim Suchen des Docker-Imagespeicherordners

Docker erstellt zwei Distributionsordner zum Speichern von Daten:

  • \wsl$\docker-desktop
  • \wsl$\docker-desktop-data

Sie finden diese Ordner, indem Sie Ihre WSL Linux-Distribution öffnen und Folgendes eingeben, explorer.exe . um den Ordner im Datei-Explorer Windows anzuzeigen. Geben Sie Ein: \\wsl\<distro name>\mnt\wsl Ersetzen Sie durch den Namen Ihrer Verteilung <distro name> (d. h. Ubuntu-20.04), um diese Ordner anzuzeigen.

Weitere Informationen zum Suchen von Docker-Speicherorten in WSL finden Sie in diesem Problem im WSL-Repository oder in diesem StackOverlow-Beitrag.

Weitere Hilfe zur allgemeinen Problembehandlung in WSL finden Sie in der Dokumentation zur Problembehandlung.

Zusätzliche Ressourcen