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.
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.
- 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 Desktop | WSL Containers | |
|---|---|---|
| Installation | un logiciel à télécharger | fourni avec WSL |
| Ce qui tourne en fond | une application et son service | le service de WSL, déjà là |
| Commande | docker | wslc |
| Images | Docker Hub et autres registres | les mêmes |
| Interface graphique | oui | non — ligne de commande seulement |
| Licence | payante au-delà d'une certaine taille d'entreprise | composant de Windows |
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
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.
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
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
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.
wslc run --rm hello-world
Il se passe quatre choses, dans cet ordre, et il faut savoir les nommer :
- l'image
hello-worldn'est pas sur la machine, donc elle est téléchargée depuis le registre ; - un conteneur est créé à partir d'elle ;
- il est démarré, affiche son message, et son processus se termine ;
--rmle fait détruire dans la foulée.
--rm, et pourquoi on le met presque toujoursSans 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
wslc run --rm -it ubuntu:latest bash -c "echo Hello world from WSL container!"
--rm | détruire le conteneur à la sortie |
-i | garder l'entrée standard ouverte |
-t | allouer un terminal |
ubuntu:latest | l'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 versionC'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
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
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
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 choserun 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.
wslc run -d --rm -p 8080:80 --name web nginx
curl localhost:8080
wslc container stop web
-d | détacher : le conteneur tourne, la main revient |
-p 8080:80 | hôte : conteneur |
--name web | un nom, pour ne pas manipuler un identifiant |
-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 :
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"]
FROM | l'image de départ |
WORKDIR | le dossier de travail à l'intérieur |
COPY | faire entrer des fichiers dans l'image |
RUN | une commande exécutée pendant la construction |
EXPOSE | documenter le port — cela ne le publie pas |
CMD | la commande lancée au démarrage du conteneur |
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 classiqueRUN 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.
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
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
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 restart | redémarrer un conteneur |
wslc container cp | copier des fichiers vers le conteneur, ou depuis |
wslc network connect / disconnect |
attacher ou détacher un réseau |
wslc volume list | les volumes connus |
wslc pull | té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 faire | Docker | WSL Containers |
|---|---|---|
| vérifier l'installation | docker version |
wslc version |
| un conteneur jetable | docker run --rm hello-world |
wslc run --rm hello-world |
| un serveur en fond | docker run -d -p 8080:80 nginx |
wslc run -d -p 8080:80 nginx |
| lister les conteneurs | docker ps |
wslc container list |
| lister les images | docker images |
wslc image list |
| une commande dedans | docker exec -it web bash |
wslc exec -it web bash |
| les journaux | docker logs web |
wslc container logs web |
| arrêter | docker stop web |
wslc container stop web |
| construire | docker build -t nom . |
wslc build -t nom . |
| faire le ménage | docker system prune |
wslc container prune + wslc image prune |
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.
wslcfait 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
# ── 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.exeest livré avec WSL : rien à installer, pas de licence, et plus de Docker Desktop sous Windows.- Il faut WSL 2.9.3 au minimum —
wsl --updatepuiswsl --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:80se lit hôte : conteneur. Le dehors est toujours à gauche.runpart d'une image,execentre dans un conteneur qui tourne. Les confondre donne un second conteneur vide.- Le fichier de construction s'appelle
Containerfilechez Microsoft, et son contenu est la syntaxe du chapitre 18.RUNs'exécute à la construction,CMDau démarrage,EXPOSEdocumente sans publier. - Ce sont les images qui pèsent :
wslc image prunelibère bien plus quewslc 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.