Introduction à Docker Compose
Docker Compose est l'outil standard pour définir et gérer des applications multi-containers. Depuis Docker 23, Compose v2 est intégré directement comme plugin Docker (docker compose sans tiret). Le format v2 du fichier Compose est la norme actuelle.
Structure d'un fichier Compose
# compose.yml (ou docker-compose.yml, les deux sont reconnus)
services:
web:
image: nginx:1.27-alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
depends_on:
api:
condition: service_healthy
api:
build:
context: .
dockerfile: Dockerfile
environment:
DB_HOST: db
DB_PORT: 5432
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 3
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: app
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:Commandes essentielles
# Démarrer tous les services (en arrière-plan)
docker compose up -d
# Reconstruire les images avant de démarrer
docker compose up -d --build
# Voir l'état des services
docker compose ps
# Logs de tous les services
docker compose logs -f
# Logs d'un service spécifique
docker compose logs -f api
# Exécuter une commande dans un service
docker compose exec api bash
# Arrêter sans supprimer
docker compose stop
# Arrêter et supprimer containers + réseaux
docker compose down
# Arrêter et supprimer volumes aussi
docker compose down -v
# Scaler un service (sans Swarm)
docker compose up -d --scale api=3Variables et .env
# .env (automatiquement chargé par Compose)
POSTGRES_VERSION=16-alpine
APP_PORT=8080
DOMAIN=exemple.frservices:
db:
image: postgres:${POSTGRES_VERSION}
web:
ports:
- "${APP_PORT}:80"# Vérifier l'interpolation
docker compose config
# Utiliser un fichier .env différent
docker compose --env-file .env.staging up -dBuild depuis Compose
# Construire toutes les images
docker compose build
# Construire un service spécifique avec no-cache
docker compose build --no-cache api
# Build + push vers le registry
docker compose build
docker compose push