Introduction
Docker Compose est devenu l'outil incontournable pour orchestrer des applications multi-conteneurs. En 2026, les exigences de production imposent une maîtrise avancée des réseaux overlay, de la gestion des secrets et du scaling dynamique. Ce tutoriel vous guide pas à pas dans la construction d'une architecture robuste et sécurisée. Vous apprendrez à structurer des fichiers Compose complexes, à intégrer des healthchecks intelligents et à optimiser les performances. Chaque exemple est directement applicable en environnement réel.
Prérequis
- Docker Engine 26+ et Docker Compose v2.30+
- Connaissances solides en réseaux et volumes Docker
- Expérience avec des environnements de production
- Accès à un terminal Linux ou WSL2
Structure du projet et docker-compose.yml principal
version: '3.9'
services:
api:
build:
context: ./api
dockerfile: Dockerfile
environment:
- NODE_ENV=production
networks:
- backend
- frontend
secrets:
- db_password
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
backend:
driver: overlay
frontend:
driver: bridge
secrets:
db_password:
file: ./secrets/db_password.txtCe fichier définit une architecture multi-réseaux avec scaling et healthchecks. Le réseau overlay permet une communication sécurisée entre services distribués.
Dockerfile optimisé pour l'API
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]Utilisation d'un build multi-stage pour réduire la taille de l'image finale et améliorer la sécurité en exécutant le processus en tant qu'utilisateur non-root.
Configuration des réseaux overlay avancés
networks:
backend:
driver: overlay
attachable: true
ipam:
config:
- subnet: 172.20.0.0/16
monitoring:
driver: overlay
internal: trueLes réseaux overlay avec IPAM personnalisé assurent un routage prévisible et isolent les services de monitoring du trafic externe.
Gestion avancée des volumes et persistance
volumes:
postgres_data:
driver: local
driver_opts:
type: none
o: bind
device: /opt/data/postgres
services:
db:
image: postgres:16
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_passwordLes volumes bind-mount avec driver local offrent un contrôle total sur l'emplacement des données et facilitent les sauvegardes en production.
Intégration des secrets et variables d'environnement
secrets:
db_password:
external: true
api_key:
file: ./secrets/api_key.txt
services:
api:
secrets:
- source: db_password
target: /run/secrets/db_password
mode: 0400Les secrets externes et les permissions strictes (0400) protègent les informations sensibles contre les accès non autorisés dans les conteneurs.
Bonnes pratiques
- Toujours utiliser des healthchecks et des limites de ressources
- Préférer les réseaux overlay pour les environnements swarm
- Externaliser les secrets et ne jamais les versionner
- Utiliser des builds multi-stage pour minimiser la surface d'attaque
- Versionner les fichiers Compose et documenter les dépendances
Erreurs courantes à éviter
- Oublier de déclarer les réseaux overlay avant le déploiement swarm
- Utiliser des variables d'environnement pour les mots de passe en production
- Ignorer les healthchecks ce qui entraîne des redémarrages infinis
- Ne pas limiter les ressources CPU/mémoire entraînant des OOM kills
Pour aller plus loin
Découvrez nos formations avancées sur l'orchestration Docker et Kubernetes : https://learni-group.com/formations