Freigeben über


Erste Schritte mit Docker-Remotecontainern auf WSL 2

Diese schrittweise 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 des WSL 2-basierten Moduls können Sie sowohl Linux- als auch Windows-Container in Docker Desktop auf demselben Computer ausführen. (Docker Desktop ist kostenlos für persönliche Zwecke und kleine Unternehmen, informationen zu Den Preisen für Pro, Team oder Business finden Sie in den häufig gestellten Fragen zur Docker-Website).

Hinweis

Wir empfehlen die Verwendung von Docker Desktop aufgrund der Integration in das Windows- und Windows-Subsystem für Linux. 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 müssen oder es einfach bevorzugen, ein Containermodul direkt in Ihrer Linux-Verteilung zu installieren, befolgen Sie die Linux-Installationsanweisungen für diesen Containerdienst, z. B. Installieren sie Docker Engine auf Ubuntu oder Installieren von 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. Mit Containern können Entwickler eine App mit allen benötigten Komponenten (Bibliotheken, Frameworks, Abhängigkeiten usw.) verpacken und als ein Paket versenden. Durch die Verwendung eines Containers wird sichergestellt, dass die App unabhängig von angepassten Einstellungen oder zuvor installierten Bibliotheken auf dem Computer, auf dem sie ausgeführt wird, dieselbe Leistung zeigt, unabhängig davon, dass diese sich von der Maschine unterscheiden können, die zum Schreiben und Testen des App-Codes verwendet wurde. Dadurch können Entwickler sich auf das Schreiben von Code konzentrieren, ohne sich Gedanken über das System zu machen, auf dem Code ausgeführt wird.

Docker-Container ähneln virtuellen Computern, erstellen aber kein gesamtes virtuelles Betriebssystem. Stattdessen ermöglicht Docker der App die Verwendung desselben Linux-Kernels wie das System, auf dem sie ausgeführt wird. Dadurch kann das App-Paket nur Teile benötigen, die noch nicht auf dem Hostcomputer vorhanden sind, wodurch die Paketgröße reduziert und die Leistung verbessert wird.

Kontinuierliche Verfügbarkeit, die Verwendung von Docker-Containern mit Tools wie Kubernetes, ist ein weiterer Grund für die Beliebtheit von Containern. Dadurch können mehrere Versionen Ihres App-Containers zu unterschiedlichen Zeiten erstellt werden. Anstatt ein gesamtes System für Updates oder Wartungsarbeiten herunterfahren zu müssen, kann jeder Container (und seine spezifischen Microservices) sofort ausgetauscht werden. Sie können einen neuen Container mit allen Ihren Updates vorbereiten, den Container für die Produktion einrichten und einfach auf den neuen Container zeigen, sobald er fertig ist. Sie können auch verschiedene Versionen Ihrer App mithilfe von Containern archivieren und bei Bedarf als Sicherheitsfallback ausführen.

Weitere Informationen finden Sie in der Einführung in Docker-Container.

Voraussetzungen

Weitere Informationen finden Sie in den Docker-Dokumentationssystemanforderungen zum Installieren von Docker Desktop unter Windows.

Informationen zum Installieren von Docker auf Windows Server finden Sie unter "Erste Schritte: Vorbereiten von Windows für Container".

Hinweis

WSL kann Verteilungen sowohl im WSL-Version 1- als auch im 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> mit dem Namen der Distro (z. B. Ubuntu 18.04).

In WSL Version 1 konnte das Docker-Modul 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 entwickelt hat. Da WSL 2 jedoch jetzt 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 nativ ohne Emulation ausgeführt werden können, was zu einer besseren Leistung und Interoperabilität zwischen Ihren Windows- und Linux-Tools führt.

Installation von Docker Desktop

Mit dem in Docker Desktop für Windows unterstützten WSL 2-Back-End können Sie in einer linuxbasierten 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 dem bereits installierten WSL):

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

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

  3. Stellen Sie sicher, dass "Verwenden des WSL 2-basierten Moduls" in den Einstellungen>"Allgemein" aktiviert ist. Allgemeine Einstellungen für Docker Desktop

  4. Wählen Sie aus ihren installierten WSL 2-Verteilungen aus, auf denen Sie die Docker-Integration aktivieren möchten, indem Sie zu " Einstellungen>Ressourcen>WSL-Integration" wechseln. 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 verwenden: docker run hello-world

