Bien démarrer avec les conteneurs distants Docker sur WSL2Get started with Docker remote containers on WSL 2

Ce guide pas à pas vous aidera à vous familiariser avec le développement avec des conteneurs distants en configurant le Bureau de station d’accueil pour Windows avec WSL 2 (sous-système Windows pour Linux, version 2).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).

Le Bureau de station d’accueil pour Windows est disponible gratuitement et fournit un environnement de développement pour la création, l’expédition et l’exécution d’applications dockerisée.Docker Desktop for Windows is available for free and provides a development environment for building, shipping, and running dockerized apps. En activant le moteur WSL 2, vous pouvez exécuter à la fois des conteneurs Linux et Windows dans le Bureau de l’ordinateur de bureau de l’arrimeur sur le même ordinateur.By enabling the WSL 2 based engine, you can run both Linux and Windows containers in Docker Desktop on the same machine.

Vue d’ensemble des conteneurs DockerOverview of Docker containers

Docker est un outil utilisé pour créer, déployer et exécuter des applications à l’aide de conteneurs.Docker is a tool used to create, deploy, and run applications using containers. Les conteneurs permettent aux développeurs de créer un package d’application avec tous les éléments nécessaires (bibliothèques, frameworks, dépendances, etc.) et de le livrer comme un seul package.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. L’utilisation d’un conteneur garantit que l’application s’exécute de la même manière quels que soient les paramètres personnalisés ou les bibliothèques précédemment installées sur l’ordinateur qui l’exécute, qui peuvent être différents de ceux de l’ordinateur utilisé pour écrire et tester le code de l’application.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. Cela permet aux développeurs de se concentrer sur l’écriture de code sans se soucier du système sur lequel le code sera exécuté.This permits developers to focus on writing code without worrying about the system that code will be run on.

Les conteneurs Docker sont similaires aux machines virtuelles, mais ne créent pas un système d’exploitation virtuel complet.Docker containers are similar to virtual machines, but don't create an entire virtual operating system. Au lieu de cela, Docker permet à l’application d’utiliser le même noyau Linux que le système sur lequel elle s’exécute.Instead, Docker enables the app to use the same Linux kernel as the system that it's running on. Le package de l’application peut ainsi demander uniquement les éléments qui ne sont pas déjà sur l’ordinateur hôte, ce qui réduit la taille du package et améliore les performances.This allows the app package to only require parts not already on the host computer, reducing the package size and improving performance.

La disponibilité continue, à l’aide de conteneurs d’ancrage avec des outils tels que Kubernetes, est une autre raison pour la popularité des conteneurs.Continuous availability, using Docker containers with tools like Kubernetes, is another reason for the popularity of containers. Cela permet de créer plusieurs versions de votre conteneur d’application à des moments différents.This enables multiple versions of your app container to be created at different times. Au lieu de devoir mettre en place un système complet pour les mises à jour ou la maintenance, chaque conteneur (et ses microservices spécifiques) peut être remplacé à la volée.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. Vous pouvez préparer un nouveau conteneur avec toutes vos mises à jour, configurer le conteneur pour la production et pointer simplement vers le nouveau conteneur une fois qu’il est prêt.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. Vous pouvez également archiver différentes versions de votre application à l’aide de conteneurs et, si nécessaire, les laisser s’exécuter comme filet de sécurité.You can also archive different versions of your app using containers and keep them running as a safety fallback if needed.

Pour plus d’informations, consultez la Présentation des conteneurs de l’ancrage sur Microsoft Learn.To learn more, checkout the Introduction to Docker containers on Microsoft Learn.

PrérequisPrerequisites

Notes

WSL peut exécuter des distributions à la fois en mode WSL version 1 ou WSL 2.WSL can run distributions in both WSL version 1 or WSL 2 mode. Vous pouvez le vérifier en ouvrant PowerShell et en entrant : wsl -l -v .You can check this by opening PowerShell and entering: wsl -l -v. Assurez-vous que votre distribution est configurée pour utiliser WSL 2 en entrant : wsl --set-version <distro> 2 .Ensure that the your distribution is set to use WSL 2 by entering: wsl --set-version <distro> 2. Remplacez <distro> par le nom distribution (par exemple, Ubuntu 18,04).Replace <distro> with the distro name (e.g. Ubuntu 18.04).

