Docker : les commandes essentielles
Cycle de vie
Lancer, lister, arrêter, supprimer : 90 % de ton quotidien Docker tient dans ces quatre commandes. Retiens surtout que docker ps seul ne montre que les conteneurs en cours d'exécution — ajoute -a pour voir aussi les arrêtés.
docker run -d --name web -p 8080:80 nginx:1.27 # lancer en arrière-plan / run detached
docker ps -a # tous les conteneurs / all containers
docker stop web # arrêt propre (SIGTERM) / graceful stop
docker start web # relancer un conteneur arrêté / restart a stopped one
docker rm web # supprimer (doit être arrêté) / remove (must be stopped)⚠️ docker rm -f web force la suppression d'un conteneur en marche (SIGKILL, sans arrêt propre). Pratique en dev, à éviter sur une base de données en prod.
Inspecter & déboguer
Un conteneur qui ne répond pas ? Dans l'ordre : les logs, puis un shell dedans, puis les métadonnées complètes. stats te dit en direct qui mange ta RAM.
docker logs -f --tail 100 web # suivre les 100 dernières lignes / follow last 100 lines
docker exec -it web sh # shell dans le conteneur / shell inside the container
docker inspect web # tout le JSON : IP, mounts, env / full JSON: IP, mounts, env
docker inspect -f '{{.State.Status}}' web # un champ précis / one specific field
docker stats # CPU/RAM en temps réel / live CPU/RAMAstuce : docker exec exige un conteneur en marche. S'il crashe au démarrage, lis d'abord docker logs web, puis inspecte le code de sortie avec docker inspect -f '{{.State.ExitCode}}' web.
Images
Une image est le modèle, le conteneur en est une instance. Pine toujours une version (nginx:1.27), jamais latest en prod : latest change sous tes pieds à chaque pull.
docker pull nginx:1.27 # télécharger / download
docker images # lister les images locales / list local images
docker build -t monapp:1.0 . # construire depuis un Dockerfile / build from Dockerfile
docker tag monapp:1.0 registry.example.com/monapp:1.0
docker push registry.example.com/monapp:1.0
docker rmi monapp:1.0 # supprimer une image / remove an imageVolumes & réseaux
Les données vivent dans les volumes, pas dans le conteneur : supprimer un conteneur ne touche pas ses volumes nommés. Les réseaux permettent aux conteneurs de se parler par leur nom (DNS interne).
docker volume create data
docker run -d --name db -v data:/var/lib/postgresql/data postgres:16
docker volume ls
docker volume inspect data # où c'est stocké sur l'hôte / where it lives on the host
docker network create backend
docker network connect backend web # web peut joindre db par son nom / web can reach db by name
docker network ls⚠️ docker volume rm data détruit les données définitivement. Vérifie qu'aucun conteneur ne l'utilise et que tu as une sauvegarde.
Les pièges
- Le conteneur "s'arrête tout seul" : un conteneur vit tant que son processus principal (PID 1) tourne. Si ta commande se termine (ou passe en daemon), le conteneur s'arrête. C'est normal.
-p 8080:80dans le mauvais sens : c'est toujourshôte:conteneur. Le port de gauche est celui que tu ouvres dans ton navigateur.- Modifier un fichier dans le conteneur : perdu au prochain
rm+run. Toute donnée à conserver passe par un volume ou un bind mount.
Aller plus loin
Ces commandes sont la surface ; pour comprendre ce qui se passe dessous (images, layers, isolation, Compose), suis le guide Docker fondamentaux du parcours.