Bien démarrer avec les conteneurs distants Docker sur WSL2

Ce guide pas à pas vous aidera à commencer à développer avec des conteneurs distants en configurant Docker Desktop pour Windows avec WSL 2 (Sous-système Windows pour Linux, version 2).

Docker Desktop pour Windows fournit un environnement de développement pour la création, la livraison et l’exécution d’applications dockerized. En activant le moteur WSL 2, vous pouvez exécuter des conteneurs Linux et Windows dans Docker Desktop sur le même ordinateur. (Docker Desktop est gratuit pour l’utilisation personnelle et les petites entreprises, pour plus d’informations sur Pro, l’équipe ou la tarification métier, consultez les FAQ sur le site Docker).

Notes

Nous vous recommandons d’utiliser Docker Desktop en raison de son intégration à Windows et Sous-système Windows pour Linux. Toutefois, tandis que Docker Desktop prend en charge l’exécution de conteneurs Linux et Windows, vous ne pouvez pas exécuter les deux simultanément. Pour exécuter linux et Windows conteneurs simultanément, vous devez installer et exécuter une instance Docker distincte dans WSL. Si vous devez exécuter des conteneurs simultanés ou préférez simplement installer un moteur de conteneur directement dans votre distribution Linux, suivez les instructions d’installation Linux pour ce service de conteneur, telles que Installer le moteur Docker sur Ubuntu ou Installer Podman pour exécuter des conteneurs Linux.

Vue d’ensemble des conteneurs Docker

Docker est un outil utilisé pour créer, déployer et exécuter des applications à l’aide de conteneurs. 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. 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. 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é.

Les conteneurs Docker sont similaires aux machines virtuelles, mais ne créent pas un système d’exploitation virtuel complet. 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. 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.

La disponibilité continue, à l’aide de conteneurs d’ancrage avec des outils tels que Kubernetes, est une autre raison pour la popularité des conteneurs. Cela permet de créer plusieurs versions de votre conteneur d’application à des moments différents. 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. 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. 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é.

Pour plus d’informations, consultez l’introduction aux conteneurs Docker sur Microsoft Learn.

Prérequis

Notes

WSL peut exécuter des distributions en mode WSL version 1 ou WSL 2. Vous pouvez vérifier cela en ouvrant PowerShell et en entrant : wsl -l -v. Vérifiez que la distribution est définie pour utiliser WSL 2 en entrant : wsl --set-version <distro> 2 Remplacez <distro> par le nom de distribution (par exemple Ubuntu 18.04).

Dans WSL version 1, en raison de différences fondamentales entre Windows et Linux, le moteur Docker n’a pas pu s’exécuter directement à l’intérieur de WSL, de sorte que l’équipe Docker a développé une autre solution à l’aide de machines virtuelles Hyper-V et LinuxKit. Toutefois, étant donné que WSL 2 s’exécute désormais sur un noyau Linux avec une capacité d’appel système complète, Docker peut entièrement s’exécuter dans WSL 2. Cela signifie que les conteneurs Linux peuvent s’exécuter en mode natif sans émulation, ce qui entraîne une meilleure performance et une interopérabilité entre vos outils Windows et Linux.

Installer Docker Desktop

Avec le back-end WSL 2 pris en charge dans Docker Desktop pour Windows, vous pouvez travailler dans un environnement de développement Linux et créer des conteneurs Linux, tout en utilisant Visual Studio Code pour la modification et le débogage du code, et exécuter votre conteneur dans le navigateur Microsoft Edge sur Windows.

