Docker Compose
Pourquoi Docker Compose ?
Une vraie app est rarement un seul service. Tu as un backend, une base de données, un cache Redis,
un reverse proxy… Lancer chaque conteneur à la main avec docker run devient vite pénible.
Docker Compose te permet de définir et gérer plusieurs conteneurs dans un seul fichier YAML. Une commande pour tout démarrer, une commande pour tout arrêter.
La structure d'un compose.yaml
services:
app:
build: . # builder depuis le Dockerfile local
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- NODE_ENV=production
depends_on:
- db
volumes:
- ./uploads:/app/uploads
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
db-data:
Le nom du fichier recommandé depuis Docker Compose V2 est compose.yaml (sans tiret).
L'ancien nom docker-compose.yml est encore supporté pour la compatibilité.
Sur les systèmes récents, la commande est docker compose (avec espace, pas tiret).
Les commandes essentielles
# Démarrer tous les services en arrière-plan
docker compose up -d
# Voir les logs de tous les services
docker compose logs -f
# Logs d'un service spécifique
docker compose logs -f app
# Voir l'état des services
docker compose ps
# Redémarrer un seul service
docker compose restart app
# Rebuild et redémarrer après modification du Dockerfile
docker compose up -d --build app
# Arrêter tous les services (conteneurs conservés)
docker compose stop
# Arrêter ET supprimer les conteneurs
docker compose down
# Supprimer aussi les volumes (ATTENTION : perte de données)
docker compose down -v
Clés importantes du compose.yaml
image— utilise une image existante depuis un registrebuild— chemin vers un Dockerfile à builderports— mapping des ports (HOST:CONTENEUR)environment— variables d'environnement du conteneurvolumes— montages de fichiers/volumesdepends_on— ordre de démarrage des servicesnetworks— réseau(x) auquel appartient le servicerestart— politique de redémarrage (no, always, on-failure, unless-stopped)
depends_on garantit l'ordre de démarrage des conteneurs, pas que le service soit
réellement prêt. Si ton app démarre avant que postgres soit prêt à accepter des connexions,
ajoute une logique de retry dans ton code ou utilise healthcheck.
- Docker Compose = fichier YAML pour déclarer et gérer plusieurs conteneurs ensemble.
docker compose up -ddémarre tout.docker compose downarrête et supprime.- Chaque service dans
services:peut avoirimageoubuild, plus ports, volumes, environment. depends_oncontrôle l'ordre de démarrage (pas la disponibilité du service).- Tous les services d'un compose partagent le même réseau par défaut — ils se voient par leur nom de service.