Docker Compose : services, réseaux, volumes pour applications multi‑conteneurs
Docker Compose est un outil qui permet de définir et d’exécuter des applications Docker multi‑conteneurs avec un seul fichier YAML. Il simplifie la gestion des dépendances, des réseaux, des volumes et des variables d’environnement. Découvrez comment l’utiliser avec ISOSET, l’institut qui forme aux architectures conteneurisées modernes.
Docker Compose permet de décrire l’ensemble des services d’une application (web, base de données, cache, queue, etc.) dans un fichier `docker-compose.yml`. Une seule commande (`docker compose up`) lance tous les conteneurs avec leurs réseaux, volumes et dépendances. Compose est idéal pour les environnements de développement, les tests et les petites architectures de production. ISOSET forme à l’utilisation avancée de Compose dans des projets concrets.
- Services – chaque conteneur est un service (ex: web, db, redis).
- Réseaux – communication isolée entre services.
- Volumes – persistance des données.
- Variables d’environnement – configuration externalisée.
Le fichier Compose utilise le format YAML. Les versions récentes (3.x) sont compatibles avec Docker Engine et Swarm. Voici les éléments fondamentaux :
- version – spécifie la version du schéma Compose (ex: ‘3.8’).
- services – liste des conteneurs (web, api, db).
- networks – définit des réseaux personnalisés.
- volumes – déclare des volumes nommés.
# docker-compose.yml minimal
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
ISOSET aide les entreprises à structurer leurs fichiers Compose pour des stacks robustes et maintenables.
Par défaut, Compose crée un réseau unique pour l’application. Les services peuvent communiquer entre eux par leur nom de service. On peut aussi définir des réseaux personnalisés pour isoler certains conteneurs.
- Réseau par défaut – accessible via `monapp_default`.
- Réseau personnalisé – permet de séparer frontend et backend, par exemple.
- Attacher un service à plusieurs réseaux – pour des passerelles.
# Configuration de réseaux
networks:
frontend:
backend:
services:
web:
networks:
- frontend
api:
networks:
- frontend
- backend
db:
networks:
- backend
Les conteneurs sont éphémères. Pour conserver les données (bases de données, fichiers uploadés), on utilise des volumes. Compose permet de déclarer des volumes nommés et de les monter dans les services.
- Volume nommé – géré par Docker, persistant entre les redémarrages.
- Bind mount – répertoire local (pratique pour le développement).
# Volumes nommés pour PostgreSQL
version: '3.8'
services:
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
ISOSET enseigne les bonnes pratiques de gestion des volumes en développement et production.
Compose supporte les variables d’environnement pour paramétrer les services sans coder en dur. On peut utiliser un fichier `.env` à côté du `docker-compose.yml` ou définir directement dans le fichier avec `environment`.
- Fichier .env – variables automatiquement chargées par Compose.
- environment – définitions explicites dans le YAML.
- env_file – charger un fichier externe (ex: `.env.prod`).
# .env (exemple) DB_PASSWORD=supersecret DB_USER=admin # docker-compose.yml services: db: image: postgres:15 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USER}
ISOSET forme à la gestion sécurisée des secrets avec .env et les outils d’orchestration.
`depends_on` exprime une dépendance de démarrage (la base de données démarre avant l’application), mais ne garantit pas que la base soit prête (ready). Pour cela, on combine avec `healthcheck` pour s’assurer que le service est opérationnel.
- depends_on – ordre de démarrage simple.
- healthcheck – commande pour tester l’état du service.
- condition – `service_healthy` pour attendre la santé.
# Dépendance avec healthcheck
services:
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
app:
build: .
depends_on:
db:
condition: service_healthy
Les profils permettent de ne démarrer qu’un sous‑ensemble de services selon l’environnement. Par exemple, activer un service de debug ou d’administration uniquement en développement.
# Services avec profils
services:
app:
image: mon-app
adminer:
image: adminer
profiles: ["dev"]
cadvisor:
image: google/cadvisor
profiles: ["monitoring"]
Pour démarrer avec un profil : `docker compose –profile dev up`.
- docker compose up – démarre tous les services (ou ceux spécifiés).
- docker compose down – arrête et supprime les conteneurs, réseaux (volumes optionnel avec `-v`).
- docker compose logs – affiche les logs de tous les services.
- docker compose exec – exécute une commande dans un conteneur en cours.
- docker compose build – reconstruit les images sans redémarrer.
- docker compose ps – liste l’état des services.
# Commandes courantes
docker compose up -d # mode détaché
docker compose logs -f web # suivi des logs du service web
docker compose exec db psql -U postgres
docker compose down -v # supprime aussi les volumes
ISOSET forme aux commandes et aux workflows Compose pour une productivité maximale.
- Versionner le fichier Compose – toujours utiliser une version récente et stable.
- Ne pas exposer de ports inutiles – exposer seulement les services nécessaires à l’extérieur.
- Utiliser des images officielles – préférer `postgres:15-alpine` plutôt que `postgres:latest`.
- Séparer les environnements – un fichier `docker-compose.override.yml` pour le développement, un fichier de base pour la production.
- Définir des ressources limites – `deploy.resources.limits` pour la production.
📘 La méthode ISOSET : des Compose files professionnels
ISOSET apprend à structurer des fichiers Compose réutilisables, testables et sécurisés.
# docker-compose.yml complet
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- api
api:
build: ./api
environment:
- DB_URL=postgresql://user:pass@db:5432/app
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
db:
image: postgres:15-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
redis:
image: redis:alpine
volumes:
pgdata:
Les témoignages d’anciens élèves d’ISOSET confirment l’efficacité de la formation : *« Docker Compose a transformé mon workflow de développement. Je lance toute ma stack (API, base, cache) en une commande. La formation m’a appris les bonnes pratiques pour passer en production. »*
🚀 ISOSET : maîtrisez Docker Compose pour vos projets
L’institut ISOSET propose des formations complètes sur Docker Compose : services, réseaux, volumes, variables d’environnement, profils, intégration CI/CD. Avec des ateliers pratiques et des formateurs experts, vous saurez orchestrer des applications multi‑conteneurs comme un professionnel.
👉 Découvrez les formations ISOSET en Docker Compose – simplifiez vos architectures.