Chapitre 167 minIntermédiaire
Aide-mémoire : les commandes Docker et Compose
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- retrouver vite la commande Docker ou Compose qu'il te faut ;
- partir d'un squelette de compose.yaml sûr pour un nouveau projet.
Cet aide-mémoire regroupe les commandes Docker et Docker Compose de ce cours, classées par usage, avec les options les plus utiles. Garde-le sous la main pendant tes TP et tes réalisations professionnelles.
Conteneurs
| Commande | Effet |
|---|---|
docker run -d --name web -p 8080:80 nginx:1.30-alpine | Crée et démarre un conteneur en arrière-plan, port publié |
docker run --rm -it alpine:3.24 sh | Conteneur jetable, interactif |
docker ps / docker ps -a | Conteneurs en marche / tous |
docker logs -f --tail 50 web | Journaux, en continu |
docker exec -it web sh | Shell dans un conteneur qui tourne |
docker stop web / docker start web / docker restart web | Arrêter, démarrer, redémarrer |
docker rm -f web | Arrêter et supprimer |
docker inspect web | Configuration complète en JSON |
docker stats --no-stream | Consommation instantanée |
docker cp web:/chemin/fichier . | Copier un fichier depuis le conteneur |
docker events | Événements du démon en direct |
Images
| Commande | Effet |
|---|---|
docker pull mysql:8.4 | Télécharger une image |
docker images | Images présentes |
docker build -t app:1.0 . | Construire depuis le Dockerfile du dossier |
docker build --platform linux/amd64 -t app:1.0 . | Construire pour une autre architecture |
docker tag app:1.0 registre.ad.sorbier.example/outils/app:1.0 | Ajouter un nom |
docker push registre.ad.sorbier.example/outils/app:1.0 | Envoyer dans un registre |
docker history app:1.0 | Couches d'une image |
docker save -o app.tar app:1.0 / docker load -i app.tar | Exporter, importer sans registre |
docker login / docker logout | Se connecter à un registre |
Volumes et réseaux
| Commande | Effet |
|---|---|
docker volume create donnees / docker volume ls | Créer, lister |
docker volume inspect donnees | Emplacement sur l'hôte |
docker network create gestion | Réseau personnalisé (DNS interne) |
docker network create --internal donnees | Réseau sans accès extérieur |
docker network connect gestion web | Brancher un conteneur |
docker network inspect gestion | Sous-réseau, conteneurs branchés |
Commandes Docker Compose
| Commande | Effet |
|---|---|
docker compose up -d | Créer et démarrer, ou appliquer les changements |
docker compose ps | État des services |
docker compose logs -f api | Journaux d'un service |
docker compose exec bdd sh | Shell dans un service |
docker compose run --rm api node script.js | Commande ponctuelle |
docker compose pull / docker compose build | Nouvelles images |
docker compose config | Fichier final, variables remplacées |
docker compose stop / docker compose start | Arrêter, redémarrer sans supprimer |
docker compose down | Supprimer conteneurs et réseaux (volumes gardés) |
docker compose down -v | Supprimer aussi les volumes (données perdues) |
Squelette d'un compose.yaml
name: projet
services:
app:
image: ghcr.io/organisation/app:1.0.0
environment:
DB_HOST: bdd
DB_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
networks:
- frontal
- donnees
depends_on:
bdd:
condition: service_healthy
restart: unless-stopped
bdd:
image: mysql:8.4
environment:
MYSQL_DATABASE: app
MYSQL_USER: app
MYSQL_PASSWORD_FILE: /run/secrets/db_password
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_password
- db_root_password
volumes:
- bdd-donnees:/var/lib/mysql
networks:
- donnees
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 10s
retries: 5
start_period: 30s
restart: unless-stopped
networks:
frontal:
donnees:
internal: true
volumes:
bdd-donnees:
secrets:
db_password:
file: ./secrets/db_password.txt
db_root_password:
file: ./secrets/db_root_password.txt
Nettoyage et diagnostic
| Commande | Effet |
|---|---|
docker system df | Place occupée par catégorie |
docker container prune | Supprimer les conteneurs arrêtés |
docker image prune (-a) | Supprimer les images sans étiquette (toutes les inutilisées) |
docker volume prune | Supprimer les volumes anonymes inutilisés |
sudo journalctl -u docker -n 50 | Journaux du démon |
docker info | Configuration du démon (pilotes, sécurité, plages réseau) |
Les réflexes de sécurité
| Réflexe | Où |
|---|---|
Étiquette précise, jamais latest | FROM, image: |
| Utilisateur sans privilège | USER dans le Dockerfile, user: dans Compose |
| Aucun secret dans l'image ni dans Git | .dockerignore, secrets Compose |
| Un seul port publié : celui du reverse proxy | ports: |
| Base sur un réseau interne | internal: true |
Jamais privileged, jamais le socket dans un conteneur exposé | Revue de chaque compose.yaml |
| Limites de mémoire et de processus | deploy.resources.limits, pids_limit |
| Images analysées et reconstruites régulièrement | Trivy ou Docker Scout dans la CI |
| Rotation et centralisation des journaux | daemon.json, srv-journaux |