Docker Compose pour les administrateurs système en 2026 : De zéro à la production
Maîtrisez Docker Compose en 2026 : de votre premier fichier YAML aux environnements de production avec Traefik, contrôles d’intégrité, gestion des ressources et sauvegardes automatisées. Un guide complet pour administrateurs système.
Docker Compose est l'un des outils les plus puissants à la disposition d'un administrateur système. En 2026, gérer des applications multi-conteneurs sans lui sera pratiquement impensable. Que vous gériez un petit laboratoire personnel ou une infrastructure de production, Docker Compose rationalise le déploiement, simplifie la configuration et apporte de la clarté à l'orchestration complexe des services.
Dans ce guide, nous vous accompagnerons de zéro jusqu'à une configuration Docker Compose prête pour la production, en couvrant tout, de l'installation aux modèles avancés utilisés par les administrateurs système professionnels.
Qu'est-ce que Docker Compose et pourquoi devriez-vous vous en soucier ?
Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Au lieu de démarrer manuellement les conteneurs avec de longues commandes, vous décrivez l'ensemble de votre pile dans un seul fichier YAML et la lancez avec une seule commande.
En 2026, Docker Compose v2 (désormais intégré directement à l'interface de ligne de commande Docker sous le nom docker compose) est la norme. Il prend en charge toutes les fonctionnalités modernes de Docker, notamment BuildKit, les profils, les secrets et les contrôles d'intégrité.
Installation et prérequis
Docker Compose v2 est fourni avec Docker Desktop et le moteur Docker sous Linux. Pour vérifier votre configuration :
# Check Docker version
docker --version
# Docker version 26.1.0, build 9e34c9bb
# Check Compose version (v2 syntax)
docker compose version
# Docker Compose version v2.27.0Sur un serveur Linux neuf (RHEL/AlmaLinux 9), installez Docker Engine :
# Add Docker repo
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# Install Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
# Enable and start
sudo systemctl enable --now docker
# Add your user to docker group
sudo usermod -aG docker $USER
newgrp dockerVotre premier fichier docker-compose.yml
Commençons par un exemple concret : une pile WordPress + MariaDB + phpMyAdmin. Créez un répertoire de projet et rédigez votre fichier Compose :
mkdir ~/wordpress-stack
cd ~/wordpress-stack
cat > docker-compose.yml << 'COMPOSE_EOF'
version: '3.9'
services:
db:
image: mariadb:11.2
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
wordpress:
image: wordpress:6.5-php8.3-apache
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
volumes:
- wp_data:/var/www/html
ports:
- "8080:80"
volumes:
db_data:
wp_data:
COMPOSE_EOFUtilisation des fichiers .env pour les secrets
Ne jamais saisir en dur les mots de passe dans votre fichier de composition. Utilisez un fichier .env et ajoutez-le à .gitignore :
cat > .env << 'ENV_EOF'
DB_ROOT_PASSWORD=SuperSecretRootPass2026!
DB_PASSWORD=WPuserPass2026!
ENV_EOF
chmod 600 .env
echo ".env" >> .gitignoreCommandes essentielles de Docker Compose
Maîtrisez ces commandes et vous gérerez 95 % de vos tâches quotidiennes liées à Docker Compose :
# Start services in detached mode
docker compose up -d
# View running services and their status
docker compose ps
# View and follow logs
docker compose logs -f
# View logs for a specific service
docker compose logs -f wordpress
# Stop all services (volumes preserved)
docker compose stop
# Remove containers + networks (volumes preserved)
docker compose down
# Remove EVERYTHING including volumes (DESTRUCTIVE)
docker compose down -v
# Rebuild images before starting
docker compose up -d --build
# Execute a command in a running container
docker compose exec wordpress bash
# Pull latest images
docker compose pull
# Restart a specific service
docker compose restart wordpressModèles prêts pour la production
1. Contrôles de santé
Définissez systématiquement des contrôles d'intégrité pour garantir que les services démarrent dans le bon ordre et se rétablissent automatiquement en cas de panne :
services:
nginx:
image: nginx:1.26-alpine
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s2. Limites des ressources
Empêchez un seul conteneur de consommer toutes les ressources de votre serveur en définissant des limites de processeur et de mémoire :
services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M3. Profils des services spécifiques à l'environnement
Utilisez les profils pour activer les services uniquement dans des environnements spécifiques (développement, préproduction, production) :
services:
app:
image: myapp:latest
# Always started (no profile)
debug-tools:
image: busybox
profiles: ["debug"]
# Only with: docker compose --profile debug up
metrics:
image: prom/prometheus
profiles: ["monitoring"]
# Only with: docker compose --profile monitoring upProxy inverse avec Traefik v3
En production, la terminaison HTTPS est indispensable. Traefik v3 s'intègre nativement à Docker Compose via des étiquettes et fournit automatiquement des certificats Let's Encrypt.
version: '3.9'
services:
traefik:
image: traefik:v3.0
restart: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.le.acme.tlschallenge=true"
- "--certificatesresolvers.le.acme.email=admin@yourdomain.com"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_certs:/letsencrypt
app:
image: myapp:latest
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`app.yourdomain.com`)"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.routers.app.tls.certresolver=le"
volumes:
traefik_certs:Surveillance des conteneurs avec cAdvisor
Ajoutez cAdvisor pour exposer les métriques des conteneurs et l'intégrer à votre pile Prometheus/Grafana existante :
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.49.1
restart: unless-stopped
privileged: true
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8082:8080"
# Add to your Prometheus scrape config:
# - job_name: 'cadvisor'
# static_configs:
# - targets: ['YOUR_HOST:8082']Stratégie de sauvegarde de volume
Ne perdez plus jamais vos données. Voici un script de sauvegarde robuste pour les piles Docker Compose que vous pouvez exécuter via cron :
#!/bin/bash
# backup-compose.sh — Add to cron: 0 2 * * * /opt/scripts/backup-compose.sh
STACK_DIR="/opt/stacks/wordpress"
BACKUP_DIR="/opt/backups/docker"
DATE=$(date +%Y-%m-%d_%H%M)
mkdir -p "$BACKUP_DIR/$DATE"
cd "$STACK_DIR"
# Graceful stop
docker compose stop
# Backup each named volume
for vol in $(docker compose config --volumes); do
FULL_VOL="${PWD##*/}_${vol}"
docker run --rm -v "${FULL_VOL}:/data:ro" -v "$BACKUP_DIR/$DATE:/backup" alpine tar czf "/backup/${vol}.tar.gz" /data
echo "Backed up: $vol"
done
# Restart
docker compose start
# Retention: keep last 7 days
find "$BACKUP_DIR" -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
echo "Backup complete: $BACKUP_DIR/$DATE"Dépannage des problèmes courants
Voici les problèmes les plus courants liés à Docker Compose et leurs solutions :
- Conflit de ports : Exécutez
ss -tlnp | grep :PORTpour identifier le service en conflit, puis ajustez votre mappage de ports dans compose. - Le conteneur plante immédiatement : utilisez
docker compose logs SERVICEpour vérifier la raison de l’arrêt. Recherchez les erreurs d’autorisation ou les variables d’environnement manquantes. - Erreurs d'autorisation de volume : Ajoutez
user: "UID:GID"à votre définition de service ou utilisez un script de point d'entrée avecchown. - Conflit de sous-réseau : définissez une configuration IPAM personnalisée :
networks: default: ipam: config: - subnet: 172.28.0.0/16 - Le service ne démarrera pas dans l'ordre : Utilisez
depends_onaveccondition: service_healthyet assurez-vous que vos contrôles de santé sont corrects.
Conclusion
Docker Compose en 2026 est une solution mature, éprouvée et prête pour la production. Des projets personnels aux charges de travail d'entreprise, elle offre une approche claire et déclarative de la gestion des infrastructures de conteneurs. Les modèles présentés dans ce guide (contrôles d'intégrité, limites de ressources, profils, intégration de Traefik et sauvegardes automatisées) vous seront très utiles lors de déploiements en conditions réelles.
Une fois que vous maîtrisez Compose, vous pouvez explorer Docker Swarm pour le clustering multi-nœuds ou Kubernetes pour l'orchestration à grande échelle. Mais pour la grande majorité des cas d'utilisation en administration système, Docker Compose suffit amplement.