Une page web qui tourne sur votre machine en dix minutes : votre premier conteneur Docker
Dans dix minutes, vous taperez une adresse dans votre navigateur et une vraie page web vous répondra. Elle ne viendra pas d'internet : elle sera servie par un logiciel qui tourne sur votre propre machine, que vous n'aurez ni installé ni configuré.
C'est tout l'intérêt de la chose. Ce guide vous fait faire, puis vous explique ce que vous venez de faire. Pas l'inverse.
Ce qu'il vous faut
Une machine sous Windows 10 ou 11, macOS, ou Linux, avec les droits d'administrateur et une connexion internet. Comptez 4 Go de mémoire vive disponibles et quelques giga-octets de disque.
Rien d'autre. Vous n'aurez pas à installer de serveur web, ni à choisir une version, ni à lire une documentation d'installation.
Étape 1 : installer Docker
Sur Windows
C'est ici que ça coince pour la majorité des gens, alors autant le dire tout de suite : Docker sur Windows a besoin de WSL 2 (Windows Subsystem for Linux, le sous-système Linux intégré à Windows). Docker fait tourner des programmes conçus pour Linux ; WSL est la couche qui leur donne un Linux à l'intérieur de Windows. Sans elle, l'installation se termine par un message d'erreur au premier lancement.
Ouvrez PowerShell en tant qu'administrateur (clic droit sur le menu Démarrer, puis « Terminal (administrateur) » ou « Windows PowerShell (admin) ») et tapez :
wsl --install
Redémarrez la machine quand la commande vous le demande. Si vous aviez déjà WSL depuis longtemps, forcez sa mise à jour :
wsl --update
wsl --status
wsl --status doit indiquer la version 2 par défaut. Ensuite seulement, téléchargez Docker Desktop depuis docker.com, installez-le en laissant l'option WSL 2 cochée, et lancez-le.
Une note de réalisme : si votre machine est en entreprise et que la virtualisation est désactivée dans le firmware, ou que vous n'êtes pas administrateur, l'installation échouera et aucune commande n'y changera rien. C'est une décision de votre service informatique, pas un bug.
Sur macOS
Téléchargez Docker Desktop depuis docker.com en prenant bien la version qui correspond à votre processeur : Apple Silicon pour les Mac récents (M1 et suivants), Intel pour les plus anciens. Glissez l'application dans le dossier Applications, ouvrez-la, acceptez la demande de droits.
Sur Linux
Docker s'installe directement, sans interface graphique. Le script officiel de Docker fait le travail sur la plupart des distributions :
curl -fsSL https://get.docker.com | sh
Puis autorisez votre compte à piloter Docker sans passer par sudo à chaque commande :
sudo usermod -aG docker "$USER"
Déconnectez-vous et reconnectez-vous pour que ce changement prenne effet. Si vous préférez la méthode par dépôt officiel, elle est détaillée sur docs.docker.com.
Vérifier que c'est bon
Sur les trois systèmes, ouvrez un terminal et tapez :
docker version
Vous devez voir deux blocs : Client et Server. Si le second manque, avec un message du type « cannot connect to the Docker daemon », c'est que le moteur Docker n'est pas démarré : lancez l'application Docker Desktop et attendez que son icône cesse de s'animer.
Étape 2 : la commande qui fait apparaître une page
Une seule ligne, identique sur Windows, macOS et Linux :
docker run -d -p 8080:80 --name ma-page nginx
La première fois, vous verrez défiler des lignes de téléchargement : Docker récupère ce dont il a besoin. Au bout de quelques secondes, il affiche une longue suite de caractères et vous rend la main.
Maintenant, ouvrez votre navigateur à l'adresse http://localhost:8080.
Une page s'affiche : « Welcome to nginx! ». Elle est servie par un serveur web complet, qui tourne sur votre machine, que vous n'avez pas installé et dont vous ne connaissez pas la version. Vous venez de lancer votre premier conteneur.
Étape 3 : ce que vous venez de faire
Trois mots reviennent sans arrêt et se confondent tout le temps. Voici lequel est lequel.
flowchart TD
R[Docker Hub : bibliotheque publique d images] -->|telechargement automatique| I
subgraph HOTE[Votre machine : l hote]
I[Image nginx : le modele, fige, en lecture seule]
I -->|docker run| C[Conteneur ma-page : le modele en train de tourner]
C -->|port publie 8080 vers 80| N[Votre navigateur : localhost 8080]
end
L'image est un modèle figé : le serveur web, ses fichiers, ses réglages par défaut, empaquetés une fois pour toutes par quelqu'un d'autre. Elle ne s'exécute pas, elle se télécharge. Une image, c'est une recette ; elle ne se mange pas.
Le conteneur est cette image en train de tourner. Vous pouvez en lancer dix à partir de la même image, comme on cuisine dix fois la même recette : dix plats distincts, une seule recette.
L'hôte, c'est votre machine. Elle héberge le moteur Docker, les images téléchargées et les conteneurs en cours d'exécution.
Voici comment se lit la commande que vous avez tapée :
| Morceau | Ce qu'il fait |
|---|---|
docker run | crée un conteneur à partir d'une image et le démarre |
-d | le laisse tourner en arrière-plan et vous rend la main |
-p 8080:80 | publie un port : voir juste en dessous, c'est le point qui bloque |
--name ma-page | lui donne un nom lisible, au lieu d'un identifiant illisible |
nginx | l'image à utiliser, téléchargée automatiquement si absente |
Le port : là où tout le monde s'arrête
Un conteneur est isolé du reste de votre machine. Par défaut, rien de ce qui tourne dedans n'est joignable depuis l'extérieur, même depuis votre propre navigateur.
C'est le scénario classique de l'abandon : le conteneur tourne, docker ps le confirme, et pourtant le navigateur affiche une page d'erreur. La personne conclut que Docker ne marche pas et referme tout. En réalité, elle n'a simplement pas ouvert de passage.
-p 8080:80 est ce passage. Il se lit de gauche à droite, de l'extérieur vers l'intérieur :
- 8080 : le numéro à taper dans votre navigateur, côté machine.
- 80 : le numéro sur lequel le serveur écoute, à l'intérieur du conteneur.
Les deux nombres n'ont aucune raison d'être identiques. Le second n'est pas un choix : il est imposé par l'image, et la page de cette image sur Docker Hub vous le dit. Le premier est libre, tant qu'aucun autre programme ne l'occupe déjà. Si le port 8080 est pris, la commande refuse de démarrer : relancez avec -p 8081:80 et ouvrez localhost:8081.
Retenez la formule : port de chez vous, deux-points, port de chez lui.
Les quatre commandes du quotidien
Il en existe des dizaines. Vous en utiliserez ces quatre, presque toujours les mêmes.
Voir ce qui tourne
docker ps
Une ligne par conteneur en cours d'exécution, avec son nom, son image et ses ports publiés. Ajoutez -a pour voir aussi les conteneurs arrêtés, ceux qu'on oublie et qui s'accumulent.
Lire les journaux
docker logs ma-page
Tout ce que le programme a écrit depuis son démarrage. C'est le premier réflexe quand quelque chose ne répond pas : le conteneur vous dit presque toujours pourquoi. Ajoutez -f pour suivre en direct, rechargez la page dans le navigateur, et regardez les requêtes s'afficher au fil de l'eau. Quittez avec Ctrl+C : cela arrête l'affichage, pas le conteneur.
Arrêter
docker stop ma-page
Le conteneur s'arrête, la page cesse de répondre. Le conteneur existe toujours, à l'arrêt ; docker start ma-page le relance dans l'état où il était.
Supprimer
docker rm ma-page
Cette fois, il disparaît pour de bon. Attention à un refus courant : docker rm ne supprime pas un conteneur qui tourne encore. Arrêtez-le d'abord, ou forcez avec docker rm -f ma-page.
Où sont passées mes données
Posez-vous la question maintenant, pas le jour où ça vous coûtera quelque chose.
Tout ce qu'un conteneur écrit à l'intérieur de lui-même vit exactement aussi longtemps que lui. docker stop puis docker start conservent ce contenu. docker rm le détruit, sans confirmation et sans corbeille.
Concrètement : si vous lancez une base de données en conteneur, que vous y saisissez deux heures de travail, puis que vous supprimez le conteneur, ces deux heures n'existent plus nulle part. Ce n'est pas un accident, c'est le fonctionnement normal. Un conteneur est fait pour être jetable.
La parade existe et s'appelle un volume : un dossier qui vit sur votre machine, en dehors du conteneur, et que le conteneur utilise pour ranger ce qui doit survivre. C'est le sujet suivant, traité dans le cours Docker et conteneurs. D'ici là, la règle de sécurité est simple : tant que vous ne savez pas monter un volume, ne mettez rien d'important dans un conteneur.
Tout arrêter et nettoyer
Vous n'allez pas laisser tourner un serveur web dont vous n'avez plus l'usage. Dans l'ordre :
docker stop ma-page
docker rm ma-page
L'image, elle, reste sur votre disque : c'est voulu, elle vous évite un nouveau téléchargement au prochain essai. Pour voir ce qui occupe la place, puis retirer celle-ci si vous le souhaitez :
docker images
docker rmi nginx
Sur Windows et macOS, fermer Docker Desktop arrête le moteur et tous les conteneurs d'un coup. Ils redémarreront ou non selon leur configuration à la prochaine ouverture : vérifiez avec docker ps.
Enfin, le point que personne ne dit aux débutants : Docker Desktop se lance au démarrage de votre machine par défaut et consomme de la mémoire en permanence. Si vous ne faites pas de conteneur toutes les semaines, décochez ce démarrage automatique dans les réglages de l'application.
Quand ça ne marche pas
| Ce que vous voyez | Ce que c'est | Ce que vous faites |
|---|---|---|
| « cannot connect to the Docker daemon » | le moteur n'est pas démarré | lancez Docker Desktop, attendez la fin de l'initialisation |
| Une erreur mentionnant WSL au lancement sous Windows | WSL 2 absent ou pas à jour | wsl --install puis wsl --update, en PowerShell administrateur, et redémarrez |
| « port is already allocated » | un autre programme occupe déjà 8080 | relancez avec -p 8081:80 et ouvrez localhost:8081 |
docker ps montre le conteneur, mais le navigateur n'affiche rien | aucun port publié, ou pas le bon | supprimez le conteneur et relancez avec -p |
| « Conflict. The container name is already in use » | un conteneur porte déjà ce nom | docker rm ma-page, puis relancez |
Le conteneur apparaît puis disparaît de docker ps | le programme s'est arrêté sur une erreur | docker logs ma-page vous donne la raison |
À retenir
- Une image est un modèle, un conteneur est ce modèle en train de tourner, l'hôte est votre machine. Ces trois mots ne sont pas interchangeables.
- Sans
-p, rien n'est joignable. C'est la cause numéro un des premiers échecs, et elle n'a rien à voir avec une mauvaise installation. - Ce qu'un conteneur écrit disparaît avec lui. Tant que vous ne maîtrisez pas les volumes, considérez tout conteneur comme jetable.
- Sous Windows, WSL 2 est un prérequis, pas un détail : réglez-le avant d'installer Docker Desktop, pas après.
- Quatre commandes suffisent au quotidien :
run,ps,logs,stop.
Mini-exercice
Lancez un second conteneur à partir de la même image, sur un autre port, sans arrêter le premier :
docker run -d -p 8081:80 --name ma-page-2 nginx
Ouvrez localhost:8080 et localhost:8081 dans deux onglets. Les deux répondent, à partir d'une seule image téléchargée une seule fois : c'est exactement ce qui rend les conteneurs utiles.
Puis nettoyez derrière vous : docker stop ma-page-2 et docker rm ma-page-2. Vérifiez avec docker ps -a qu'il n'en reste aucune trace.
Pour aller plus loin
Ce guide vous a fait lancer un conteneur. Le cours Docker et conteneurs explique ce qui se passe en dessous : comment une image est construite, ce qu'est un Dockerfile, comment les volumes conservent les données, et comment docker compose démarre plusieurs conteneurs liés en une seule commande.
Si la différence entre un conteneur et une machine virtuelle reste floue, le cours Virtualisation pour débutants pose l'autre moitié du décor.