Erste Schritte mit Docker-Remotecontainern unter WSL 2

Diese schrittweise Anleitung hilft Ihnen 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, Versand und Ausführen von dockerisierten Apps. Durch Aktivieren des WSL 2-basierten Moduls können Sie sowohl Linux- als auch Windows-Container auf demselben Computer ausführen. (Docker Desktop ist kostenlos für persönliche Nutzung und kleine Unternehmen, informationen zu Pro- oder Team- oder Business-Preisen finden Sie in den Häufig gestellte Fragen zur Docker-Website).

Hinweis

Es wird empfohlen, Docker Desktop aufgrund der Integration mit Windows und Windows-Subsystem für Linux zu verwenden. Während Docker Desktop jedoch sowohl Linux- als auch Windows-Container unterstützt, können Sie beide nicht gleichzeitig ausführen. Um Linux- und Windows-Container gleichzeitig auszuführen, müssen Sie eine separate Docker-Instanz in WSL installieren und ausführen. Wenn Sie gleichzeitige Container ausführen oder einfach ein Containermodul direkt in Ihrer Linux-Verteilung installieren möchten, folgen Sie den Linux-Installationsanweisungen für diesen Containerdienst, z. B. Install Docker Engine auf Ubuntu oder Install Podman für die Ausführung von Linux-Containern.

Ü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 in der Einführung in Docker-Container.

Voraussetzungen

Hinweis

WSL kann Verteiler im WSL-Version 1- oder WSL 2-Modus ausführen. Sie können dies überprüfen, indem Sie PowerShell öffnen und folgendes eingeben: wsl -l -v Stellen Sie sicher, dass die Verteilung auf die Verwendung von WSL 2 festgelegt ist, indem Sie Folgendes eingeben: wsl --set-version <distro> 2 Ersetzen Sie <distro> den Namen der Einführung (z. B. Ubuntu 18.04).

In WSL Version 1 konnte das Docker-Modul aufgrund grundlegender Unterschiede zwischen Windows und Linux nicht direkt innerhalb von WSL ausgeführt werden, sodass das Docker-Team eine alternative Lösung mit Hyper-V-Computern und LinuxKit entwickelt hat. Da WSL 2 jetzt jedoch auf einem Linux-Kernel mit vollständiger Systemanrufkapazität ausgeführt wird, kann Docker in WSL 2 vollständig ausgeführt werden. Dies bedeutet, dass Linux-Container systemintern 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

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

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

  1. Laden Sie Docker Desktop herunter, und folgen Sie den Installationsanweisungen.

  2. Nach der Installation starten Sie Docker Desktop im Windows-Startmenü, und wählen Sie dann das Docker-Symbol im Menü "ausgeblendete Symbole" der Taskleiste aus. Klicken Sie mit der rechten Maustaste auf das Symbol, um das Docker-Befehlsmenü anzuzeigen, und wählen Sie "Einstellungen" aus. Docker-Desktopdashboardsymbol

  3. Stellen Sie sicher, dass "WSL 2-basiertes Modul verwenden" in "Einstellungen>Allgemein" aktiviert ist. Allgemeine Einstellungen für Docker Desktop

  4. Wählen Sie aus Ihren installierten WSL 2-Verteilungen aus, auf die Sie Die Docker-Integration aktivieren möchten, indem Sie dazu wechseln: Einstellungen>für die>WSL-Integration. Docker Desktop-Ressourceneinstellungen

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

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

Tipp

Nachfolgend finden Sie einige hilfreiche Docker-Befehle, um zu wissen:

  • 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
  • Listet die Container auf Ihrem Computer auf, mit: docker container ls --all oder docker ps -a (ohne das -a show all flag, nur ausgeführte Container werden angezeigt)
  • Listet systemweite Informationen zur Docker-Installation auf, einschließlich Statistiken und Ressourcen (CPU-Speicher & ), die Ihnen im WSL 2-Kontext zur Verfügung stehen, mit: docker info

Entwickeln in Remotecontainern mithilfe von VS Code

Um zu beginnen, Apps mit Docker mit WSL 2 zu entwickeln, empfehlen wir die Verwendung von VS Code zusammen mit den WSL-, Dev-Container- und Docker-Erweiterungen.

  • Installieren Sie die VS Code WSL-Erweiterung. Diese Erweiterung ermöglicht Es Ihnen, Ihr Linux-Projekt zu öffnen, das auf WSL in VS Code ausgeführt wird (keine Notwendigkeit, Probleme, binäre Kompatibilität oder andere herausforderungen für das Betriebssystem zu durchlaufen).

  • Installieren Sie die VS Code Dev Container-Erweiterung. Diese Erweiterung ermöglicht es Ihnen, Ihren Projektordner zu öffnen oder in einem Container umzuschreiben, indem Sie den vollständigen Featuresatz von Visual Studio Code nutzen, um Ihre Entwicklungsarbeit im Container zu erledigen.

  • Installieren Sie die VS Code Docker-Erweiterung. Diese Erweiterung fügt die Funktionalität hinzu, um containerisierte Anwendungen aus VS Code zu erstellen, zu verwalten und bereitzustellen. (Sie benötigen die Dev Container-Erweiterung, um den Container tatsächlich als Dev-Umgebung zu verwenden.)

