Erste Schritte mit Docker-Remotecontainern unter WSL 2
Artikel
Diese schrittweise Anleitung hilft Ihnen bei den ersten Schritten bei der Entwicklung mit Remotecontainern, indem Sie Docker Desktop für Windows mit Windows-Subsystem für Linux Version 2 (WSL 2) einrichten.
Docker Desktop für Windows bietet eine Entwicklungsumgebung zum Erstellen, Liefern 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 für den privaten Gebrauch und kleine Unternehmen kostenlos. Informationen zu den Preisen für Pro, Team oder Business finden Sie in den häufig gestellten Fragen auf der Docker-Website).
Hinweis
Wir empfehlen die Verwendung von Docker Desktop aufgrund der Integration in Windows und das Windows-Subsystem für Linux. Docker Desktop unterstützt zwar die Ausführung von Linux- und Windows-Containern, Sie können jedoch nicht beide 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 Container gleichzeitig ausführen müssen oder einfach nur ein Containermodul direkt in Ihrer Linux-Distribution installieren möchten, befolgen Sie die Linux-Installationsanweisungen für diesen Containerdienst, z. B Installieren des Docker-Moduls 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 schalten zu müssen, 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.
Windows 11, 64 Bit: Home oder Pro, Version 21H2 oder höher, oder Enterprise oder Education, Version 21H2 oder höher.
Windows 10, 64 Bit (empfohlen): Home oder Pro 22H2 (Build 19045) oder höher oder Enterprise oder Education 22H2 (Build 19045) oder höher. (Minimum): Home oder Pro 21H2 (Build 19044) oder höher oder Enterprise oder Education 21H2 (Build 19044) oder höher. Windows aktualisieren
Installieren Sie Visual Studio Code(optional). Dies bietet die beste Benutzererfahrung, einschließlich der Möglichkeit, innerhalb eines Docker-Remotecontainers zu programmieren und zu debuggen, der mit Ihrer Linux-Distribution verbunden ist.
Installieren Sie Windows-Terminal(optional). Dies bietet die beste Benutzererfahrung, einschließlich der Möglichkeit, mehrere Terminals in derselben Schnittstelle anzupassen und zu öffnen (einschließlich Ubuntu, Debian, PowerShell, Azure CLI usw.).
WSL kann Distributionen sowohl im WSL 1-Modus als auch im WSL 2-Modus ausführen. Du kannst dies überprüfen, indem du PowerShell öffnest und Folgendes eingibst: wsl -l -v. Stellen Sie sicher, dass Ihre Distribution auf die Verwendung von WSL 2 festgelegt ist, indem Sie Folgendes eingeben: wsl --set-version <distro> 2. Ersetzen Sie <distro> durch den Namen der Distribution (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 entwickelte. Da WSL 2 jetzt jedoch auf einem Linux-Kernel mit voller 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 höheren Leistung und besseren Interoperabilität zwischen Ihren Windows- und Linux-Tools führt.
Installation 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 des Codes verwenden und Ihren Container im Microsoft Edge-Browser unter Windows ausführen.
Laden Sie Docker Desktop herunter, und befolgen Sie die Installationsanweisungen.
Starten Sie nach der Installation Docker Desktop über das Windows-Startmenü, und wählen Sie dann im Menü mit den ausgeblendeten Symbolen auf der Taskleiste das Docker-Symbol aus. Klicken Sie mit der rechten Maustaste auf das Symbol, um das Menü mit den Docker-Befehlen anzuzeigen, und wählen Sie „Einstellungen“ aus.
Stellen Sie sicher, dass unter Einstellungen>Allgemein die Option „WSL 2-basiertes Modul verwenden“ aktiviert ist.
Wählen Sie die installierte WSL 2-Distribution aus, für die Sie die Docker-Integration aktivieren möchten, indem Sie zu Einstellungen>Ressourcen>WSL-Integration wechseln.
Um zu bestätigen, dass Docker installiert wurde, öffnen Sie eine WSL-Distribution (z. B. Ubuntu), und zeigen Sie die Versions- und Buildnummer an, indem Sie Folgendes eingeben: docker --version
Testen Sie die ordnungsgemäße Funktion der Installation, indem Sie ein einfaches integriertes Docker-Image ausführen: docker run hello-world
Tipp
Die folgende Liste enthält einige nützliche 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
Auflisten der Container auf Ihrem Computer mit docker container ls --all oder docker ps -a (ohne das Flag „-a“ – alle anzeigen – werden nur ausgeführte Container angezeigt)
Auflisten systemweiter Informationen zur Docker-Installation, einschließlich Statistiken und Ressourcen (CPU & Arbeitsspeicher), die im WSL 2-Kontext für Sie verfügbar sind, mit docker info
Entwickeln in Remotecontainern mit VS Code
Für die ersten Schritte beim Entwickeln von Apps mithilfe von Docker mit WSL 2 empfehlen wir die Verwendung von VS Code zusammen mit den WSL-, Dev Containers- und Docker-Erweiterungen.
Installieren Sie die VS Code-WSL-Erweiterung. Mit dieser Erweiterung können Sie Ihr in WSL ausgeführtes Linux-Projekt in VS Code öffnen (ohne sich Gedanken über Pfadprobleme, die Binärkompatibilität oder andere betriebssystemübergreifende Herausforderungen machen zu müssen).
Installieren Sie die VS Code-Dev Containers-Erweiterung. Mit dieser Erweiterung können Sie Ihren Projektordner oder Ihr Projektrepository in einem Container öffnen und sämtliche Features von Visual Studio Code nutzen, um Ihre Entwicklungsarbeiten innerhalb des Containers durchzuführen.
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 als Entwicklungsumgebung zu verwenden.)
Im Folgenden verwenden wir Docker, um einen Entwicklungscontainer für ein vorhandenes App-Projekt zu erstellen.
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 Projektquellcode verwenden möchten. Um die 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. Dadurch erhalten Sie eine bessere Leistung beim Dateizugriff. In diesem Beispiel verwenden wir eine Linux-Distribution (Ubuntu) und möchten unsere Projektdateien im WSL-Dateisystem unter \\wsl\ speichern. Das Speichern von Projektdateien im Windows-Dateisystem würde den Zugriff erheblich verlangsamen, wenn Sie Linux-Tools in WSL verwenden, um auf diese Dateien zuzugreifen.
Wechseln Sie in Ihrem WSL-Terminal in den Quellcodeordner für dieses Projekt:
Bash
cd helloworld-django
Geben Sie Folgendes ein, um das Projekt in der VS Code-Instanz zu öffnen, die auf dem lokalen Server mit der WSL-Erweiterung ausgeführt wird:
Bash
code .
Vergewissern Sie sich, dass Sie mit Ihrer WSL Linux-Distribution verbunden sind, indem Sie die grüne Remoteanzeige in der linken unteren Ecke Ihrer VS Code-Instanz überprüfen.
Geben Sie in der Befehlspalette von VS Code (STRG+UMSCHALT+P) Folgendes ein: Dev Containers: Öffnen Sie erneut in Container, während wir einen Ordner verwenden, der bereits mit der WSL-Erweiterung geöffnet wurde. Alternativ können Sie Dev Containers verwenden: Ordner in Container öffnen..., um einen WSL-Ordner mithilfe der lokalen \\wsl$ -Freigabe (von Windows-Seite) auszuwählen. Weitere Informationen finden Sie im Visual Studio Code-Schnellstart: Öffnen eines vorhandenen Ordners in einem Container. Wenn diese Befehle nicht angezeigt werden, während Sie mit der Eingabe beginnen, überprüfen Sie, ob Sie die oben verknüpfte Dev Containers-Erweiterung installiert haben.
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\.
Es wird eine Liste von Containerdefinitionen angezeigt, da noch keine Entwicklungscontainerkonfiguration im Projektordner (Repository) vorhanden ist. Die angezeigte Liste mit Containerkonfigurationsdefinitionen ist basierend auf Ihrem Projekttyp gefiltert. Für mein Django-Projekt wähle ich Python 3 aus.
Eine neue Instanz von VS Code wird geöffnet, beginnt mit der Erstellung des neuen Images und startet nach Abschluss der Erstellung den Container. Wie Sie sehen, wird jetzt ein neuer Ordner .devcontainer mit Containerkonfigurationsinformationen in einer Dockerfile und einer Datei devcontainer.json angezeigt.
Um sicherzustellen, 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 uname eingeben, und die Python-Version, indem Sie python3 --version eingeben. Wie Sie sehen, wurde für „uname“ die Antwort „Linux“ zurückgegeben, d. h. Sie sind weiterhin mit dem WSL 2-Modul verbunden. Die Python-Versionsnummer basiert auf der Containerkonfiguration und unterscheidet sich möglicherweise von der Python-Version, die in Ihrer WSL-Distribution installiert ist.
Um Ihre App mit Visual Studio Code im Container auszuführen und zu debuggen, öffnen Sie zuerst das Menü Ausführen (drücken Sie dazu 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 für Ihr Projekt geeignet ist (in meinem Beispiel ist dies „Django“). Dadurch wird eine Datei launch.json im Ordner .vscode Ihres Projekts mit Anweisungen zum Ausführen Ihrer App erstellt.
Wählen Sie in VS Code Ausführen>Debuggen starten aus (oder drücken Sie einfach die Taste F5). Dadurch wird ein Terminal in VS Code geöffnet, und ss sollte ein Ergebnis wie folgt angezeigt werden: "Starten des Entwicklungsservers bei http://127.0.0.1:8000/ Beenden des Servers mit CONTROL-C" Halten Sie die CTRL-Taste gedrückt, und wählen Sie die Adresse aus, die angezeigt wird, um Ihre App in Ihrem Standardwebbrowser zu öffnen, und sehen Sie, dass Ihr Projekt innerhalb des Containers ausgeführt wird.
Sie haben nun erfolgreich einen Remoteentwicklungscontainer mit Docker Desktop konfiguriert, der vom WSL 2-Back-End unterstützt wird und in dem Sie mithilfe von VS Code programmieren, erstellen, ausführen, bereitstellen oder debuggen können.
Problembehandlung
WSL-Docker-Kontext veraltet
Wenn Sie eine frühe Technical 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 folgendem Befehl überprüfen: docker context ls. Sie können diesen wsl-Kontext zur Vermeidung von Fehlern mit dem Befehl docker context rm wsl entfernen, da Sie den Standardkontext sowohl für Windows als auch für WSL2 verwenden möchten.
Bei der Verwendung dieses veralteten wsl-Kontexts können z. B. folgende Fehler auftreten: 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.
Probleme beim Ermitteln des Speicherordners für das Docker-Image
Docker erstellt zwei Distributionsordner zum Speichern von Daten:
\wsl$\docker-desktop
\wsl$\docker-desktop-data
Sie können diese Ordner finden, indem Sie Ihre WSL Linux-Distribution öffnen und explorer.exe . eingeben, um den Ordner in Windows-Datei-Explorer anzuzeigen. Geben Sie \\wsl\<distro name>\mnt\wsl ein, und ersetzen Sie <distro name> durch den Namen Ihrer Distribution (z. B. Ubuntu-20.04), um diese Ordner anzuzeigen.
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
Feedback zu Windows Subsystem for Linux
Windows Subsystem for Linux ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
In diesem Modul erstellen und konfigurieren Sie eine containerbasierte Entwicklungsumgebung mit vollem Funktionsumfang mit der Visual Studio Code-Erweiterung „Dev Containers“. Öffnen Sie einen beliebigen Ordner oder ein beliebiges Repository in einem Container, und profitieren Sie vom vollständigen Featureumfang von Visual Studio Code wie etwa von IntelliSense (Vervollständigung) sowie von Funktionen für die Codenavigation und zum Debuggen.
Richten Sie eine WSL-Entwicklungsumgebung mithilfe bewährter Methoden aus dieser Schrittanleitung ein. Erfahren Sie, wie Sie Ubuntu, Visual Studio Code oder Visual Studio, Git, Windows-Anmeldeinformationsverwaltung, MongoDB, MySQL, Docker-Remotecontainer und mehr ausführen.
Installieren das Windows-Subsystem für Linux mit dem Befehl „wsl --install“. Verwenden Sie ein Bash-Terminal auf Ihrem Windows Computer, das von Ihrer bevorzugten Linux-Verteilung ausgeführt wird: Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine und mehr sind verfügbar.