Pour installer Docker (après avoir déjà installé WSL) :

  1. Téléchargez Docker Desktop et suivez les instructions d’installation.

  2. Une fois installé, démarrez Docker Desktop à partir du Windows menu Démarrer, puis sélectionnez l’icône Docker dans le menu icônes masquées de votre barre des tâches. Cliquez avec le bouton droit sur l’icône pour afficher le menu Commandes Docker, puis sélectionnez « Paramètres ». Docker Desktop dashboard icon

  3. Vérifiez que « Utiliser le moteur WSL 2 » est archivé Paramètres>General. Docker Desktop general settings

  4. Sélectionnez les distributions WSL 2 installées sur lesquelles vous souhaitez activer l’intégration Docker en accédant à : Paramètres>ResourcesWSL> Integration. Docker Desktop resource settings

  5. Pour vérifier que Docker a été installé, ouvrez une distribution WSL (par exemple Ubuntu) et affichez la version et le numéro de build en entrant : docker --version

  6. Testez que votre installation fonctionne correctement en exécutant une image Docker intégrée simple à l’aide de : docker run hello-world

Conseil

Voici quelques commandes Docker utiles à connaître :

  • Répertoriez les commandes disponibles dans l’interface de ligne de commande de Docker en entrant : docker
  • Répertoriez les informations pour une commande spécifique avec : 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 --all
  • Répertoriez les conteneurs sur votre ordinateur, avec : docker container ls --all ou docker ps -a (sans l’indicateur -a afficher tous les indicateurs, seuls les conteneurs en cours d’exécution seront affichés)
  • Répertoriez les informations à l’échelle du système concernant l’installation de Docker, notamment les statistiques et les ressources (mémoire processeur & ) disponibles dans le contexte WSL 2, avec : docker info

Développer dans des conteneurs distants à l’aide de VS Code

Pour commencer à développer des applications à l’aide de Docker avec WSL 2, nous vous recommandons d’utiliser VS Code, ainsi que l’extension Remote-WSL et l’extension Docker.

  • Installez l’extension Remote-WSL VS Code. Cette extension vous permet d’ouvrir votre projet Linux s’exécutant sur WSL dans VS Code (il n’est pas nécessaire de vous soucier des problèmes de chemin d’accès, de compatibilité binaire ou d’autres défis inter-système d’exploitation).

  • Installez l’extension vs code Remote-Containers. Cette extension vous permet d’ouvrir votre dossier de projet ou votre dépôt à l’intérieur d’un conteneur, en tirant parti de la fonctionnalité complète de Visual Studio Code pour effectuer votre travail de développement au sein du conteneur.

  • Installez l’extension Docker VS Code. Cette extension ajoute la fonctionnalité de génération, de gestion et de déploiement d’applications conteneurisées à partir de VS Code. (Vous avez besoin de l’extension Remote-Container pour utiliser le conteneur comme environnement de développement.)