Verwenden wir Docker zum Erstellen eines Entwicklungscontainers für ein vorhandenes App-Projekt.

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

    Hinweis

    Speichern Sie Ihren Code immer imselben Dateisystem, in dem Sie Tools verwenden. Dies führt zu einer schnelleren Leistung des Dateizugriffs. In diesem Beispiel verwenden wir eine Linux-Distro (Ubuntu) und möchten unsere Projektdateien im WSL-Dateisystem \\wsl\speichern. Das Speichern von Projektdateien im Windows-Dateisystem würde beim Verwenden von Linux-Tools in WSL auf diese Dateien erheblich verlangsamt.

  2. Ändern Sie in Ihrem WSL-Terminal Verzeichnisse im Quellcodeordner für dieses Projekt:

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

    code .
    

    Vergewissern Sie sich, dass Sie mit Der WSL Linux-Verteiler verbunden sind, indem Sie die grüne Remoteanzeige in der unteren linken Ecke Ihrer VS Code-Instanz überprüfen.

    VS Code WSL Remoteanzeige

  4. Geben Sie in der VS Code-Befehlspalette (STRG+UMSCHALT+ P) folgendes ein : Dev-Container: Ordner im Container öffnen... Wenn dieser Befehl beim Eingeben nicht angezeigt wird, überprüfen Sie, ob Sie die oben verknüpfte Dev-Container-Erweiterung installiert haben.

    VS Code Dev Container-Befehl

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

    VS Code Dev Container Ordner

  6. Eine Liste der Containerdefinitionen wird angezeigt, da es noch keine Dev-Containerkonfiguration im Projektordner (Repo) gibt. Die Liste der angezeigten Containerkonfigurationsdefinitionen wird basierend auf Ihrem Projekttyp gefiltert. Für mein Django-Projekt wähle ich Python 3 aus.

    KONFIGURATIONSdefinitionen für VS Code Dev Container

  7. Eine neue Instanz von VS Code wird geöffnet, beginnt mit dem Erstellen unseres neuen Images und sobald der Build abgeschlossen ist, den Container. Sie sehen, dass ein neuer .devcontainer Ordner mit Containerkonfigurationsinformationen innerhalb einer Dockerfile Datei devcontainer.json angezeigt wurde.

    VS Code .devcontainer-Ordner

  8. Um zu bestätigen, dass Ihr Projekt weiterhin mit WSL und innerhalb eines Containers verbunden ist, öffnen Sie das integrierte VS Code-Terminal (STRG+UMSCHALT + ~). Überprüfen Sie das Betriebssystem, indem Sie folgendes eingeben: und die Python-Version mit: unamepython3 --version Sie können sehen, dass der Uname als "Linux" zurückgekommen ist, sodass Sie weiterhin mit dem WSL 2-Modul verbunden sind, und Python-Versionsnummer basiert auf der Containerkonfiguration, die sich von der auf Ihrer WSL-Verteilung installierten Python-Version unterscheiden kann.

  9. Wenn Sie Ihre App mithilfe von Visual Studio Code ausführen und debuggen möchten, öffnen Sie zuerst das Menü "Ausführen " (STRG+UMSCHALT+D oder wählen Sie die Registerkarte auf der linken Menüleiste aus). Wählen Sie dann "Ausführen" und "Debuggen" aus, um eine Debugkonfiguration auszuwählen, und wählen Sie die Konfiguration aus, die Ihr Projekt am besten enthält (in meinem Beispiel wird dies "Django"). Dadurch wird eine launch.json Datei im .vscode Ordner Ihres Projekts mit Anweisungen zum Ausführen Ihrer App erstellt.

    VS Code ausführen Debugkonfiguration

  10. Wählen Sie in VS Code dasDebuggenausführen> (oder drücken Sie einfach die F5-TASTE). Dadurch wird ein Terminal innerhalb von VS Code geöffnet, und Sie sollten ein Ergebnis wie: "Starten des Entwicklungsservers beim Beenden des Servers mit http://127.0.0.1:8000/ CONTROL-C". Halten Sie die Steuerelementtaste gedrückt, und wählen Sie die Adresse aus, die angezeigt wird, um Ihre App im Standardwebbrowser zu öffnen, und sehen Sie, wie Ihr Projekt innerhalb des Containers ausgeführt wird.

    VS Code, der einen Docker-Container ausführt

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

Problembehandlung

WSL-Docker-Kontext veraltet

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

Mögliche Fehler, die möglicherweise mit diesem veralteten wsl-Kontext auftreten, umfassen: 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 innerhalb von Windows System for Linux (WSL2) auf Windows 10".

Probleme beim Suchen von Docker-Imagespeicherordnern

Docker erstellt zwei Distroordner zum Speichern von Daten:

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

Sie können diese Ordner finden, indem Sie Ihre WSL Linux-Verteilung öffnen und eingeben: explorer.exe . um den Ordner in Windows Explorer anzuzeigen. Geben Sie ein: \\wsl\<distro name>\mnt\wsl Ersetzen <distro name> durch den Namen Ihrer Verteilung (ie. Ubuntu-20.04) um diese Ordner anzuzeigen.

Weitere Informationen zum Suchen von Docker-Speicherorten in WSL finden Sie in diesem Problem aus dem WSL-Repo oder diesem StackOverlow-Beitrag.

Weitere Hilfe zur allgemeinen Problembehandlung in WSL finden Sie im Dokument zur Problembehandlung .

Zusätzliche Ressourcen