Tipp

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

  • Auflisten der befehle, die in der Docker CLI verfügbar sind, indem Sie Folgendes eingeben: docker
  • Geben Sie Informationen für einen bestimmten Befehl an mit: docker <COMMAND> --help
  • Listen Sie die Docker-Images auf Ihrem Rechner auf (zum jetzigen Zeitpunkt ist dies nur das Hello-World-Image), mit: docker image ls --all
  • Listen Sie die Container auf Ihrem Rechner auf, mit: docker container ls --all oder docker ps -a (ohne den -a-Zeige-alle-Flag, werden nur laufende Container angezeigt)
  • Auflisten systemweiter Informationen zur Docker-Installation, 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 den WSL-, Dev-Container- und Docker-Erweiterungen.

  • Installieren Sie die VS Code WSL-Erweiterung. Mit dieser Erweiterung können Sie Ihr Linux-Projekt öffnen, das auf WSL in VS Code ausgeführt wird (keine Sorge um Pfadprobleme, binäre Kompatibilität oder andere osübergreifende Herausforderungen).

  • Installieren Sie die Erweiterung VS Code Dev Containers. Mit dieser Erweiterung können Sie Ihren Projektordner oder -repository innerhalb eines Containers öffnen und 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 containerisierten Anwendungen in VS Code hinzu. (Sie benötigen die Dev Containers-Erweiterung, um den Container tatsächlich als Entwicklungsumgebung zu verwenden.)

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

  1. In diesem Beispiel verwende ich den Quellcode aus meinem Hello World-Lernprogramm für Django in der Python-Entwicklungsumgebung, um Dokumente einzurichten. 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 selben 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 dies erheblich verlangsamen, wenn Sie Linux-Tools in WSL verwenden, um auf diese Dateien zuzugreifen.

  2. Ändern Sie in Ihrem WSL-Terminal Verzeichnisse in den 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 Ihrer WSL Linux-Distribution verbunden sind, indem Sie die grüne Remoteanzeige in der unteren linken Ecke Ihrer VS Code-Instanz überprüfen.

    VS Code-Indikator für WSL Remote

  4. Geben Sie in der Befehlspalette von VS Code (STRG+UMSCHALT+P) Folgendes ein: Dev Containers: Erneut im Container öffnen, da wir einen Ordner verwenden, der bereits mit der WSL-Erweiterung geöffnet wurde. Alternativ können Sie Dev Containers: Ordner in Container öffnen... verwenden, um einen WSL-Ordner über die lokale \\wsl$ Freigabe (von der Windows-Seite) auszuwählen. Weitere Informationen finden Sie im Schnellstart von Visual Studio Code: Öffnen eines vorhandenen Ordners in einem Container . Wenn diese Befehle nicht angezeigt werden, während Sie mit der Eingabe beginnen, stellen Sie sicher, dass Sie die oben verknüpfte Dev Containers-Erweiterung installiert haben.

    VS Code Dev Containers-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\

    Ordner

  6. Es wird eine Liste der Containerdefinitionen angezeigt, da noch keine Entwicklercontainerkonfiguration im Projektordner (Repository) vorhanden ist. 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 Containers

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

    VS Code .devcontainer-Ordner

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

  9. Um Ihre App mit Visual Studio Code im Container auszuführen und zu debuggen, öffnen Sie zuerst das Menü "Ausführen " (STRG+UMSCHALT+D, oder wählen Sie die Registerkarte auf der linken Menüleiste ganz links aus). Wählen Sie dann "Ausführen" und "Debuggen" aus, um eine Debugkonfiguration auszuwählen und die Konfiguration auszuwählen, die ihrem Projekt am besten entspricht (in meinem Beispiel lautet dies "Django"). Dadurch wird eine launch.json Datei im .vscode Ordner Ihres Projekts mit Anweisungen zum Ausführen der App erstellt.

    VS Code run debug configuration

  10. Wählen Sie in VS Code "Debuggen ausführen"> aus (oder drücken Sie einfach F5). Dadurch wird ein Terminal in VS Code geöffnet, und es sollte eine Meldung wie folgt erscheinen: "Starten des Entwicklungsservers bei http://127.0.0.1:8000/ Beenden des Servers mit STRG-C." Halten Sie die Strg-Taste gedrückt und wählen Sie die angezeigte Adresse aus, um Ihre App in Ihrem Standardwebbrowser zu öffnen. So sehen Sie Ihr Projekt, das innerhalb des Containers läuft.

    VS-Code, der einen Docker-Container ausführt

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

Problembehandlung

WSL-Docker-Kontext ist 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 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 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) unter Windows 10.

Probleme beim Auffinden des Docker-Imagespeicherordners

Docker erstellt zwei Distroordner zum Speichern von Daten:

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

Sie finden diese Ordner, indem Sie Ihre WSL Linux-Verteilung öffnen und Folgendes eingeben: explorer.exe . zum Anzeigen des Ordners im Windows-Datei-Explorer. Geben Sie folgendes ein: \\wsl\<distro name>\mnt\wsl Ersetzen <distro name> durch den Namen Ihrer Verteilung (dh. Ubuntu-20.04) um diese Ordner anzuzeigen.

Weitere Informationen zum Auffinden von Docker-Speicherorten in WSL finden Sie in diesem Problem aus dem WSL-Repository oder diesem StackOverflow-Beitrag.

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

Weitere Ressourcen