Accueil/Réseaux, Systèmes & Cybersécurité /Chapitre 19 /Bonus — hors programme

WSL Containers — des conteneurs Linux sans Docker Desktop

Depuis septembre 2026, Windows sait lancer des conteneurs Linux tout seul : plus de moteur à installer, plus de Docker Desktop. La commande s'appelle wslc, elle est livrée avec WSL, et sa syntaxe est volontairement proche de celle de Docker. Le chapitre 18 reste la référence pour les idées ; celui-ci montre l'outil.

⚠️ Un chapitre bonus, et un chapitre daté

Il n'est pas au programme du BTS et n'a pas été donné en cours. Il est là parce que l'outil vient de sortir et qu'il change la façon de monter un environnement de conteneurs sur un poste Windows — exactement le genre de chose qu'on vous demandera en entreprise bien avant qu'elle n'arrive dans un référentiel.

Un outil de quelques semaines bouge encore. Les commandes, les numéros de version et les sorties de ce chapitre viennent de la documentation officielle de Microsoft, relevée le 14 octobre 2026. Sur votre machine, c'est wslc --help qui fait foi : il décrit la version que vous avez réellement installée. Si elle répond autre chose que ce qui est écrit ici, c'est elle qui a raison.

📌

Résumé flash

wslc.exe est livré avec WSL : rien à installer en plus. Il faut WSL 2.9.3 ou supérieur — wsl --update puis wsl --version.

Les trois mots du chapitre 18 ne changent pas : image, conteneur, volume. Les commandes non plus, ou presque : wslc run, wslc exec, wslc image list, wslc container list, wslc build. -p, -d, --rm, -it se lisent comme chez Docker.

Les images viennent des mêmes registres — Docker Hub en tête. Ce n'est pas un format concurrent : c'est un autre moteur pour les mêmes images.

🔑 #wslc #wsl #conteneur #image #containerfile #registre #port #docker-desktop #hyperviseur

1Pourquoi ce chapitre existe

Il n'a pas été demandé par un professeur. Il est là parce qu'un outil est sorti il y a quelques semaines et qu'il répond à une gêne bien réelle du chapitre précédent : sous Windows, faire tourner un conteneur demandait d'installer Docker Desktop — un logiciel lourd, qui démarre une machine virtuelle, qui tourne en permanence, et dont la licence n'est gratuite que pour les petites structures et l'usage personnel.

💡 Trois raisons de s'y intéresser maintenant
  • C'est intégré. Rien à télécharger, rien à mettre à jour à part WSL lui-même. Sur un parc de machines, c'est l'argument qui compte.
  • C'est la même syntaxe. Ce que vous savez de Docker se transpose presque ligne pour ligne, et les images sont les mêmes.
  • C'est neuf. Personne autour de vous ne le connaît encore. Savoir qu'il existe et pouvoir en dire trois phrases justes, c'est exactement ce qui se remarque en entretien ou en alternance.

Le revers, et il faut le dire : un outil de trois semaines n'a pas la documentation, les tutoriels ni les réponses de forum d'un outil de douze ans. Docker reste ce qu'on apprend ; wslc est ce qu'on surveille.

2Ce que wslc remplace

D'abord, WSL en une phrase

WSL — Windows Subsystem for Linux — permet d'exécuter Linux sur Windows. Dans sa version 2, ce n'est pas une émulation : c'est un vrai noyau Linux qui tourne dans une machine virtuelle légère gérée par Windows, avec les fichiers et le réseau partagés entre les deux mondes.

Or un conteneur Linux a besoin d'exactement une chose : un noyau Linux. Windows en a désormais un sous la main en permanence. Il ne manquait plus que le moteur et la commande — c'est ce que Microsoft a ajouté.

Docker DesktopWSL Containers
Installationun logiciel à télécharger fourni avec WSL
Ce qui tourne en fondune application et son service le service de WSL, déjà là
Commandedockerwslc
ImagesDocker Hub et autres registres les mêmes
Interface graphiqueouinon — ligne de commande seulement
Licencepayante au-delà d'une certaine taille d'entreprise composant de Windows
🔌 La prise et l'appareil

