Erste Schritte mit Docker-Remotecontainern unter WSL 2

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

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 linux- und Windows container in Docker Desktop auf demselben Computer ausführen. (Docker Desktop ist für den privaten Gebrauch und kleine Unternehmen kostenlos. Informationen zu Pro-, Team- oder Business-Preisen finden Sie in den häufig gestellten Fragen zur Docker-Website.

Hinweis

Wir empfehlen die Verwendung von Docker Desktop aufgrund der Integration in Windows und Windows-Subsystem für Linux. Obwohl Docker Desktop die Ausführung von Linux- und Windows unterstützt, können Sie nicht beide gleichzeitig ausführen. Um Linux und Windows gleichzeitig ausführen zu können, müssen Sie eine separate Docker-Instanz in WSL installieren und ausführen. Wenn Sie gleichzeitige Container ausführen müssen oder einfach eine Container-Engine direkt in Ihrer Linux-Distribution installieren möchten, befolgen Sie die Linux-Installationsanweisungen für diesen Containerdienst, z. B. Installieren der Docker-Engine unter Ubuntu oder Installieren von Podman zum Ausführen 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 unter Einführung in Docker-Container 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 Eingeben von : wsl --set-version <distro> 2. Ersetzen <distro> Sie durch den Namen der Distribution (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 entwickelt hat. Da WSL 2 jetzt jedoch auf einem Linux-Kernel mit vollständiger Systemaufrufkapazität ausgeführt wird, kann Docker vollständig in WSL 2 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 für die Codebearbeitung und das Debuggen verwenden und Ihren Container im Microsoft Edge-Browser auf Windows ausführen.

So installieren Sie Docker (nachdem Sie WSL bereits installiert haben):

  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 im Menü mit den ausgeblendeten Symbolen ihrer Taskleiste aus. Klicken Sie mit der rechten Maustaste auf das Symbol, um das Menü mit den Docker-Befehlen anzuzeigen, und wählen Sie "Einstellungen" aus. Docker Desktop dashboard icon

  3. Vergewissern Sie sich, dass "Verwenden der WSL 2-basierten Engine" in "Einstellungen>Allgemein" überprüft ist. Docker Desktop general settings

  4. Wählen Sie eine der installierten WSL 2-Distributionen aus, für die Sie die Docker-Integration aktivieren möchten, indem Sie zu Einstellungen >RessourcenWSL-Integration> gehen. Docker Desktop resource settings

  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: docker --version

  6. Testen Sie, ob ihre Installation ordnungsgemäß funktioniert, indem Sie ein einfaches integriertes Docker-Image mithilfe von ausführen: 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 docker container ls --alldocker ps -a auf (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

Für den Einstieg in die Entwicklung von Apps mit Docker mit WSL 2 wird empfohlen, VS Code zusammen mit der Remote-WSL-Erweiterung und der Docker-Erweiterung zu verwenden.

  • Installieren Sie 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 nicht um Pfadprobleme, Binärkompatibilität oder andere betriebssystemübergreifende Herausforderungen kümmern).

  • Installieren Sie die VS code Remote-Containers-Erweiterung. Mit dieser Erweiterung können Sie Ihren Projektordner oder Ihr Repository in einem Container öffnen und dabei den gesamten Funktionssatz von Visual Studio Code nutzen, um Ihre Entwicklungsarbeit innerhalb des Containers zu ermöglichen.

  • Installieren Sie VS Code Docker-Erweiterung. Diese Erweiterung fügt die Funktionalität zum Erstellen, Verwalten und Bereitstellen von Containeranwendungen aus dem VS Code. (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 zum Einrichten der Python-Entwicklungsumgebung. Sie können diesen Schritt überspringen, wenn Sie lieber Ihren eigenen Projektquellencode 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 speichern \\wsl\. Das Speichern von Projektdateien im Windows-Dateisystem würde dies erheblich verlangsamen, wenn Linux-Tools in WSL für den Zugriff auf diese Dateien verwendet werden.

  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 Folgenden 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 überprüfen.

    VS Code WSL Remote indicator

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

    VS Code Remote Container command

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

    VS Code Remote Container folder

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

    VS Code Remote Container config definitions

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

    VS Code .devcontainer folder

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

  9. Um Ihre App innerhalb des Containers mithilfe von Visual Studio Code ausführen und debuggen zu können, öffnen Sie zuerst das Menü Ausführen (STRG+UMSCHALT+D, oder wählen Sie die Registerkarte ganz links in der 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 Am besten zu Ihrem Projekt passt (in meinem Beispiel ist dies "Django"). Dadurch wird eine Datei launch.json im Ordner Ihres .vscode Projekts mit Anweisungen zum Ausführen Ihrer App erstellt.

    VS Code run debug configuration

  10. Wählen Sie in VS Code die Option AusführenDebuggen> starten aus (oder drücken Sie einfach F5). Dadurch wird in VS Code ein Terminal geöffnet, http://127.0.0.1:8000/ und es sollte ein Ergebnis wie "Starten des Entwicklungsservers bei Beenden des Servers mit CONTROL-C" angezeigt werden. Halten Sie die Steuerungstaste fest, 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 running a docker container

Sie haben nun erfolgreich einen Remoteentwicklungscontainer mit Docker Desktop konfiguriert, der vom WSL 2-Back-End unterstützt wird und den Sie mithilfe von 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 dies 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 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 How to set up Docker within Windows System for Linux (WSL2) on 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: eingeben, explorer.exe . um den Ordner in Windows Explorer. Geben Sie ein: \\wsl\<distro name>\mnt\wsl Ersetzen <distro name> Sie durch den Namen Ihrer Distribution (d. h. Ubuntu-20.04), um diese Ordner zu sehen.

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

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

Zusätzliche Ressourcen