SysadminGuide

Antiseche des commandes Docker du quotidien

Sur cette page
  1. Lancer et gérer des conteneurs
  2. Images : pull, list, build, remove
  3. Docker compose : up, down, logs
  4. Entrer dans un conteneur avec exec
  5. Logs et inspection
  6. Nettoyer et récupérer le disque avec prune
  7. Et après

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

6 tâchesrun, ps, logs, exec, compose, prune
-it shquand bash manque
prunelibère le disque, sans retour
Fiche réponse : lancer un conteneur avec docker run -d, lister avec docker ps, suivre les logs avec docker logs -f, ouvrir un shell avec docker exec -it, monter une stack avec docker compose up -d, et récupérer le disque avec docker system prune.
Les commandes Docker du quotidien, regroupées selon ce que vous cherchez vraiment à faire. PNG

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.

RecetteCe qu'elle fait
docker run -d --name web -p 8080:80 nginxLancer nginx en arrière-plan, joignable sur le port 8080 de la machine
docker run -it --rm alpine shUn shell jetable qui se supprime quand vous sortez
docker psLister les conteneurs qui tournent
docker ps -aLister tous les conteneurs, même arrêtés
docker stop webArrêter un conteneur mais le garder (relancer plus tard)
docker start webRelancer un conteneur précédemment arrêté
docker rm webSupprimer 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.

RecetteCe qu'elle fait
docker pull postgres:16Télécharger l'image postgres 16 (ou un tag précis)
docker imagesLister 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.0Supprimer une seule image par nom et tag
docker tag myapp:1.0 myapp:latestAjouter 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.

RecetteCe qu'elle fait
docker compose up -dCréer et démarrer toute la stack en arrière-plan
docker compose upPareil, mais au premier plan avec tous les logs qui défilent (Ctrl+C l'arrête)
docker compose downArrêter et retirer la stack (conteneurs et réseau)
docker compose down -vPareil, mais supprimer aussi les volumes (efface les données)
docker compose psLister les services de ce projet et leur état
docker compose logs -f apiSuivre les logs d'un seul service
docker compose restart apiRedé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é.

RecetteCe qu'elle fait
docker exec -it web bashOuvrir un shell bash interactif dans le conteneur en cours
docker exec -it web shPareil quand l'image n'a pas de bash (Alpine, distroless)
docker exec web envLancer une seule commande (ici, afficher les variables d'environnement) et sortir
docker exec -it -u root web shEntrer en root quand l'utilisateur par défaut n'a pas les droits
Linux
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.

RecetteCe qu'elle fait
docker logs webAfficher tout ce que le conteneur a journalisé jusqu'ici
docker logs -f webSuivre les nouvelles lignes en direct (comme tail -f)
docker logs --tail 100 webJuste les 100 dernières lignes, pas tout l'historique
docker logs --since 10m webSeulement les lignes des 10 dernières minutes
docker inspect webLa config JSON complète : montages, env, réseau, politique de redémarrage
docker statsCPU, 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.

RecetteCe qu'elle fait
docker system dfMontrer combien d'espace prennent images, conteneurs et volumes
docker image pruneRetirer les images orphelines (restes sans tag)
docker image prune -aRetirer toute image non utilisée par un conteneur (agressif)
docker container pruneRetirer tous les conteneurs arrêtés
docker system pruneConteneurs, réseaux et images orphelines en un seul passage
docker system prune -a --volumesLe nettoyage profond : aussi les images et volumes inutilisés
docker volume pruneRetirer 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.

Session terminal lançant docker ps pour lister les conteneurs, docker logs -f web pour suivre la sortie, docker exec -it web sh pour ouvrir un shell, et docker system prune pour récupérer de l'espace disque.
Une session normale : lister, suivre les logs, entrer dedans, puis récupérer du disque. PNG

Notre avis : mesurez avec docker system df avant de nettoyer, et ne faites jamais volume prune par réflexe. La boucle du quotidien, c'est run pour lancer quelque chose, ps pour le confirmer, logs -f quand ça déraille, exec -it pour fouiller à l'intérieur, et compose up -d quand une appli dépasse le conteneur unique. Ça couvre presque tout. Le piège, c'est le nettoyage du disque. docker system prune -a est un bon réflexe sur une machine de build, mais la même habitude appliquée avec --volumes sur un serveur supprime discrètement une base de données. Alors nous lançons toujours docker system df d'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é.