30 commandes Docker essentielles : l'aide-mémoire complet
Tu utilises Docker tous les jours mais tu oublies toujours la syntaxe de docker volume ou les options de docker run ? Ce guide est ton aide-mémoire Docker : 30 commandes essentielles, organisées par catégorie, avec des exemples concrets.
Garde cette page en favori — elle remplacera tes 15 onglets Stack Overflow.
Commandes de base : conteneurs
docker run — Lancer un conteneur
La commande la plus utilisée. Elle télécharge l'image si nécessaire, crée le conteneur et le démarre.
# Lancer un conteneur Nginx accessible sur le port 8080
docker run -d --name mon-nginx -p 8080:80 nginx
# Lancer un conteneur interactif
docker run -it ubuntu /bin/bash
# Avec des variables d'environnement
docker run -d --name ma-db \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
postgres:16Options courantes : -d (arrière-plan), -p (ports), -e (variables), --name (nommer), -v (volumes), --rm (supprimer après arrêt).
docker ps — Lister les conteneurs
docker ps # Conteneurs en cours d'exécution
docker ps -a # Tous les conteneurs (y compris arrêtés)
docker ps -q # IDs uniquement (utile pour scripting)
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"docker stop / start / restart
docker stop mon-nginx # Arrêter (SIGTERM puis SIGKILL)
docker start mon-nginx # Redémarrer un conteneur arrêté
docker restart mon-nginx # Stop + start
docker stop $(docker ps -q) # Arrêter TOUS les conteneursdocker rm — Supprimer un conteneur
docker rm mon-nginx # Supprimer (doit être arrêté)
docker rm -f mon-nginx # Forcer la suppression
docker rm $(docker ps -aq) # Supprimer TOUS les conteneursdocker logs — Voir les logs
docker logs mon-nginx # Tous les logs
docker logs -f mon-nginx # Suivre en temps réel (comme tail -f)
docker logs --tail 50 mon-nginx # 50 dernières lignes
docker logs --since 1h mon-nginx # Logs de la dernière heuredocker exec — Exécuter dans un conteneur
# Ouvrir un shell interactif
docker exec -it mon-nginx /bin/bash
# Exécuter une commande
docker exec mon-nginx cat /etc/nginx/nginx.conf
# En tant que root
docker exec -u root mon-nginx apt updateGestion des images
docker pull / images / rmi
# Télécharger une image
docker pull nginx:latest
docker pull ubuntu:24.04
# Lister les images locales
docker images
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# Supprimer une image
docker rmi nginx:latest
docker rmi $(docker images -q --filter "dangling=true") # Images orphelinesdocker build — Construire une image
# Build depuis le répertoire courant
docker build -t mon-app:1.0 .
# Build avec un Dockerfile spécifique
docker build -f Dockerfile.prod -t mon-app:prod .
# Build sans cache
docker build --no-cache -t mon-app:latest .docker tag / push — Publier une image
# Tagger pour un registry
docker tag mon-app:1.0 registry.example.com/mon-app:1.0
# Pousser vers le registry
docker push registry.example.com/mon-app:1.0Volumes et stockage
Les données dans un conteneur disparaissent quand il est supprimé. Les volumes persistent les données.
# Créer un volume nommé
docker volume create mes-donnees
# Lister les volumes
docker volume ls
# Inspecter un volume
docker volume inspect mes-donnees
# Utiliser un volume dans un conteneur
docker run -d --name postgres \
-v mes-donnees:/var/lib/postgresql/data \
postgres:16
# Bind mount (monter un dossier local)
docker run -d --name dev \
-v $(pwd)/src:/app/src \
node:20
# Supprimer les volumes non utilisés
docker volume pruneRéseau Docker
# Créer un réseau
docker network create mon-reseau
# Lister les réseaux
docker network ls
# Lancer des conteneurs sur le même réseau
docker run -d --name api --network mon-reseau node:20
docker run -d --name db --network mon-reseau postgres:16
# Les conteneurs se trouvent par nom DNS :
# depuis "api", on peut joindre "db" via postgres://db:5432
# Connecter un conteneur existant
docker network connect mon-reseau mon-conteneurDocker Compose
Docker Compose gère des applications multi-conteneurs avec un seul fichier YAML.
# compose.yaml
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://db:5432/myapp
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:docker compose up -d # Démarrer en arrière-plan
docker compose down # Arrêter et supprimer
docker compose logs -f # Suivre les logs
docker compose ps # Voir les conteneurs
docker compose exec web sh # Shell dans le service web
docker compose build # Rebuild les images
docker compose up -d --scale web=3 # Scaler à 3 instancesInspection et dépannage
# Détails complets d'un conteneur (config, réseau, mounts...)
docker inspect mon-conteneur
# Extraire une info précise (ex : adresse IP)
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mon-conteneur
# Utilisation CPU/mémoire en temps réel
docker stats
# Processus dans un conteneur
docker top mon-conteneur
# Modifications par rapport à l'image d'origine
docker diff mon-conteneurNettoyage
Docker accumule des ressources inutilisées. Un nettoyage régulier libère de l'espace disque.
# Nettoyage complet (conteneurs arrêtés, images orphelines, réseaux, cache)
docker system prune -a
# Nettoyage sélectif
docker container prune # Conteneurs arrêtés
docker image prune -a # Images non utilisées
docker volume prune # Volumes orphelins
docker network prune # Réseaux non utilisés
# Voir l'espace utilisé
docker system dfÉcrire un bon Dockerfile
# Dockerfile optimisé (multi-stage)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
RUN addgroup -S app && adduser -S app -G app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1
USER app
CMD ["node", "dist/server.js"]Les bonnes pratiques Dockerfile
- Multi-stage builds : séparer le build du runtime pour des images plus légères
- .dockerignore : exclure node_modules, .git, les fichiers inutiles
- Utilisateur non-root : ne jamais tourner en root en production
- Ordre des COPY : mettre les fichiers qui changent le moins en premier (meilleur cache)
- Images Alpine : utiliser
-alpinepour des images 5 à 10 fois plus légères - HEALTHCHECK : permet à Docker et aux orchestrateurs de savoir si l'app est saine
Tableau récapitulatif
| Action | Commande |
|---|---|
| Lancer un conteneur | docker run -d --name x image |
| Lister les conteneurs | docker ps -a |
| Voir les logs | docker logs -f x |
| Shell interactif | docker exec -it x sh |
| Construire une image | docker build -t app:1.0 . |
| Lister les images | docker images |
| Créer un volume | docker volume create x |
| Créer un réseau | docker network create x |
| Démarrer Compose | docker compose up -d |
| Stats temps réel | docker stats |
| Inspecter | docker inspect x |
| Nettoyage complet | docker system prune -a |
| Espace disque | docker system df |
| Arrêter tout | docker stop $(docker ps -q) |
FAQ
Quelle différence entre docker run et docker start ?
docker run crée un nouveau conteneur à partir d'une image. docker start redémarre un conteneur existant qui a été arrêté. La confusion vient du fait que run fait le create + start en une commande.
Comment débugger un conteneur qui crash au démarrage ?
Utilise docker logs mon-conteneur pour voir les erreurs. Si le conteneur s'arrête immédiatement, lance-le en mode interactif : docker run -it image sh pour explorer manuellement.
Docker Compose v1 vs v2 ?
Compose v1 (docker-compose avec tiret) est obsolète. Compose v2 (docker compose sans tiret, avec espace) est intégré à Docker. Utilise toujours v2.
Comment réduire la taille d'une image Docker ?
Trois techniques : utiliser des images Alpine (node:20-alpine au lieu de node:20), faire du multi-stage build (séparer build et runtime), et nettoyer les caches dans le même RUN (RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*).
Prêt à pratiquer ?
Lire des commandes, c'est bien. Les taper sur un vrai terminal, c'est mieux. Sur LabsDevOps, 60 labs Docker progressifs avec un environnement dédié pour chaque exercice — rien à installer, tout tourne dans le navigateur.
→ Commencer les labs Docker gratuitement — les 5 premiers labs sont gratuits, sans carte bancaire.
Passez à la pratique
Cet article vous a donné les bases. Maintenant, pratiquez chaque commande sur un vrai terminal avec nos labs interactifs guidés.
Commencer les labs Docker