14/11/2024

LinuxWSL

Utilisation de WSL 2 et Docker pour exécuter des containers Linux sur Windows

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.

Docker WSL 2

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 😉.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Utilisation de WSL 2 et Docker pour exécuter des containers Linux sur Windows

  • en ajoutant un dossier et le fichier /home/florian/www/index.html
    Merci beaucoup pour ton site

    Répondre
  • 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!

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.