Utilisation de WSL 2 et Docker pour exécuter des containers Linux sur Windows
Sommaire
I. Présentation
Pour utiliser les containers sous Windows, il est possible d'utiliser le client Docker Desktop. Dans ces containers, on peut faire tourner des applications Windows. Néanmoins, il ne permet pas d'exécuter des containers Linux directement sur Windows, à cause des dépendances et de l'absence du noyau Linux. Lorsque l'on est sur Linux, on peut exécuter des applications Linux au sein de containers.
Sous Windows, grâce à Docker Desktop et la fonctionnalité Windows Subsystem for Linux, nous allons pouvoir contourner cette limitation. Depuis Windows, nous allons pouvoir exécuter des containers Linux grâce à une distribution Linux qui tourne avec WSL 2.
En effet, avec WSL 2, Microsoft a introduit un changement significatif dans l'architecture de la fonctionnalité WSL. En version 2, WSL intègre un noyau Linux complet, ce qui va nous permettre d'exécuter des containers Linux en mode natif.
Dans ce tutoriel, nous allons voir comment installer et configurer Docker pour WSL 2 dans le but d'exécuter des containers Linux à partir d'une machine Windows 10. Cet article est un épisode de ma série dédiée à WSL.
🎥 Episode n°8 disponible au format vidéo (comme les précédents) :
II. Prérequis
Avant de commencer, nous partons du principe que vous avez déjà :
- Une machine Windows avec la fonctionnalité WSL 2 installée
- Une distribution Linux opérationnelle, via WSL (Ubuntu, Kali Linux, etc.)
Dès que c'est bon, vous pouvez passer à la suite.
III. Installer Docker Desktop pour WSL 2
Commencez par télécharger "Docker Desktop" (environ 500 Mo) sur le site officiel de Docker :
Démarrez l'installation, elle est très simple. Il faut veiller à bien cocher "Install required Windows components for WSL 2" lors de l'installation.
Lancez l'installation, et patientez... Coffee break.
Lorsque l'installation est terminée, vous devez redémarrer votre machine. Cliquez sur "Close and restart" pour procéder au redémarrage.
IV. Configurer Docker Desktop pour WSL 2
Notre machine est équipée de WSL 2 et de Docker Desktop : c'est une bonne nouvelle. Je vous propose d'ouvrir une console PowerShell et d'exécuter la commande ci-dessous pour lister les distributions Linux enregistrées dans WSL :
wsl -l -v
On remarque que mes distributions "Kali-linux" et "Ubuntu" sont bien là. Docker quant à lui a ajouté deux distributions, ou plutôt deux composants. Voyez par vous-même :
Les entrées "docker-desktop" et "docker-desktop-data" servent respectivement à gérer les containers Docker que l'on va exécuter et à assurer le stockage dans un disque virtuel.
Maintenant, ouvrez Docker Desktop s'il n'est pas déjà ouvert. Cliquez sur l'icône paramètres en haut à droite. Dans l'onglet "General", je vous invite à cocher l'option "Use the WSL 2 based engine" si elle n'est pas déjà cochée.
Ensuite, cliquez sur l'onglet "Resources" puis sur "WSL Integration". C'est ici qu'il faut sélectionner les distributions pour lesquelles vous souhaitez activer la prise en charge de Docker.
Par défaut, l'option "Enable integration with my default WSL distro" est cochée. Cela signifie que votre distribution Linux par défaut bénéficie déjà de Docker. Pour savoir quelle est votre distribution Linux par défaut, utilisez la commande "wsl -l" : ce sera précisé "(par défaut)" au niveau de la distribution par défaut actuelle.
Dès que votre choix est fait, vous pouvez continuer. Tout en sachant qu'il sera possible d'y revenir à tout moment, vous connaissez le chemin maintenant.
V. Exécuter son premier container Docker sur WSL 2
Ce que je vous propose, c'est d'ouvrir une distribution pour laquelle vous avez activé Docker. Pour ma part, je vais accéder à la distribution Kali-Linux en mode console :
wsl -d Kali-linux
Une fois dans la console Linux, je vous invite à exécuter le container Docker "Hello World". Très basique, il va permettre de valider que Docker fonctionne bien sur notre machine Linux.
Voici la commande à exécuter :
docker run hello-world
L'image "hello-world" ne sera pas trouvée sur la machine, donc le container sera téléchargé depuis la librairie officielle. Une fois que ce sera fait, vous devriez obtenir deux lignes qui permettent de confirmer que tout est OK :
Hello from Docker! This message shows that your installation appears to be working correctly.
En image, cela nous donne :
Si l'on regarde le message ci-dessus, on peut voir que nous sommes invités à exécuter un autre container. Ce container va permettre d'exécuter une imagine Ubuntu avec un shell (bash) en mode interactif. Je vous invite à tester :
docker run -it ubuntu bash
Suite à l'exécution de cette commande, on se retrouve avec un shell Linux entre les mains. Ce container est un environnement isolé de Windows et de notre distribution Linux gérée par WSL (bien qu'il en dépende). Si l'on regarde le nom de l'hôte, on peut voir qu'il a été généré aléatoirement.
En parallèle, ouvrez une seconde console au sein de votre distribution Linux et exécutez la commande ci-dessous pour lister les containers Docker actifs :
docker ps
Le container Docker basé sur l'image Ubuntu est bien en cours d'exécution.
VI. Un serveur Web avec Docker et WSL 2
Pour finir, nous allons exécuter un serveur Web Lighttpd en utilisant l'image "sebp/lighttpd". D'après la documentation, voici comment s'exécute cette image :
sudo docker run --rm -t -v <home-directory>:/var/www/localhost/htdocs -p <http-port>:80 sebp/lighttpd
Pour le "home-directory", c'est-à-dire la racine du site Web, nous allons choisir la racine du dossier personnel de l'utilisateur "florian", ce dernier étant l'utilisateur de ma distribution Kali Linux. Ce qui donne : /home/florian.
Nous devons aussi choisir un port d'écoute. Au sein du serveur Lighttpd, le port 80 sera utilisé, mais nous devons le mapper vers un autre port au niveau de notre distribution Linux (WSL). Par exemple, le port 8080.
Avant d'exécuter le container Docker, on va créer la page d'index de notre site :
nano /home/florian/index.html
Avec le contenu suivant :
<html> <head></head> <body> <p>Hello from IT-Connect :)</p> </body> </html>
Maintenant, on va démarrer notre serveur Web :
sudo docker run --rm -t -v /home/florian:/var/www/localhost/htdocs -p 8080:80 sebp/lighttpd
L'image va être téléchargée et le container lancé... Pour s'y connecter, il suffit de prendre un navigateur et d'indiquer l'adresse suivante :
http://localhost:8080
ou
http://<adresse-IP-distribution-Linux>:8080
Nous arrivons bien à atteindre notre serveur Web puisque notre page index.html s'affiche ! Bravo ! 😉
Cela n'était qu'un exemple : maintenant à vous de jouer pour exécuter les containers Docker de vos rêves 😉.
en ajoutant un dossier et le fichier /home/florian/www/index.html
Merci beaucoup pour ton site
Il faut se mettre en cd /home//www et faire nano /home//www/index.html pour pouvoir voir la page et non un 403 forbidden
Merci pour cet article!