Erste Schritte mit Docker-Remotecontainern unter WSL 2Get started with Docker remote containers on WSL 2

Diese Schritt-für-Schritt-Anleitung hilft Ihnen beim Einstieg in die Entwicklung mit Remote Containern, indem Sie docker Desktop für Windows mit WSL 2 (Windows-Subsystem für Linux, Version 2) einrichten.This step-by-step guide will help you get started developing with remote containers by setting up Docker Desktop for Windows with WSL 2 (Windows Subsystem for Linux, version 2).

Docker Desktop für Windows ist kostenlos verfügbar und bietet eine Entwicklungsumgebung für das entwickeln, versenden und Ausführen von apps in einer App.Docker Desktop for Windows is available for free and provides a development environment for building, shipping, and running dockerized apps. Durch Aktivieren des WSL 2-basierten Moduls können Sie Linux-und Windows-Container in docker Desktop auf demselben Computer ausführen.By enabling the WSL 2 based engine, you can run both Linux and Windows containers in Docker Desktop on the same machine.

Übersicht über Docker-ContainerOverview of Docker containers

Docker ist ein Tool zum Erstellen, Bereitstellen und Ausführen von Anwendungen mithilfe von Containern.Docker is a tool used to create, deploy, and run applications using containers. 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.Containers enable developers to package an app with all of the parts it needs (libraries, frameworks, dependencies, etc) and ship it all out as one package. 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.Using a container ensures that the app will run the same regardless of any customized settings or previously installed libraries on the computer running it that could differ from the machine that was used to write and test the app's code. 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.This permits developers to focus on writing code without worrying about the system that code will be run on.

Docker-Container ähneln virtuellen Computern, erstellen aber kein vollständiges virtuelles Betriebssystem.Docker containers are similar to virtual machines, but don't create an entire virtual operating system. Stattdessen ermöglicht Docker der App die Verwendung desselben Linux-Kernels wie das System, auf dem sie ausgeführt wird.Instead, Docker enables the app to use the same Linux kernel as the system that it's running on. 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.This allows the app package to only require parts not already on the host computer, reducing the package size and improving performance.