Docker Desktop apportait sa propre prise : une machine virtuelle à lui, un moteur à lui, une interface à lui. WSL avait déjà la prise — un noyau Linux qui tourne — et il ne s'en servait pas pour ça.

wslc ne réinvente pas le conteneur : il branche le moteur sur une prise qui existait déjà.

Et ce n'est pas que la ligne de commande

Microsoft livre aussi une interface de programmation (le paquet NuGet Microsoft.WSL.Containers) qui permet à une application Windows écrite en C# ou en C++ de télécharger une image, de lancer un conteneur et de lire sa sortie depuis son propre code. Autrement dit : le conteneur devient une brique qu'un logiciel Windows peut employer, et plus seulement un outil de développeur.

3Installer et vérifier

Trois cas, et aucun ne demande de télécharger un logiciel de conteneurs.

Vous avez déjà WSL

powershell
wsl --version        # ce que vous avez
wsl --update         # la dernière version

Il faut WSL 2.9.3 au minimum. Redémarrez le PC après la mise à jour.

⚠️ Deux numéros circulent

La documentation de Microsoft annonce 2.9.3 ou supérieur comme exigence. La version stable qui a rendu la fonction publique, fin septembre 2026, porte le numéro 3.0.1 — c'est celui que citent les articles et les vidéos parus à la sortie.

Les deux sont vrais et ne se contredisent pas : 2.9.3 est le plancher, 3.0.1 est ce qu'on installe aujourd'hui. wsl --update règle la question dans les deux cas.

Vous n'avez jamais installé WSL

powershell
wsl --install        # dans une console OUVERTE EN ADMINISTRATEUR

Une seule commande — mais elle suppose que la virtualisation est activée dans le BIOS/UEFI de la machine, puisque WSL 2 s'appuie dessus. C'est le point qui bloque le plus souvent en salle de TP, et il ne se règle pas depuis Windows.

Vérifier que wslc répond

powershell
wslc version         # la version du moteur
wslc --help          # toutes les commandes
wslc run --help      # le détail d'une commande

wslc --help est la source la plus à jour qui existe : plus récente que ce cours, plus récente que n'importe quel tutoriel. Sur un outil de quelques semaines, prenez-en l'habitude.

4Le premier conteneur

Le rite de passage est le même que sous Docker : une image minuscule dont le seul rôle est d'afficher un message et de s'arrêter.

powershell
wslc run --rm hello-world

Il se passe quatre choses, dans cet ordre, et il faut savoir les nommer :

  1. l'image hello-world n'est pas sur la machine, donc elle est téléchargée depuis le registre ;
  2. un conteneur est créé à partir d'elle ;
  3. il est démarré, affiche son message, et son processus se termine ;
  4. --rm le fait détruire dans la foulée.
💡 --rm, et pourquoi on le met presque toujours

Sans lui, le conteneur arrêté reste sur la machine : il n'occupe plus de processeur, mais il occupe du disque et il encombre la liste. Après une séance de TP on en compte facilement trente.

Règle simple : --rm pour tout ce qu'on lance pour voir, pas de --rm pour ce qu'on veut retrouver.

Un conteneur qui fait quelque chose

powershell
wslc run --rm -it ubuntu:latest bash -c "echo Hello world from WSL container!"
--rmdétruire le conteneur à la sortie
-igarder l'entrée standard ouverte
-tallouer un terminal
ubuntu:latestl'image, et son tag
bash -c "…"ce qu'on lance dans le conteneur

-it est l'habitude de Docker, et elle se garde : les deux lettres vont presque toujours ensemble, parce qu'un terminal sans entrée ne sert à rien.

5Les images et leurs registres

Une image porte un nom et un tag, séparés par deux points : ubuntu:latest, nginx:1.27, python:3. Sans tag, c'est latest qui est pris.

⚠️ latest n'est pas une version

