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, l’expédition et l’exécution d’applications dockerisées. En activant le moteur basé sur WSL 2, vous pouvez exécuter des conteneurs Linux et Windows dans Docker Desktop sur la même machine. (Docker Desktop est gratuit pour un usage personnel et pour les petites entreprises, pour plus d’informations sur les tarifs Pro, Team ou Business, consultez le FAQ sur le site Docker).

Remarque

Nous vous recommandons d’utiliser Docker Desktop en raison de son intégration à Windows et Sous-système Windows pour Linux. Toutefois, bien que Docker Desktop prenne en charge l’exécution des conteneurs Linux et Windows, vous ne pouvez pas exécuter les deux simultanément. Pour exécuter des conteneurs Linux et Windows simultanément, vous devez installer et exécuter une instance Docker distincte dans WSL. Si vous avez besoin d’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. Plutôt que devoir mettre hors service un système entier pour des mises à jour ou de 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 en savoir plus, consultez la présentation des conteneurs Docker.

Prérequis

Pour obtenir plus d’informations, consultez la Configuration système requise des documents Docker pour installer Docker Desktop sur Windows.

Pour découvrir comment installer Docker sur Windows Server, consultez Démarrage : préparation de Windows pour les conteneurs.

Remarque

WSL peut exécuter des distributions en mode WSL version 1 ou WSL 2. Pour le vérifier, ouvrez PowerShell et entrez : wsl -l -v. Vérifiez que votre distribution est définie pour utiliser WSL 2 en entrant : wsl --set-version <distro> 2. Remplacez par <distro> 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 ne pouvait pas s’exécuter directement dans WSL. L’équipe Docker a donc développé une solution alternative à l’aide de machines virtuelles Hyper-V et de 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 s’exécuter entièrement dans 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.

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. Vous pouvez également 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 menu Démarrer de Windows, 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 des commandes Docker et sélectionnez « Paramètres ». Icône du tableau de bord de Docker Desktop

  3. Vérifiez que « Utiliser le moteur basé sur WSL 2 » est coché dans Paramètres>généraux. Paramètres généraux de Docker Desktop

  4. Sélectionnez parmi vos distributions WSL 2 installées celles sur laquelle vous souhaitez activer l’intégration Docker en accédant à : Paramètres>Ressources>Intégration WSL. Paramètres de ressources de Docker Desktop

  5. Pour confirmer 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. Vérifiez que votre installation fonctionne bien en exécutant une image Docker intégrée simple à l’aide de : docker run hello-world

Conseil

Voici quelques commandes de Docker utiles :

  • 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 show all, seuls les conteneurs en cours d’exécution s’affichent)
  • Liste des informations sur l’ensemble du système concernant l’installation de Docker, y compris les statistiques et les ressources (processeur et mémoire) dont vous disposez dans le contexte WSL, 2 avec: docker info

Développer dans des conteneurs distants en utilisant VS Code