Dans WSL version 1, en raison des différences fondamentales entre Windows et Linux, le moteur de l’Ancrable n’a pas pu s’exécuter directement à l’intérieur de WSL. l’équipe de l’arrimeur a donc développé une solution alternative utilisant des machines virtuelles Hyper-V et LinuxKit.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. Toutefois, étant donné que WSL 2 s’exécute maintenant sur un noyau Linux avec une capacité d’appel système complète, l’arrimeur peut s’exécuter entièrement dans WSL 2.However, since WSL 2 now runs on a Linux kernel with full system call capacity, Docker can fully run in WSL 2. Cela signifie que les conteneurs Linux peuvent s’exécuter en mode natif sans émulation, ce qui améliore les performances et l’interopérabilité entre vos outils Windows et Linux.This means that Linux containers can run natively without emulation, resulting in better performance and interoperability between your Windows and Linux tools.

Installer Docker DesktopInstall Docker Desktop

Avec le serveur principal WSL 2 pris en charge dans le Bureau de station d’accueil pour Windows, vous pouvez travailler dans un environnement de développement basé sur Linux et créer des conteneurs basés sur Linux, tout en utilisant Visual Studio Code pour l’édition et le débogage de code, et en exécutant votre conteneur dans le navigateur Microsoft Edge sur Windows.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.

Pour installer l’amarrage (après avoir déjà installé WSL 2) :To install Docker (after already installing WSL 2):

  1. Téléchargez le Bureau de l' ancrage et suivez les instructions d’installation.Download Docker Desktop and follow the installation instructions.

  2. Une fois l’installation terminée, démarrez le Bureau de l’ordinateur de bureau à partir du menu Démarrer de Windows, puis sélectionnez l’icône de l’Ancreur dans le menu icônes masquées de votre barre des tâches.Once installed, start Docker Desktop from the Windows Start menu, then select the Docker icon from the hidden icons menu of your taskbar. Cliquez avec le bouton droit sur l’icône pour afficher le menu commandes de l’ancrage et sélectionnez Paramètres.Right-click the icon to display the Docker commands menu and select "Settings". Icône du tableau de bord Bureau de l’ancrageDocker Desktop dashboard icon

  3. Assurez-vous que l’option « utiliser le moteur basé sur WSL 2 » est cochée dans paramètres > général.Ensure that "Use the WSL 2 based engine" is checked in Settings > General. Paramètres généraux du Bureau de l’ancrageDocker Desktop general settings

  4. Sélectionnez parmi les distributions WSL 2 installées pour lesquelles vous souhaitez activer l’intégration de l’amarrage en accédant à : paramètres > ressources > WSL Integration.Select from your installed WSL 2 distributions which you want to enable Docker integration on by going to: Settings > Resources > WSL Integration. Paramètres des ressources du Bureau de l’ancrageDocker Desktop resource settings

  5. Pour confirmer l’installation de Dockr, ouvrez une distribution WSL (par exemple, Ubuntu) et affichez la version et le numéro de build en entrant : 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. Testez le fonctionnement correct de votre installation en exécutant une simple image d’ancrage intégré à l’aide de : docker run hello-worldTest that your installation works correctly by running a simple built-in Docker image using: docker run hello-world

Conseil

Voici quelques commandes d’ancrage utiles à connaître :Here are a few helpful Docker commands to know:

  • Répertoriez les commandes disponibles dans l’interface de ligne de commande de Docker en entrant : dockerList the commands available in the Docker CLI by entering: docker
  • Répertoriez les informations pour une commande spécifique avec : docker <COMMAND> --helpList information for a specific command with: docker <COMMAND> --help
  • Répertoriez les images de Docker sur votre ordinateur (il s’agit simplement l’image Hello World à ce stade) avec : 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
  • Répertorier les conteneurs sur votre ordinateur, avec : docker container ls --all ou docker ps -a (sans l’indicateur-a Show All, seuls les conteneurs en cours d’exécution sont affichés)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)
  • Répertoriez les informations à l’ensemble du système concernant l’installation de la station d’accueil, y compris les statistiques et les ressources (mémoire & de l’UC) disponibles dans le contexte WSL 2, avec : 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

Développer dans des conteneurs distants à l’aide de VS CodeDevelop in remote containers using VS Code