C'est une étiquette, et elle est déplacée par l'auteur de l'image quand il publie. Le même wslc run ubuntu:latest peut donc donner deux images différentes à six mois d'écart — c'est très bien pour essayer, et très mauvais pour un serveur qui doit se comporter pareil l'an prochain.

En production, on écrit le numéro. Toujours.

D'où viennent les images

C'est le point qui surprend : wslc va chercher dans les registres de Docker. Il n'y a pas de catalogue Microsoft séparé, pas de format propriétaire. Une image construite pour Docker tourne sous wslc, et l'inverse aussi.

  • Docker Hub — le registre par défaut, celui des images officielles ;
  • GitHub Container Registry — celui des projets hébergés sur GitHub ;
  • Azure Container Registry — les registres privés d'entreprise.

Les commandes des images

powershell
wslc image list              # ce qui est sur la machine
wslc image inspect nginx     # tout ce qu'on sait d'une image
wslc image prune             # effacer celles qui ne servent à aucun conteneur

La documentation de Microsoft emploie aussi les formes courtes wslc image ls et wslc container ps, héritées de Docker. Les deux écritures apparaissent dans ses propres pages ; wslc --help dit laquelle votre version accepte.

6Faire tourner, entrer, arrêter

powershell
wslc container list          # ce qui tourne
wslc container list --all    # y compris ce qui est arrêté
wslc container logs web      # ce que le conteneur a écrit
wslc container inspect web   # son état complet, en détail
wslc container stop web      # l'arrêter
wslc container prune         # effacer tous les conteneurs arrêtés

Entrer dans un conteneur qui tourne

powershell
wslc exec web cat /etc/os-release    # une commande, et on ressort
wslc exec -it web bash               # un shell, et on reste
💡 run et exec ne font pas la même chose

run crée un conteneur à partir d'une image. exec lance une commande dans un conteneur qui existe déjà.

La confusion coûte cher en TP : on fait un run croyant entrer dans son serveur, et on se retrouve dans un second serveur tout neuf, vide, sans aucun des fichiers qu'on cherchait.

Ce que fait le conteneur quand sa commande se termine

Un conteneur vit exactement aussi longtemps que son processus principal. Une image qui lance bash sans terminal s'arrête immédiatement : bash n'a rien à lire, il sort, le conteneur sort. Ce n'est pas une panne, c'est la règle.

7Publier un port

Un conteneur a son propre réseau. Pour atteindre depuis Windows un serveur qui tourne dedans, il faut publier un port.

powershell
wslc run -d --rm -p 8080:80 --name web nginx
curl localhost:8080
wslc container stop web
-ddétacher : le conteneur tourne, la main revient
-p 8080:80hôte : conteneur
--name webun nom, pour ne pas manipuler un identifiant
⚠️ Le dehors est à gauche

-p 8080:80 veut dire : le 8080 de la machine mène au 80 du conteneur. C'est la même lecture que sous Docker, et c'est la même erreur qu'on fait : inverser les deux, puis chercher longtemps pourquoi la page ne répond pas.

Moyen mnémotechnique : on écrit l'adresse qu'on va taper en premier. localhost:8080 → -p 8080:…

Comme le conteneur a été lancé avec --rm, il disparaît tout seul à l'arrêt : rien à nettoyer.

8Construire sa propre image

Jusqu'ici on a employé des images écrites par d'autres. Pour empaqueter son propre programme, on décrit sa construction dans un fichier et on lance wslc build.

Microsoft nomme ce fichier Containerfile dans son tutoriel. Son contenu est la syntaxe que vous connaissez déjà du chapitre 18 :

dockerfile
FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
FROMl'image de départ
WORKDIRle dossier de travail à l'intérieur
COPYfaire entrer des fichiers dans l'image
RUNune commande exécutée pendant la construction
EXPOSEdocumenter le port — cela ne le publie pas
CMDla commande lancée au démarrage du conteneur
powershell
wslc build -t helloworld-django .          # le point : le dossier courant
wslc image list
wslc run -d --rm -p 8000:8000 --name django helloworld-django
wslc container logs django
wslc exec django uname                     # doit répondre « Linux »
wslc container stop django
💡 RUN et CMD, l'erreur classique

