1. Qu'est-ce que Docker Compose ?
Docker Compose permet de définir et gérer des applications multi-conteneurs avec un seul fichier YAML. Au lieu de lancer chaque conteneur manuellement avec docker run, vous déclarez toute votre stack dans docker-compose.yml.
# Sans Compose — 4 commandes manuelles
docker network create app-net
docker run -d --name db --network app-net -e POSTGRES_PASSWORD=secret postgres
docker run -d --name redis --network app-net redis:alpine
docker run -d --name api --network app-net -p 3000:3000 monapi
# Avec Compose — 1 commande
docker compose up -d
2. Structure du fichier docker-compose.yml
# docker-compose.yml
services:
api:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
networks:
- app-net
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- app-net
volumes:
pgdata:
networks:
app-net:
driver: bridge
3. Configuration des services
services:
webapp:
# Build depuis un Dockerfile
build:
context: ./app
dockerfile: Dockerfile.prod
args:
BUILD_ENV: production
# Ou utiliser une image existante
image: nginx:alpine
container_name: my-webapp
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
- static-files:/usr/share/nginx/html
environment:
NODE_ENV: production
env_file:
- .env
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
4. depends_on & healthcheck
services:
api:
depends_on:
db:
condition: service_healthy # attend que db soit healthy
image: monapi
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
5. Commandes Docker Compose
docker compose up # Démarrer (foreground)
docker compose up -d # Démarrer en arrière-plan
docker compose up --build # Rebuilder les images
docker compose down # Arrêter et supprimer
docker compose down -v # + supprimer les volumes
docker compose ps # Statut des services
docker compose logs # Logs de tous les services
docker compose logs -f api # Logs du service api
docker compose exec api bash # Shell dans le service
docker compose build # Construire les images
docker compose pull # Télécharger les images
docker compose restart api # Redémarrer un service
docker compose scale api=3 # Scaler à 3 instances
6. Profiles & Override
# Profiles — services optionnels
services:
app:
image: monapp
debug-tools:
image: busybox
profiles:
- debug
# Démarrer avec le profile debug
docker compose --profile debug up
# Override — docker-compose.override.yml (auto-merge)
# docker-compose.yml (base)
services:
api:
image: monapi:prod
# docker-compose.override.yml (dev, appliqué en plus)
services:
api:
image: monapi:dev
volumes:
- ./src:/app/src # hot reload