Pour commencer à développer des applications à l’aide de Dockr avec WSL 2, nous vous recommandons d’utiliser VS Code, ainsi que l’extension WSL et l’extension d’ancrage à distance.To get started developing apps using Docker with WSL 2, we recommend using VS Code, along with the Remote-WSL extension and Docker extension.

  • Installez le vs code extension WSL à distance.Install the VS Code Remote-WSL extension. Cette extension vous permet d’ouvrir votre projet Linux exécuté sur WSL dans VS Code (vous n’avez pas à vous soucier des problèmes liés aux chemins d’accès, à la compatibilité binaire ou à d’autres défis liés au système d’exploitation).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).

  • Installez l’extension de Remote-Containers vs code.Install the VS code Remote-Containers extension. Cette extension vous permet d’ouvrir votre dossier de projet ou référentiel à l’intérieur d’un conteneur, en tirant parti de l’ensemble complet des fonctionnalités de Visual Studio Code pour effectuer votre travail de développement dans le conteneur.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.

  • Installez l’extension d’ancrage vs code.Install the VS Code Docker extension. Cette extension ajoute les fonctionnalités permettant de créer, de gérer et de déployer des applications en conteneur à partir de VS Code.This extension adds the functionality to build, manage, and deploy containerized applications from inside VS Code. (Vous avez besoin de l’extension de Remote-Container pour utiliser réellement le conteneur comme environnement de développement.)(You need the Remote-Container extension to actually use the container as your dev environment.)