Utilisons Docker pour créer un conteneur de développement pour un projet d’application existant.

  1. Pour cet exemple, j’utiliserai le code source à partir de mon didacticiel Hello World pour Django dans l’environnement de développement Python configuré des documents. Vous pouvez ignorer cette étape si vous préférez utiliser votre propre code source de projet. 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.git

    Notes

    Stockez toujours votre code dans le même système de fichiers dans lequel vous utilisez des outils. Cela entraîne des performances d’accès aux fichiers plus rapides. Dans cet exemple, nous utilisons une distribution Linux (Ubuntu) et voulons stocker nos fichiers projet sur le système de fichiers \\wsl\WSL. Le stockage des fichiers projet sur le système de fichiers Windows ralentirait considérablement les choses lors de l’utilisation d’outils Linux dans WSL pour accéder à ces fichiers.

  2. À partir de votre terminal WSL, remplacez les répertoires par le dossier de code source de ce projet :

    cd helloworld-django
    
  3. Ouvrez le projet dans VS Code s’exécutant sur le serveur d’extension Remote-WSL local en entrant :

    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.

    VS Code WSL Remote indicator

  4. À partir du VS Code palette de commandes (Ctrl + Maj + P), entrez : Remote-Containers : Ouvrir le dossier dans le conteneur... Si cette commande ne s’affiche pas lorsque vous commencez à le taper, vérifiez que vous avez installé l’extension conteneur distante liée ci-dessus.

    VS Code Remote Container command

  5. Sélectionnez le dossier de projet que vous souhaitez conteneuriser. Dans mon cas, c’est \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code Remote Container folder

  6. Une liste de définitions de conteneur s’affiche, car il n’existe pas encore de configuration DevContainer dans le dossier de projet (dépôt). La liste des définitions de configuration de conteneur qui s’affiche est filtrée en fonction du type de projet. Pour mon projet Django, je sélectionne Python 3.

    VS Code Remote Container config definitions

  7. Une nouvelle instance de VS Code s’ouvre, commence à créer notre nouvelle image, et une fois la build terminée, démarre notre conteneur. Vous verrez qu’un nouveau .devcontainer dossier est apparu avec des informations de configuration de conteneur à l’intérieur d’un fichier et devcontainer.json d’un Dockerfile fichier.

    VS Code .devcontainer folder

  8. Pour vérifier que votre projet est toujours connecté à WSL et au sein d’un conteneur, ouvrez le terminal intégré VS Code (Ctrl + Maj + ~). Vérifiez le système d’exploitation en entrant : uname et la version Python avec : python3 --version. Vous pouvez voir que le nom uname est retourné en tant que « Linux », de sorte que vous êtes 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 Python installée sur votre distribution WSL.

  9. Pour exécuter et déboguer votre application à l’intérieur du conteneur à l’aide de Visual Studio Code, ouvrez d’abord le menu Exécuter (Ctrl+Maj+D ou sélectionnez l’onglet dans la barre de menus de loin à gauche). Sélectionnez Ensuite Exécuter et Déboguer pour sélectionner une configuration de débogage et choisissez la configuration qui convient le mieux à votre projet (dans mon exemple, ce sera « Django »). Cela crée un launch.json fichier dans le dossier de votre projet avec des instructions sur l’exécution .vscode de votre application.

    VS Code run debug configuration

  10. Dans VS Code, sélectionnez débogage RunStart> (ou appuyez simplement sur la touche F5). Cela ouvre un terminal à l’intérieur de VS Code et vous devriez voir un résultat disant quelque chose comme : « Démarrage du serveur de développement à http://127.0.0.1:8000/ quitter le serveur avec CONTROL-C ». Maintenez la touche Contrôle enfoncée et sélectionnez l’adresse affichée pour ouvrir votre application dans votre navigateur web par défaut et voir votre projet s’exécutant à l’intérieur de son conteneur.

    VS Code running a docker container

Vous avez maintenant configuré un conteneur de développement distant à l’aide de Docker Desktop, alimenté par le back-end WSL 2, que vous pouvez coder dans, générer, exécuter, déployer ou déboguer à l’aide de VS Code!

Dépannage

Contexte Docker WSL déconseillé

Si vous utilisiez un aperçu technique précoce de Docker pour WSL, vous pouvez avoir un contexte Docker appelé « wsl » qui est désormais déconseillé et n’est plus utilisé. Vous pouvez vérifier avec la commande : docker context ls. Vous pouvez supprimer ce contexte « wsl » pour éviter les erreurs avec la commande : docker context rm wsl comme vous souhaitez utiliser le contexte par défaut pour Windows et 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.

Pour plus d’informations sur ce problème, consultez comment configurer Docker dans Windows System for Linux (WSL2) sur Windows 10.

Problèmes lors de la recherche du dossier de stockage d’images Docker

Docker crée deux dossiers de distribution pour stocker des données :

  • \wsl$\docker-desktop
  • \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 Windows Explorateur de fichiers. Entrée : \\wsl\<distro name>\mnt\wsl remplacement <distro name> par le nom de votre distribution (par exemple. Ubuntu-20.04) pour afficher ces dossiers.

Pour plus d’informations sur la localisation des emplacements de stockage Docker dans WSL, consultez ce problème à partir du dépôt WSL ou de ce billet StackOverlow.

Pour obtenir de l’aide sur la résolution générale des problèmes dans WSL, consultez le document de résolution des problèmes .

Ressources supplémentaires