--- title: Docker Compose description: Décrire et lancer une application composée de plusieurs services. --- ## Le problème résolu par Compose `docker run` lance un conteneur. Une application réelle utilise souvent plusieurs services : frontend, backend, base de données, stockage, serveur de mail et reverse proxy. Lancer chaque conteneur à la main, dans le bon ordre et avec les bons réseaux, ports et variables, devient vite ingérable. Docker Compose décrit toute la stack dans un fichier YAML déclaratif et la pilote avec une seule commande : ```bash docker compose -f docker-compose.dev.yml up docker compose -f docker-compose.dev.yml down ``` ## Anatomie d'un fichier Compose ```yaml services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: - CMD-SHELL - pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} backend: build: context: ./backend dockerfile: Dockerfile.dev depends_on: postgres: condition: service_healthy environment: POSTGRES_HOST: postgres networks: - app-network networks: app-network: driver: bridge volumes: postgres_data: ``` ## Les notions principales ### services Chaque clé représente un service. Il utilise soit `image:` pour récupérer une image existante, soit `build:` pour construire une image depuis un Dockerfile. ### depends_on et healthcheck `depends_on` organise le démarrage. Avec `condition: service_healthy`, le backend n'attend pas seulement que le conteneur PostgreSQL existe : il attend que la base soit prête à accepter des connexions. ### environment Les variables configurent le conteneur. La syntaxe `${VAR}` lit généralement la valeur depuis un fichier `.env`. ### networks et volumes Les réseaux et volumes sont déclarés une fois, puis associés aux services qui en ont besoin. ## Superposer plusieurs fichiers Un projet peut séparer les usages : | Fichier | Usage | | --- | --- | | `docker-compose.dev.yml` | Développement avec hot-reload et bind mounts | | `docker-compose.prod.yml` | Production avec images préconstruites et politique de redémarrage | | `docker-compose.local-e2e.yml` | Surcharge pour les tests e2e | Le second fichier surcharge le premier : ```bash docker compose \ -f docker-compose.prod.yml \ -f docker-compose.local-e2e.yml \ up ``` Le Dockerfile décrit comment construire une image. Le fichier Compose décrit comment lancer, configurer et relier plusieurs instances d'images.