Utilisons Dockr pour créer un conteneur de développement pour un projet d’application existant.Let's use Docker to create a development container for an existing app project.

  1. Pour cet exemple, je vais utiliser le code source de mon Hello World didacticiel pour Django dans l’environnement de développement python configurer docs. Vous pouvez ignorer cette étape si vous préférez utiliser votre propre code source de projet.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. Pour télécharger mon HelloWorld-Django application Web à partir de GitHub, ouvrez un terminal WSL (Ubuntu, par exemple) et entrez : 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

    Notes

    Stockez toujours votre code dans le même système de fichiers que celui dans lequel vous utilisez les outils.Always store your code in the same file system that you're using tools in. Cela entraîne des performances d’accès aux fichiers plus rapides.This will result in faster file access performance. Dans cet exemple, nous utilisons un distribution Linux (Ubuntu) et souhaitez stocker nos fichiers de projet sur le système de fichiers WSL \\wsl\ .In this example, we are using a Linux distro (Ubuntu) and want to store our project files on the WSL file system \\wsl\. Le stockage des fichiers projet sur le système de fichiers Windows ralentit considérablement les choses lors de l’utilisation des outils Linux dans WSL pour accéder à ces fichiers.Storing project files on the Windows file system would significantly slow things down when using Linux tools in WSL to access those files.

  2. À partir de votre terminal WSL, remplacez les répertoires par le dossier du code source de ce projet :From your WSL terminal, change directories to the source code folder for this project:

    cd helloworld-django
    
  3. Ouvrez le projet dans VS Code s’exécutant sur le serveur d’extension local à distance WSL en entrant ce qui suit :Open the project in VS Code running on the local Remote-WSL extension server by entering:

    code .
    

    Vérifiez que vous êtes connecté à votre distribution Linux WSL en vérifiant l’indicateur distant vert dans le coin inférieur gauche de votre instance de VS Code.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.

    Indicateur distant VS Code WSL

  4. À partir de la commande VS Code palette (Ctrl + Maj + P), entrez : Remote-Containers : ouvrir le dossier dans le conteneur... Si cette commande ne s’affiche pas lorsque vous commencez à la taper, vérifiez que vous avez installé l’extension de conteneur distant liée ci-dessus.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.

    Commande VS Code Remote Container

  5. Sélectionnez le dossier du projet que vous souhaitez déconteneurr.Select the project folder that you wish to containerize. Dans mon cas, c’est \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\In my case, this is \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    Dossier de conteneur distant VS Code

  6. Une liste de définitions de conteneur s’affiche, car il n’existe pas encore de configuration DevContainer dans le dossier du projet (référentiel).A list of container definitions will appear, since there is no DevContainer configuration in the project folder (repo) yet. La liste des définitions de configuration de conteneur qui s’affiche est filtrée en fonction de votre type de projet.The list of container configuration definitions that appears is filtered based on your project type. Pour mon projet Django, je sélectionne python 3.For my Django project, I'll select Python 3.

    VS Code les définitions de configuration de conteneur distant

  7. Une nouvelle instance de VS Code s’ouvre, commence à créer la nouvelle image et, une fois la génération terminée, démarre notre conteneur.A new instance of VS Code will open, begin building our new image, and once the build completed, will start our container. Vous verrez qu’un nouveau .devcontainer dossier est apparu avec les informations de configuration de conteneur dans un Dockerfile devcontainer.json fichier et.You will see that a new .devcontainer folder has appeared with container configuration information inside a Dockerfile and devcontainer.json file.

    Dossier VS Code. devcontainer

  8. Pour confirmer que votre projet est toujours connecté à la fois à WSL et à l’intérieur d’un conteneur, ouvrez le terminal intégré VS Code (Ctrl + Maj + ~).To confirm that your project is still connected to both WSL and within a container, open the VS Code integrated terminal (Ctrl + Shift + ~). Vérifiez le système d’exploitation en entrant : uname et la version Python avec : python3 --version .Check the operating system by entering: uname and the Python version with: python3 --version. Vous pouvez voir que la commande uname est renvoyée sous la forme « Linux ». vous êtes donc toujours connecté au moteur WSL 2 et le numéro de version Python sera basé sur la configuration du conteneur qui peut différer de la version de Python installée sur votre distribution WSL.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. Pour exécuter et déboguer votre application à l’intérieur du conteneur à l’aide de Visual Studio Code, commencez par ouvrir le menu exécuter (Ctrl + Maj + D ou sélectionnez l’onglet dans la barre de menus de gauche).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). Sélectionnez ensuite exécuter et déboguer pour sélectionner une configuration de débogage, puis choisissez la configuration qui correspond le mieux à votre projet (dans mon exemple, il s’agit de « 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"). Cette opération crée un launch.json fichier dans le .vscode dossier de votre projet avec des instructions sur l’exécution de votre application.This will create a launch.json file in the .vscode folder of your project with instructions on how to run your app.

    VS Code exécuter la configuration de débogage

  10. Dans vs code, sélectionnez exécuter > Démarrer le débogage (ou appuyez simplement sur la touche F5 ).From inside VS Code, select Run > Start debugging (or just press the F5 key). Cela ouvre un terminal à l’intérieur de VS Code et un résultat semblable à celui-ci doit s’afficher : « démarrage du serveur de développement à http://127.0.0.1:8000/ la sortie du serveur avec le contrôle 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." Maintenez la touche CTRL enfoncée et sélectionnez l’adresse affichée pour ouvrir votre application dans votre navigateur Web par défaut et voir votre projet en cours d’exécution dans son conteneur.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 de l’exécution d’un conteneur d’ancrage

Vous avez maintenant configuré avec succès un conteneur de développement distant à l’aide de l’ordinateur de bureau de l’amarrage, alimenté par le backend WSL 2, que vous pouvez coder, générer, exécuter, déployer ou déboguer à l’aide de VS Code !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!

DépannageTroubleshooting

Contexte d’ancrage WSL déconseilléWSL docker context deprecated

Si vous utilisiez une préversion Tech préliminaire de la station d’accueil pour WSL, vous pouvez avoir un contexte d’ancrage appelé « WSL » qui est maintenant déconseillé et n’est plus utilisé.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. Vous pouvez vérifier à l’aide de la commande : docker context ls .You can check with the command: docker context ls. Vous pouvez supprimer ce contexte « WSL » pour éviter les erreurs avec la commande : docker context rm wsl lorsque vous souhaitez utiliser le contexte par défaut pour Windows et WSL2.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.

Les erreurs possibles que vous pouvez rencontrer avec ce contexte WSL déconseillé sont les suivantes : docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. ou 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.

Pour plus d’informations sur ce problème, consultez la page Comment configurer l’ordinateur de connexion dans Windows System pour Linux (WSL2) sur Windows 10.For more on this issue, see How to set up Docker within Windows System for Linux (WSL2) on Windows 10.

Problème de recherche du dossier de stockage de l’image de l’arrimeurTrouble finding docker image storage folder

L’arrimeur crée deux dossiers distribution pour stocker les données :Docker creates two distro folders to store data:

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

Vous pouvez trouver ces dossiers en ouvrant votre distribution WSL Linux et en entrant : explorer.exe . pour afficher le dossier dans l’Explorateur de fichiers Windows.You can find these folders by opening your WSL Linux distribution and entering: explorer.exe . to view the folder in Windows File Explorer. Entrez : \\wsl\<distro name>\mnt\wsl <distro name> en remplaçant par le nom de votre distribution (par ex. Ubuntu-20,04) pour voir ces dossiers.Enter: \\wsl\<distro name>\mnt\wsl replacing <distro name> with the name of your distribution (ie. Ubuntu-20.04) to see these folders.

Pour plus d’informations sur la recherche des emplacements de stockage de l’arrimage dans WSL, consultez ce problème à partir du référentiel WSL ou de ce billet de StackOverlow.Find more on locating docker storage locations in WSL, see this issue from the WSL repo or this StackOverlow post.

Pour plus d’informations sur les problèmes généraux de dépannage dans WSL, consultez le document de Dépannage .For more help with general troubleshooting issues in WSL, see the Troubleshooting doc.

Ressources supplémentairesAdditional resources