Pour commencer à développer des applications en utilisant Docker avec WSL 2, nous vous recommandons d’utiliser VS Code, ainsi que les extensions WSL, Dev Containers et Docker.

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

  • Installer l’extension Dev Containers pour VS Code. 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 l’ensemble complet des fonctionnalités de Visual Studio Code pour effectuer votre travail de développement dans le conteneur.

  • Installer l’extension Docker pour VS Code. Cette extension ajoute la fonctionnalité permettant de générer, de gérer et de déployer des applications conteneurisées à partir de VS Code. (Vous avez besoin de l’extension Dev Containers pour utiliser le conteneur en tant qu’environnement de développement.)

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

  1. Pour cet exemple, je vais utiliser le code source de mon didacticiel Hello World pour Django dans la documentation de configuration de l’environnement de développement Python. Vous pouvez ignorer cette étape si vous préférez utiliser votre propre code source de projet. Pour télécharger mon application web HelloWorld-Django à partir de GitHub, ouvrez un terminal WSL (Ubuntu par exemple) et entrez : git clone https://github.com/mattwojo/helloworld-django.git

    Remarque

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

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

    cd helloworld-django
    
  3. Ouvrez le projet dans VS Code en cours d’exécution sur le serveur d’extensions WSL local en entrant :

    code .
    

    Confirmez que vous êtes connecté à votre distribution WSL Linux en vérifiant l’indicateur distant vert dans le coin inférieur gauche de votre instance VS Code.

    Indicateur à distance de WSL dans VS Code

  4. À partir de la palette de commandes VS Code (Ctrl+ Maj + P), entrez Dev Containers : Rouvrir dans le conteneur, car nous utilisons un dossier déjà ouvert à l’aide de l’extension WSL. Sinon, utilisez Dev Containers : Ouvrir le dossier dans le conteneur... pour choisir un dossier WSL à l’aide du partage local \\wsl$ (côté Windows). Pour plus d’informations, consultez le démarrage rapide de Visual Studio Code : Ouvrez un dossier existant dans un conteneur . Si ces commandes ne s’affichent pas lorsque vous commencez à taper, vérifiez que vous avez installé l’extension Dev Containers liée ci-dessus.

    Commande Dev Containers dans VS Code

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

    Dossier Dev Containers dans VS Code

  6. Une liste de définitions de conteneur s’affiche, car il n’existe pas encore de configuration de conteneur de développement dans le dossier de projet (référentiel). La liste des définitions de configuration de conteneur qui s’affiche est filtrée en fonction du type de votre projet. Pour mon projet Django, je vais sélectionner Python 3.

    Définitions de configuration de Dev Containers dans VS Code

  7. Une nouvelle instance de VS Code s’ouvre, commence à générer 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 Dockerfile fichier et devcontainer.json .

    Dossier .devcontainer dans VS Code

  8. Pour vérifier que votre projet est toujours connecté à WSL et dans un conteneur, ouvrez le terminal intégré VS Code (Ctrl + Maj + ~). Vérifiez le système d’exploitation en entrant : uname et la version de Python avec : python3 --version. Vous pouvez voir que uname est revenu en tant que « Linux », vous êtes donc toujours connecté au moteur WSL 2, et le numéro de la 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 en utilisant Visual Studio Code, ouvrez d’abord le menu Exécuter (Ctrl+Maj+D ou sélectionnez l’onglet situé à l’extrême gauche de la barre de menus). Sélectionnez ensuite Exécuter et déboguer pour sélectionner une configuration de débogage, et choisissez celle qui convient le mieux à votre projet (dans mon exemple, il s’agit de « Django »). Cela crée un launch.json fichier dans le .vscode dossier de votre projet avec des instructions sur l’exécution de votre application.

    Configuration Exécuter et déboguer dans VS Code

  10. Dans VS Code, sélectionnez Exécuter>démarrer le débogage (ou appuyez simplement sur la touche F5 ). Cela ouvre un terminal à l’intérieur de VS Code et vous devriez voir un résultat indiquant quelque chose comme : « Démarrage du serveur de développement à http://127.0.0.1:8000/ Quitter le serveur avec CTRL-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 observez votre projet s’exécuter à l’intérieur de son conteneur.

    Exécution d’un conteneur Docker dans VS Code

Vous avez maintenant correctement configuré un conteneur de développement à distance en utilisant Docker Desktop, optimisé par le back-end WSL 2, que vous pouvez coder, générer, exécuter, déployer ou déboguer en utilisant VS Code !

Résolution des problèmes

Contexte Docker WSL déconseillé

Si vous utilisiez une préversion technique de Docker pour WSL, vous disposez peut-être d’un contexte Docker appelé « wsl » qui est désormais déconseillé et qui n’est plus utilisé. Vous pouvez vérifier à l’aide de la commande : docker context ls. Vous pouvez supprimer ce contexte « wsl » pour éviter les erreurs avec la commande : docker context rm wsl étant donné que 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 le système Windows pour Linux (WSL2) sur Windows 10.

Difficulté à trouver le 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 Linux WSL et en entrant : explorer.exe . pour afficher le dossier dans Explorateur de fichiers de Windows. Entrée : \\wsl\<distro name>\mnt\wsl en remplaçant <distro name> par le nom de votre distribution (par exemple. Ubuntu-20.04) pour voir ces dossiers.

Pour plus d’informations sur la localisation des emplacements de stockage Docker dans WSL, consultez ce problème dans le référentiel WSL ou dans ce billet StackOverflow.

Pour plus d’aide sur la résolution des problèmes généraux dans WSL, consultez la documentation Résolution des problèmes .

Ressources supplémentaires