Kontinuierliche Verfügbarkeit durch die Verwendung von Docker-Containern mit Tools wie Kubernetes ist ein weiterer Grund für die Beliebtheit von Containern.Continuous availability, using Docker containers with tools like Kubernetes, is another reason for the popularity of containers. Dadurch können mehrere Versionen des App-Containers zu unterschiedlichen Zeitpunkten erstellt werden.This enables multiple versions of your app container to be created at different times. 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.Rather than needing to take down an entire system for updates or maintenance, each container (and it's specific microservices) can be replaced on the fly. 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.You can prepare a new container with all of your updates, set up the container for production, and just point to the new container once it's ready. Du kannst auch verschiedene Versionen deiner App mithilfe von Containern archivieren und bei Bedarf als Sicherheitsfallback ausführen.You can also archive different versions of your app using containers and keep them running as a safety fallback if needed.

Weitere Informationen finden Sie in der Einführung in docker-Container auf Microsoft Learn.To learn more, checkout the Introduction to Docker containers on Microsoft Learn.

VoraussetzungenPrerequisites

Hinweis

WSL kann Verteilungen sowohl im WSL-Version 1-als auch im WSL 2-Modus ausführen.WSL can run distributions in both WSL version 1 or WSL 2 mode. Sie können dies überprüfen, indem Sie PowerShell öffnen und Folgendes eingeben: wsl -l -v .You can check this by opening PowerShell and entering: wsl -l -v. Stellen Sie sicher, dass die Verteilung der Verteilung auf WSL 2 festgelegt ist, indem Sie Folgendes eingeben: wsl --set-version <distro> 2 .Ensure that the your distribution is set to use WSL 2 by entering: wsl --set-version <distro> 2. Ersetzen Sie dies <distro> durch den Namen der Distribution (z. b. Ubuntu 18,04).Replace <distro> with the distro name (e.g. 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 mithilfe von Hyper-V-VMS und linuxkit entwickelte.In WSL version 1, due to fundamental differences between Windows and Linux, the Docker Engine couldn't run directly inside WSL, so the Docker team developed an alternative solution using Hyper-V VMs and LinuxKit. Da WSL 2 nun auf einem Linux-Kernel mit vollständiger System aufrufkapazität ausgeführt wird, kann docker vollständig in WSL 2 ausgeführt werden.However, since WSL 2 now runs on a Linux kernel with full system call capacity, Docker can fully run in WSL 2. Dies bedeutet, dass Linux-Container nativ ohne Emulation ausgeführt werden können. Dies führt zu einer besseren Leistung und Interoperabilität zwischen Ihren Windows-und Linux-Tools.This means that Linux containers can run natively without emulation, resulting in better performance and interoperability between your Windows and Linux tools.

Installieren von Docker DesktopInstall Docker Desktop

Mit dem WSL 2-Back-End, das 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 Code Bearbeitung und-Debuggen verwenden und den Container im Microsoft Edge-Browser unter Windows ausführen.With the WSL 2 backend supported in Docker Desktop for Windows, you can work in a Linux-based development environment and build Linux-based containers, while using Visual Studio Code for code editing and debugging, and running your container in the Microsoft Edge browser on Windows.

So installieren Sie docker (nachdem Sie WSL 2 bereits installierthaben):To install Docker (after already installing WSL 2):

  1. Laden Sie docker Desktop herunter, und befolgen Sie die Installationsanweisungen.Download Docker Desktop and follow the installation instructions.

  2. Starten Sie nach der Installation docker Desktop über das Windows-Startmenü, und wählen Sie dann das docker-Symbol aus dem Menü Ausgeblendete Symbole auf der Taskleiste aus.Once installed, start Docker Desktop from the Windows Start menu, then select the Docker icon from the hidden icons menu of your taskbar. Klicken Sie mit der rechten Maustaste auf das Symbol, um das docker-Menübefehle anzuzeigen und "Einstellungen" auszuwählen.Right-click the icon to display the Docker commands menu and select "Settings". Docker Desktop-Dashboard (Symbol)Docker Desktop dashboard icon

  3. Stellen Sie sicher, dass die Option "WSL 2-basiertes Modul verwenden" in den Einstellungen > Allgemeinaktiviert ist.Ensure that "Use the WSL 2 based engine" is checked in Settings > General. Allgemeine Einstellungen für docker DesktopDocker 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 > Ressourcen > WSL-Integrationwechseln.Select from your installed WSL 2 distributions which you want to enable Docker integration on by going to: Settings > Resources > WSL Integration. Docker-Desktop Ressourcen EinstellungenDocker 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 die Buildnummer an, indem Sie docker --versionTo confirm that Docker has been installed, open a WSL distribution (e.g. Ubuntu) and display the version and build number by entering: docker --version

  6. Testen Sie, ob die Installation ordnungsgemäß funktioniert, indem Sie ein einfaches integriertes docker-Image mit folgenden Aktionen ausführen: docker run hello-worldTest that your installation works correctly by running a simple built-in Docker image using: docker run hello-world

Tipp

Im folgenden finden Sie einige hilfreiche docker-Befehle, die Sie kennen sollten:Here are a few helpful Docker commands to know:

  • Auflisten der in der Docker-Befehlszeilenschnittstelle verfügbaren Befehle: dockerList the commands available in the Docker CLI by entering: docker
  • Auflisten von Informationen zu einem bestimmten Befehl: docker <COMMAND> --helpList information for a specific command with: docker <COMMAND> --help
  • Auflisten der Docker-Images auf deinem Computer (zu diesem Zeitpunkt nur das Hello-World-Image): docker image ls --allList the docker images on your machine (which is just the hello-world image at this point), with: docker image ls --all
  • Auflisten der Container auf dem Computer mit: docker container ls --all oder docker ps -a (ohne das Flag "-a Show all" werden nur ausgelaufende Container angezeigt)List the containers on your machine, with: docker container ls --all or docker ps -a (without the -a show all flag, only running containers will be displayed)
  • Auflisten von systemweiten Informationen zur docker-Installation, einschließlich Statistiken und Ressourcen (CPU & Arbeitsspeicher), die Ihnen im WSL 2-Kontext zur Verfügung stehen: docker infoList system-wide information regarding the Docker installation, including statistics and resources (CPU & memory) available to you in the WSL 2 context, with: docker info

Entwickeln in Remote Containern mithilfe von vs CodeDevelop in remote containers using VS Code

Zum Einstieg in die Entwicklung von apps mit docker und WSL 2 empfehlen wir die Verwendung von vs Code zusammen mit der Remote-WSL-Erweiterung und der Docker-Erweiterung.To get started developing apps using Docker with WSL 2, we recommend using VS Code, along with the Remote-WSL extension and Docker extension.

  • Installieren Sie die vs Code Remote-WSL-Erweiterung.Install the VS Code Remote-WSL extension. Diese Erweiterung ermöglicht es Ihnen, Ihr Linux-Projekt, das auf WSL ausgeführt wird, in vs Code zu öffnen (es muss sich nicht um Probleme mit der Problembehandlung, binäre Kompatibilität oder andere außer Betrieb greifende Herausforderungen kümmern).This extension enables you to open your Linux project running on WSL in VS Code (no need to worry about pathing issues, binary compatibility, or other cross-OS challenges).

  • Installieren Sie die Visual Studio Code-Remote-Containers Erweiterung.Install the VS code Remote-Containers extension. Diese Erweiterung ermöglicht es Ihnen, Ihren Projektordner oder das Repository in einem Container zu öffnen, indem Sie die Vorteile der vollständigen Featuregruppe Visual Studio Code nutzen, um Ihre Entwicklung innerhalb des Containers zu erledigen.This extension enables you to open your project folder or repo inside of a container, taking advantage of Visual Studio Code's full feature set to do your development work within the container.

  • Installieren Sie die vs Code docker-Erweiterung.Install the VS Code Docker extension. Diese Erweiterung bietet die Funktionalität zum Erstellen, verwalten und Bereitstellen von Anwendungen in Containern aus vs Code.This extension adds the functionality to build, manage, and deploy containerized applications from inside VS Code. (Sie benötigen die Remote-Container Erweiterung, um den Container tatsächlich als Entwicklungsumgebung zu verwenden.)(You need the Remote-Container extension to actually use the container as your dev environment.)

Verwenden Sie Docker, um einen Entwicklungs Container für ein vorhandenes App-Projekt zu erstellen.Let's use Docker to create a development container for an existing app project.

  1. In diesem Beispiel verwende ich den Quellcode aus meinem Hallo Welt Tutorial für Django in der python-Entwicklungsumgebung einrichten der Dokumentation. Sie können diesen Schritt überspringen, wenn Sie Ihren eigenen Projekt Quell Code verwenden möchten.For this example, I'll use the source code from my Hello World tutorial for Django in the Python development environment set up docs. You can skip this step if you prefer to use your own project source code. Öffnen Sie zum Herunterladen meiner HelloWorld-Django Web-App von GitHub ein WSL-Terminal (z. b. Ubuntu), und geben Sie Folgendes ein: git clone https://github.com/mattwojo/helloworld-django.gitTo download my HelloWorld-Django web app from GitHub, open a WSL terminal (Ubuntu for example) and enter: git clone https://github.com/mattwojo/helloworld-django.git

    Hinweis

    Speichern Sie Ihren Code immer im gleichen Dateisystem, in dem Sie auch Tools verwenden.Always store your code in the same file system that you're using tools in. Dies führt zu einer schnelleren Datei Zugriffsleistung.This will result in faster file access performance. In diesem Beispiel verwenden wir eine Linux-Distribution (Ubuntu) und möchten unsere Projektdateien im WSL-Dateisystem speichern \\wsl\ .In this example, we are using a Linux distro (Ubuntu) and want to store our project files on the WSL file system \\wsl\. Das Speichern von Projektdateien im Windows-Dateisystem würde die Dinge erheblich verlangsamen, wenn Sie Linux-Tools in WSL verwenden, um auf diese Dateien zuzugreifen.Storing project files on the Windows file system would significantly slow things down when using Linux tools in WSL to access those files.

  2. Wechseln Sie in Ihrem WSL-Terminal in den Quell Code Ordner für dieses Projekt:From your WSL terminal, change directories to the source code folder for this project:

    cd helloworld-django
    
  3. Öffnen Sie das Projekt in vs Code, das auf dem lokalen WSL-Remote Erweiterungs Server ausgeführt wird, indem Sie Folgendes eingeben:Open the project in VS Code running on the local Remote-WSL extension server by entering:

    code .
    

    Vergewissern Sie sich, dass Sie mit ihrer WSL-Linux-Distribution verbunden sind, indem Sie den grünen Remote Indikator in der unteren linken Ecke der vs Code Instanz überprüfen.Confirm that you are connected to your WSL Linux distro by checking the green remote indicator in the bottom-left corner of your VS Code instance.

    WSL-Remote Indikator vs Code

  4. Geben Sie in der vs Code-befehlspaletten(STRG + UMSCHALT + P) Folgendes ein: Remote-Container: Ordner öffnen in Container.. . Wenn dieser Befehl bei der Eingabe nicht angezeigt wird, stellen Sie sicher, dass Sie die oben verknüpfte Remote Container Erweiterung installiert haben.From the VS Code command pallette (Ctrl + Shift + P), enter: Remote-Containers: Open Folder in Container... If this command doesn't display as you begin to type it, check to ensure that you've installed the Remote Container extension linked above.

    Befehl "Remote Container vs Code"

  5. Wählen Sie den Projektordner aus, den Sie containerisieren möchten.Select the project folder that you wish to containerize. In meinem Fall ist dies \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\In my case, this is \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    Remote Container Ordner vs Code

  6. Eine Liste mit Container Definitionen wird angezeigt, da noch keine devcontainer-Konfiguration im Projektordner (Repository) vorhanden ist.A list of container definitions will appear, since there is no DevContainer configuration in the project folder (repo) yet. Die Liste der angezeigten Container Konfigurations Definitionen wird basierend auf dem Projekttyp gefiltert.The list of container configuration definitions that appears is filtered based on your project type. Für mein Django-Projekt wähle ich python 3 aus.For my Django project, I'll select Python 3.

    Konfigurations Definitionen für Remote Container vs Code

  7. Eine neue Instanz von vs Code wird geöffnet, das neue Image wird erstellt, und sobald der Build abgeschlossen ist, wird der Container gestartet.A new instance of VS Code will open, begin building our new image, and once the build completed, will start our container. Sie werden feststellen, dass ein neuer .devcontainer Ordner mit Container Konfigurationsinformationen in einer Dockerfile -und-Datei angezeigt wird devcontainer.json .You will see that a new .devcontainer folder has appeared with container configuration information inside a Dockerfile and devcontainer.json file.

    VS Code. devcontainer-Ordner

  8. Um zu bestätigen, dass das Projekt weiterhin mit WSL und innerhalb eines Containers verbunden ist, öffnen Sie das vs Code integrierte Terminal (STRG + UMSCHALT + ~).To confirm that your project is still connected to both WSL and within a container, open the VS Code integrated terminal (Ctrl + Shift + ~). Überprüfen Sie das Betriebssystem, indem Sie Folgendes eingeben: uname und die Python-Version mit: python3 --version .Check the operating system by entering: uname and the Python version with: python3 --version. Sie sehen, dass der uname als "Linux" zurückgekehrt ist, sodass Sie weiterhin mit dem WSL 2-Modul verbunden sind und die python-Versionsnummer auf der Container Konfiguration basiert, die sich möglicherweise von der auf der WSL-Distribution installierten Python-Version unterscheidet.You can see that the uname came back as "Linux", so you are still connected to the WSL 2 engine, and Python version number will be based on the container config that may differ from the Python version installed on your WSL distribution.

  9. Zum Ausführen und Debuggen der APP innerhalb des Containers mithilfe Visual Studio Code öffnen Sie zunächst das Menü Ausführen (STRG + UMSCHALT + D, oder klicken Sie auf die Registerkarte in der linken Menüleiste).To run and debug your app inside of the container using Visual Studio Code, first open the Run menu (Ctrl+Shift+D or select the tab on the far left menu bar). 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 aufführt (in diesem Beispiel lautet dies "Django").Then select Run and Debug to select a debug configuration and choose the configuration that best suites your project (in my example, this will be "Django"). Dadurch wird eine launch.json Datei im Ordner Ihres .vscode Projekts mit Anweisungen zum Ausführen der App erstellt.This will create a launch.json file in the .vscode folder of your project with instructions on how to run your app.

    VS Code ausführen der Debugkonfiguration

  10. Wählen Sie in vs Code Ausführen > Debuggen starten aus (oder drücken Sie einfach die Taste F5 ).From inside VS Code, select Run > Start debugging (or just press the F5 key). Dadurch wird in vs Code ein Terminal geöffnet, und es sollte ein Ergebnis wie folgt angezeigt werden: "Starten des Entwicklungs Servers beim http://127.0.0.1:8000/ Beenden des Servers mit Control-C".This will open a terminal inside VS Code and you should see a result saying something like: "Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C." Halten Sie die STRG-Taste gedrückt, und wählen Sie die angezeigte Adresse aus, um die app in Ihrem Standard Webbrowser zu öffnen, und sehen Sie, dass Ihr Projekt im Container ausgeführt wird.Hold down the Control key and select the address displayed to open your app in your default web browser and see your project running inside of its container.

    VS Code ausführen eines docker-Containers

Sie haben nun erfolgreich einen remoteentwicklungs-Container mithilfe von Docker Desktop konfiguriert, der vom WSL 2-Back-End betrieben wird, das Sie mit vs Code codieren, erstellen, ausführen, bereitstellen oder Debuggen können.You have now successfully configured a remote development container using Docker Desktop, powered by the WSL 2 backend, that you can code in, build, run, deploy, or debug using VS Code!

ProblembehandlungTroubleshooting

WSL-docker-Kontext veraltetWSL docker context deprecated

Wenn Sie eine frühe technische Vorschau von Docker für WSL verwendet haben, verfügen Sie möglicherweise über einen docker-Kontext mit dem Namen "WSL", der nun veraltet ist und nicht mehr verwendet wird.If you were using an early Tech Preview of Docker for WSL, you may have a Docker context called "wsl" that is now deprecated and no longer used. Sie können mit dem folgenden Befehl überprüfen: docker context ls .You can check with the command: 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.You can remove this "wsl" context to avoid errors with the command: docker context rm wsl as you want to use the default context for both Windows and WSL2.

Mögliche Fehler, die mit 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.Possible errors you might encounter with this deprecated wsl context include: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. or 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 für Linux (WSL2) unter Windows 10.For more on this issue, see How to set up Docker within Windows System for Linux (WSL2) on Windows 10.

Probleme beim Auffinden des docker-Image Speicher OrdnersTrouble finding docker image storage folder

Docker erstellt zwei Distribution-Ordner zum Speichern von Daten:Docker creates two distro folders to store data:

  • \WSL $ \docker-Desktop\wsl$\docker-desktop
  • \WSL $ \docker-Desktop-Data\wsl$\docker-desktop-data

Sie finden diese Ordner durch Öffnen der WSL-Linux-Distribution und eingeben von: explorer.exe . , um den Ordner im Windows-Datei-Explorer anzuzeigen.You can find these folders by opening your WSL Linux distribution and entering: explorer.exe . to view the folder in Windows File Explorer. Geben Sie Folgendes ein: \\wsl\<distro name>\mnt\wsl Ersetzen Sie <distro name> durch den Namen Ihrer Distribution (d.h. Ubuntu-20,04), um diese Ordner anzuzeigen.Enter: \\wsl\<distro name>\mnt\wsl replacing <distro name> with the name of your distribution (ie. Ubuntu-20.04) to see these folders.

Weitere Informationen zum Suchen von Docker-Speicherorten in WSL finden Sie in diesem Problem im WSL -Repository oder in diesem stackoverlow-Beitrag.Find more on locating docker storage locations in WSL, see this issue from the WSL repo or this StackOverlow post.

Weitere Hilfe bei der allgemeinen Problembehandlung in WSL finden Sie im Dokument zur Problem Behandlung.For more help with general troubleshooting issues in WSL, see the Troubleshooting doc.

Zusätzliche RessourcenAdditional resources