RUN s'exécute une fois, à la construction, et son résultat est figé dans l'image. CMD ne s'exécute pas du tout à la construction : c'est ce que fera le conteneur quand on le lancera.

Mettre le serveur dans un RUN construit une image pendant laquelle le serveur a tourné — et qui ne lance rien au démarrage.

⚠️ Où ranger son projet

Microsoft insiste, et c'est une vraie mesure de performance : gardez les fichiers du projet du côté Linux (\\wsl$) quand vous travaillez avec des outils Linux. Un projet posé sur le disque Windows et lu depuis WSL traverse une passerelle à chaque fichier — et un build lit des milliers de fichiers.

9Surveiller et nettoyer

powershell
wslc events          # le journal en direct : création, réseau, démarrage, arrêt
wslc stats           # processeur et mémoire des conteneurs qui tournent
wslc system info     # l'état de l'environnement de conteneurs

wslc events mérite un essai dès le premier TP : on l'ouvre dans une console, on travaille dans une autre, et on voit en direct ce que fait vraiment chaque commande. Un run --rm y écrit la séquence complète — création, connexion au réseau, démarrage, arrêt, déconnexion, destruction — et cette liste vaut mieux qu'un paragraphe d'explication.

Reprendre de la place

powershell
wslc container prune    # les conteneurs arrêtés
wslc image prune        # les images que plus personne n'emploie

Les images sont ce qui pèse. Une dizaine d'essais avec ubuntu, python et nginx occupent déjà tranquillement un gigaoctet.

Autres commandes annoncées à la version stable

wslc container restartredémarrer un conteneur
wslc container cpcopier des fichiers vers le conteneur, ou depuis
wslc network connect / disconnect attacher ou détacher un réseau
wslc volume listles volumes connus
wslc pulltélécharger une image sans la lancer

10wslc et docker, côte à côte

C'est la table à garder sous les yeux pendant le premier TP. À gauche ce que vous savez déjà, à droite ce que vous taperez.

Ce qu'on veut faireDockerWSL Containers
vérifier l'installationdocker version wslc version
un conteneur jetabledocker run --rm hello-world wslc run --rm hello-world
un serveur en fonddocker run -d -p 8080:80 nginx wslc run -d -p 8080:80 nginx
lister les conteneursdocker ps wslc container list
lister les imagesdocker images wslc image list
une commande dedansdocker exec -it web bash wslc exec -it web bash
les journauxdocker logs web wslc container logs web
arrêterdocker stop web wslc container stop web
construiredocker build -t nom . wslc build -t nom .
faire le ménagedocker system prune wslc container prune + wslc image prune
💡 La seule différence de forme qui compte

Docker accepte beaucoup de raccourcis historiques : docker ps plutôt que docker container ls, docker images plutôt que docker image ls. wslc met plus volontiers l'objet avant le verbe : container list, image list, container stop.

C'est en fait la forme moderne de Docker, celle que sa documentation recommande depuis des années. Si vous prenez l'habitude de container et image, les deux outils vous obéissent.

11Ce qui n'est pas encore là

Un outil de quelques semaines n'est pas un outil de douze ans, et le dire fait partie du cours.

  • Pas d'interface graphique. Docker Desktop montre les conteneurs, les images et leur consommation dans une fenêtre. Ici, tout passe par la console.
  • Windows seulement. wslc fait tourner des conteneurs Linux, mais depuis Windows. Sur un Mac ou un serveur Linux, c'est Docker ou Podman.
  • L'écosystème. Les tutoriels, les réponses de forum, les fichiers d'intégration continue, les extensions d'éditeur parlent tous docker. Cela se traduit, mais cela se traduit à la main.
  • La virtualisation reste nécessaire. Le noyau Linux tourne dans une machine virtuelle gérée par Windows : si la virtualisation est désactivée dans le BIOS, rien ne démarre — exactement comme pour WSL.

