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
- WSL version 1.1.3.0 ou ultérieure.
- Windows 11 64 bits : Famille ou Professionnel version 21H2 ou ultérieure, Entreprise ou Éducation version 21H2 ou ultérieure.
- Windows 10 64 bits (recommandé) : Famille ou Professionnel 22H2 (build 19045) ou version ultérieure, ou Entreprise ou Éducation 22H2 (build 19045) ou version ultérieure. (minimal) : Famille ou Professionnel 21H2 (build 19044) ou ultérieure, Entreprise ou Éducation 21H2 (build 19044) ou ultérieure. Mise à jour de Windows
- Processeur 64 bits avec Traduction d’adresse de second niveau (SLAT).
- RAM du système 4 Go.
- Activez la virtualisation matérielle dans le BIOS.
- Installer WSL et configurer un nom d’utilisateur et un mot de passe pour votre distribution Linux fonctionnant dans WSL 2.
- Installer Visual Studio Code (facultatif). Cela offre la meilleure expérience, notamment la possibilité de coder et de déboguer à l’intérieur d’un conteneur Docker distant et connecté à votre distribution Linux.
- Installer le Terminal Windows (facultatif). Cela offre la meilleure expérience, notamment la possibilité de personnaliser et d’ouvrir plusieurs terminaux dans la même interface (y compris Ubuntu, Debian, PowerShell, Azure CLI ou tout ce que vous préférez utiliser).
- S’inscrire pour obtenir un ID Docker sur Docker Hub (facultatif).
- Consultez le contrat de licence Docker Desktop pour obtenir des mises à jour sur les conditions d’utilisation.
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) :
Téléchargez Docker Desktop et suivez les instructions d’installation.
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 ».
Vérifiez que « Utiliser le moteur basé sur WSL 2 » est coché dans Paramètres>généraux.
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.
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
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
oudocker 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.
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.À partir de votre terminal WSL, modifiez les répertoires par le dossier de code source pour ce projet :
cd helloworld-django
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.
À 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.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\
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.
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’unDockerfile
fichier etdevcontainer.json
.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.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.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.
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
- Documentation Docker : meilleures pratiques pour Docker Desktop avec WSL 2
- Commentaires sur Docker Desktop pour Windows : signaler un problème
- Blog VS Code : recommandations pour le choix d’un environnement de développement
- Blog VS Code : utilisation de Docker dans WSL 2
- Blog VS Code : utilisation de conteneurs distants dans WSL 2
- Hanselminutes Podcast: rendre Docker charmant pour les développeurs avec Simon Ferquel
Windows Subsystem for Linux