Vous arrivez ici pour retrouver une commande Docker que vous utilisez chaque semaine et que vous oubliez à moitié. Comment lancer un conteneur, lister ce qui tourne, suivre les logs, ouvrir un shell à l'intérieur, ou récupérer le disque que Docker a discrètement avalé. Les commandes du quotidien sont juste en dessous, regroupées selon ce que vous cherchez vraiment à faire, pour que vous puissiez en copier une, changer l'image ou le nom du conteneur, et retourner travailler. Nous marquons clairement les dangereuses (rm, prune), parce que Docker supprime sans demander et qu'il n'y a pas de retour en arrière. Pas de plongée dans les couches ou les namespaces ici, juste les recettes que vous tapez au terminal.
The short answer
Les commandes du quotidien, vite : docker run -d -p 8080:80 nginx pour lancer un conteneur,
docker ps pour voir ce qui tourne, docker logs -f web pour suivre la sortie, docker exec -it web sh
pour un shell à l'intérieur, docker compose up -d pour monter toute une stack, et docker system prune
pour récupérer le disque que Docker a discrètement rempli (sans retour, alors lisez-la d'abord).
Vous arrivez ici pour retrouver une commande Docker que vous utilisez chaque semaine et que vous oubliez à moitié. Comment lancer un conteneur, lister ce qui tourne, suivre les logs, ouvrir un shell à l'intérieur, ou récupérer le disque que Docker a discrètement avalé. Les commandes du quotidien sont juste en dessous, regroupées selon ce que vous cherchez vraiment à faire, pour que vous puissiez en copier une, changer l'image ou le nom du conteneur, et retourner travailler.
Un point à poser d'emblée. Deux de ces commandes (rm et prune) suppriment sans confirmation et sans retour en arrière. Nous les marquons clairement. Le reste se teste sans risque sur un conteneur jetable.
Lancer et gérer des conteneurs
Le point de départ. docker run télécharge l'image si vous ne l'avez pas, crée un conteneur et le démarre. Les drapeaux que vous dégainez le plus : -d pour tourner en arrière-plan, --name pour lui donner un nom, -p pour publier un port, et --rm pour le supprimer à la sortie.
| Recette | Ce qu'elle fait |
|---|---|
docker run -d --name web -p 8080:80 nginx | Lancer nginx en arrière-plan, joignable sur le port 8080 de la machine |
docker run -it --rm alpine sh | Un shell jetable qui se supprime quand vous sortez |
docker ps | Lister les conteneurs qui tournent |
docker ps -a | Lister tous les conteneurs, même arrêtés |
docker stop web | Arrêter un conteneur mais le garder (relancer plus tard) |
docker start web | Relancer un conteneur précédemment arrêté |
docker rm web | Supprimer un conteneur arrêté (ajoutez -f pour en forcer un en cours) |
Ce -p 8080:80 se lit hôte:conteneur, donc le trafic vers le port 8080 de votre machine atteint le port 80 à l'intérieur. Inversez-les et vous passerez dix minutes à vous demander pourquoi la page ne charge pas. Pour effacer tous les conteneurs arrêtés d'un coup :
# retirer tous les conteneurs arrêtés en une fois
docker rm $(docker ps -aq)
Images : pull, list, build, remove
Les conteneurs tournent à partir d'images, et les images s'accumulent. docker images montre ce que vous avez, docker pull en récupère une nouvelle, et docker rmi en retire une dont vous n'avez plus besoin. Notez que supprimer un conteneur n'efface pas son image, c'est une étape à part.
| Recette | Ce qu'elle fait |
|---|---|
docker pull postgres:16 | Télécharger l'image postgres 16 (ou un tag précis) |
docker images | Lister les images locales avec leur taille |
docker build -t myapp:1.0 . | Construire une image à partir du Dockerfile du dossier courant |
docker rmi myapp:1.0 | Supprimer une seule image par nom et tag |
docker tag myapp:1.0 myapp:latest | Ajouter un second tag à la même image |
Figez le tag (postgres:16, pas postgres tout court) pour qu'une reconstruction le mois prochain n'aille pas silencieusement chercher une nouvelle version majeure et vous surprenne. Le nom nu pointe vers :latest, qui bouge sous vos pieds.
Docker compose : up, down, logs
Quand une appli, c'est plus d'un conteneur (une API plus une base plus un cache), vous la décrivez une fois dans compose.yaml et vous pilotez l'ensemble avec docker compose. Lancez ces commandes depuis le dossier qui contient le fichier.
| Recette | Ce qu'elle fait |
|---|---|
docker compose up -d | Créer et démarrer toute la stack en arrière-plan |
docker compose up | Pareil, mais au premier plan avec tous les logs qui défilent (Ctrl+C l'arrête) |
docker compose down | Arrêter et retirer la stack (conteneurs et réseau) |
docker compose down -v | Pareil, mais supprimer aussi les volumes (efface les données) |
docker compose ps | Lister les services de ce projet et leur état |
docker compose logs -f api | Suivre les logs d'un seul service |
docker compose restart api | Redémarrer un seul service sans toucher au reste |
Le choix premier plan contre arrière-plan est celui sur lequel les gens butent. docker compose up est parfait pendant que vous construisez, car chaque log arrive dans votre terminal et Ctrl+C démonte la stack proprement. Une fois que ça marche, passez à up -d pour qu'elle survive à la fermeture de la fenêtre. Après une modification de compose.yaml, relancez up -d et Docker ne recrée que les services qui ont changé.
# reconstruire les images, puis monter la stack en arrière-plan
docker compose up -d --build
À noter : sur les anciennes installations la commande est docker-compose avec un tiret (le binaire autonome v1). Le Docker moderne la fournit comme sous-commande docker compose, et c'est elle que nous utilisons partout.
Entrer dans un conteneur avec exec
Parfois il faut être à l'intérieur d'un conteneur en cours, pour vérifier un fichier de config, lancer une requête ponctuelle, ou voir pourquoi un processus fait la tête. docker exec exécute une commande dans un conteneur déjà démarré.
| Recette | Ce qu'elle fait |
|---|---|
docker exec -it web bash | Ouvrir un shell bash interactif dans le conteneur en cours |
docker exec -it web sh | Pareil quand l'image n'a pas de bash (Alpine, distroless) |
docker exec web env | Lancer une seule commande (ici, afficher les variables d'environnement) et sortir |
docker exec -it -u root web sh | Entrer en root quand l'utilisateur par défaut n'a pas les droits |
docker exec -it web sh Le -it est la partie à retenir : -i garde l'entrée ouverte, -t vous donne un vrai terminal, et sans les deux votre shell semble cassé (pas d'invite, pas d'écho). Tentez sh d'abord sur les petites images, car beaucoup d'images allégées et basées sur Alpine n'ont pas de bash, et exec ... bash échoue alors avec « executable file not found ».
Logs et inspection
Quand quelque chose déraille, les logs et les métadonnées du conteneur racontent l'histoire. docker logs rejoue ce qu'un conteneur a affiché, et docker inspect déverse toute sa configuration en JSON.
| Recette | Ce qu'elle fait |
|---|---|
docker logs web | Afficher tout ce que le conteneur a journalisé jusqu'ici |
docker logs -f web | Suivre les nouvelles lignes en direct (comme tail -f) |
docker logs --tail 100 web | Juste les 100 dernières lignes, pas tout l'historique |
docker logs --since 10m web | Seulement les lignes des 10 dernières minutes |
docker inspect web | La config JSON complète : montages, env, réseau, politique de redémarrage |
docker stats | CPU, mémoire et E/S en direct par conteneur |
Pour un conteneur bavard, combinez les drapeaux : docker logs -f --tail 50 web montre le contexte récent puis diffuse les nouvelles lignes, ce qui est souvent ce que vous voulez en traquant une erreur intermittente. Pour extraire un seul champ d'inspect au lieu de lire tout le bloc :
# récupérer juste l'adresse IP du conteneur
docker inspect -f '{{ .NetworkSettings.IPAddress }}' web
Nettoyer et récupérer le disque avec prune
Docker est généreux avec le disque. Les conteneurs arrêtés, les vieilles images, les couches de build orphelines et les volumes abandonnés s'accumulent jusqu'à ce que df fasse peur. Commencez par mesurer, puis nettoyez délibérément.
| Recette | Ce qu'elle fait |
|---|---|
docker system df | Montrer combien d'espace prennent images, conteneurs et volumes |
docker image prune | Retirer les images orphelines (restes sans tag) |
docker image prune -a | Retirer toute image non utilisée par un conteneur (agressif) |
docker container prune | Retirer tous les conteneurs arrêtés |
docker system prune | Conteneurs, réseaux et images orphelines en un seul passage |
docker system prune -a --volumes | Le nettoyage profond : aussi les images et volumes inutilisés |
docker volume prune | Retirer les volumes inutilisés (danger : ce sont vos données) |
Lancez docker system df d'abord, à chaque fois, pour savoir ce que vous vous apprêtez à retirer. Celle à manier avec soin est tout ce qui touche aux volumes. Conteneurs et images, vous pouvez toujours les recréer, mais un volume contient la base, les fichiers envoyés, l'état, et volume prune le supprime sans récupération possible. Dans le doute, nettoyez images et conteneurs, et laissez les volumes tranquilles tant que vous n'êtes pas certain qu'ils sont orphelins.
Notre avis : mesurez avec
docker system dfavant de nettoyer, et ne faites jamaisvolume prunepar réflexe. La boucle du quotidien, c'estrunpour lancer quelque chose,pspour le confirmer,logs -fquand ça déraille,exec -itpour fouiller à l'intérieur, etcompose up -dquand une appli dépasse le conteneur unique. Ça couvre presque tout. Le piège, c'est le nettoyage du disque.docker system prune -aest un bon réflexe sur une machine de build, mais la même habitude appliquée avec--volumessur un serveur supprime discrètement une base de données. Alors nous lançons toujoursdocker system dfd'abord pour voir ce qui prend vraiment la place, nous nettoyons images et conteneurs arrêtés sans hésiter, et nous traitons les volumes comme interdits tant que nous n'avons pas vérifié exactement lequel est orphelin. Deux secondes de lecture valent mieux qu'une restauration que vous n'avez peut-être pas.
Et après
Voilà la trousse de travail. Lancer et gérer des conteneurs, manier les images, piloter une stack avec compose, entrer avec exec pour jeter un œil, lire les logs, et faire redescendre le disque avec prune. La plupart des journées sont un mélange de ces six-là, et le reste vous le recherchez comme tout le monde.
Si le conteneur tourne mais que l'appli à l'intérieur reste muette, le même réflexe se transpose à l'hôte. Vérifiez que le port publié écoute vraiment avec les commandes réseau Linux et ip et ss, et si une unité de service enveloppe votre installation Docker, l'antisèche systemctl et journalctl explique comment lire pourquoi le démarrage a échoué. Une autre couche, la même habitude : arrêtez de mémoriser, gardez une bonne antisèche à portée.
Questions fréquentes
Comment lancer un conteneur Docker en arrière-plan ?
Utilisez docker run -d, comme dans docker run -d --name web -p 8080:80 nginx. Le drapeau -d (détaché) démarre le conteneur et vous rend la main au lieu de vous attacher à sa sortie. Le --name fixe un nom lisible pour ne pas avoir à copier l identifiant, et -p 8080:80 relie le port 8080 de la machine au port 80 du conteneur. Vérifiez qu il tourne avec docker ps, puis suivez sa sortie avec docker logs -f web.
Quelle différence entre docker stop et docker rm ?
docker stop arrête un conteneur qui tourne mais le garde, vous pouvez donc le relancer avec docker start et son nom apparaît encore dans docker ps -a. docker rm supprime entièrement le conteneur, ce qui ne marche qu une fois qu il est arrêté (ou ajoutez -f pour forcer). Un nettoyage courant est docker rm $(docker ps -aq) pour retirer tous les conteneurs arrêtés d un coup. Supprimer un conteneur n efface pas l image dont il vient, c est un docker rmi à part.
Comment ouvrir un shell dans un conteneur en cours ?
Lancez docker exec -it CONTENEUR bash, ou docker exec -it CONTENEUR sh si l image n a pas bash (les images basées sur Alpine n en ont en général pas). Le couple -it vous donne un terminal interactif, -i garde l entrée ouverte et -t alloue un TTY. Cela vous dépose dans le conteneur en cours pour inspecter des fichiers ou tester un truc. Utilisez plutôt docker run -it --rm image sh quand vous voulez un conteneur jetable qui se supprime à la sortie.
Comment libérer l espace disque utilisé par Docker ?
Commencez par docker system df pour voir ce qui occupe l espace, puis docker image prune pour retirer les images orphelines (sans tag). Pour un nettoyage plus profond, docker system prune retire en une fois les conteneurs arrêtés, les réseaux inutilisés et les images orphelines, et ajouter -a retire aussi toute image non utilisée par un conteneur. Méfiez-vous de docker volume prune, parce que les volumes contiennent vos données (bases, fichiers envoyés) et qu un volume supprimé est perdu pour de bon.
Quelle différence entre docker compose up et docker compose up -d ?
Les deux lisent votre compose.yaml et créent les services décrits. docker compose up seul tourne au premier plan et diffuse tous les logs des conteneurs dans votre terminal, pratique en plein débogage car Ctrl+C arrête toute la stack. Ajouter -d (détaché) démarre tout en arrière-plan et vous rend la main, ce que vous voulez pour ce que vous comptez laisser tourner. Dans les deux cas, docker compose down arrête et retire la stack une fois terminé.