La bonne position en BTS : apprendre Docker, parce que c'est lui qui est au programme, qui est partout et qui est demandé. Savoir que wslc existe, ce qu'il remplace et comment le lancer — parce que c'est ce qui vous distinguera le jour où un poste Windows doit faire tourner un conteneur sans qu'on achète de licence.

12L'aide-mémoire

powershell
# ── mise en place ────────────────────────────────────────────────
wsl --version                                 # la version de WSL (mini 2.9.3)
wsl --update                                  # mettre à jour, puis redemarrer
wsl --install                                 # si WSL n'est pas installe (admin)
wslc version                                  # le moteur de conteneurs
wslc --help                                   # toutes les commandes

# ── premiers pas ─────────────────────────────────────────────────
wslc run --rm hello-world
wslc run --rm -it ubuntu:latest bash -c "echo coucou"

# ── images ───────────────────────────────────────────────────────
wslc pull nginx                               # telecharger sans lancer
wslc image list                               # ce qu'on a
wslc image inspect nginx                      # le detail
wslc image prune                              # le menage

# ── conteneurs ───────────────────────────────────────────────────
wslc run -d --rm -p 8080:80 --name web nginx  # hote:conteneur
wslc container list                           # ce qui tourne
wslc container list --all                     # + ce qui est arrete
wslc exec -it web bash                        # entrer dedans
wslc container logs web                       # ce qu'il a ecrit
wslc container inspect web                    # son etat complet
wslc container stop web                       # l'arreter
wslc container prune                          # le menage

# ── construire ───────────────────────────────────────────────────
wslc build -t monimage .                      # avec un Containerfile ici

# ── surveiller ───────────────────────────────────────────────────
wslc events                                   # le journal en direct
wslc stats                                    # processeur et memoire
wslc system info                              # l'etat general

⚡ Récap 2 minutes

  • wslc.exe est livré avec WSL : rien à installer, pas de licence, et plus de Docker Desktop sous Windows.
  • Il faut WSL 2.9.3 au minimum — wsl --update puis wsl --version. La version stable de sortie porte le numéro 3.0.1.
  • La virtualisation doit être active dans le BIOS/UEFI, puisque WSL 2 fait tourner un vrai noyau Linux dans une machine virtuelle légère.
  • Les images sont les mêmes que celles de Docker, prises dans les mêmes registres. Ce n'est pas un format concurrent, c'est un autre moteur.
  • -p 8080:80 se lit hôte : conteneur. Le dehors est toujours à gauche.
  • run part d'une image, exec entre dans un conteneur qui tourne. Les confondre donne un second conteneur vide.
  • Le fichier de construction s'appelle Containerfile chez Microsoft, et son contenu est la syntaxe du chapitre 18. RUN s'exécute à la construction, CMD au démarrage, EXPOSE documente sans publier.
  • Ce sont les images qui pèsent : wslc image prune libère bien plus que wslc container prune.
  • Docker reste ce qu'on apprend ; wslc est ce qu'on surveille. Windows seulement, pas d'interface graphique, et tout l'écosystème parle encore docker.
Sources
  • Microsoft Learn — WSL container et Get started with containers on WSL, pages datées du 29 septembre 2026, relevées le 14 octobre 2026. C'est la source qui fait foi : les commandes et les versions de ce chapitre en viennent.
  • Vidéo « Des conteneurs Linux sur Windows, sans Docker Desktop : j'ai testé wslc », YouTube — c'est par elle que l'outil a été découvert. Elle est sous droits : rien n'en est recopié, ses faits ont servi de piste, et chacun a été revérifié sur la documentation de Microsoft.
  • Chapitre 18 — Docker, pour les notions d'image, de conteneur, de volume et de port.

Sur un outil aussi récent, aucune page ne reste juste très longtemps — celle-ci pas davantage. wslc --help décrit la version installée sur votre machine : c'est la référence la plus sûre, et la seule qui ne vieillit pas.