Gerer des conteneurs Docker individuels avec de longues commandes docker run devient rapidement impraticable lorsque votre application necessite plusieurs services interconnectes. Docker Compose resout ce probleme en vous permettant de definir et gerer des applications multi-conteneurs a l’aide d’un seul fichier YAML declaratif. Pour les administrateurs systeme, Docker Compose est un outil indispensable qui comble le fosse entre la gestion manuelle des conteneurs et les plateformes d’orchestration completes comme Kubernetes.
Ce guide couvre tout ce que vous devez savoir pour utiliser Docker Compose efficacement dans des scenarios reels, depuis la syntaxe YAML jusqu’au deploiement de piles pretes pour la production avec des health checks, des limites de ressources et des politiques de redemarrage appropriees.
Prerequis
- Docker Engine installe sur votre systeme. Si ce n’est pas encore fait, suivez notre guide : Comment Installer Docker sur Ubuntu 22.04 et 24.04
- Comprehension de base des concepts Docker (images, conteneurs, volumes, reseaux)
- Un editeur de texte et un acces terminal avec des privileges sudo
Qu’est-ce que Docker Compose ?
Docker Compose est un outil pour definir et executer des applications Docker multi-conteneurs. Au lieu d’executer plusieurs commandes docker run avec des flags complexes, vous decrivez toute la pile de votre application dans un fichier docker-compose.yml et demarrez tout avec une seule commande.
Compose V2 vs. V1
| Caracteristique | Compose V1 (Heritage) | Compose V2 (Actuel) |
|---|---|---|
| Commande | docker-compose (binaire separe) | docker compose (plugin CLI) |
| Langage | Python | Go |
| Performance | Demarrage plus lent | Significativement plus rapide |
| Installation | Installation separee requise | Inclus avec Docker Engine |
| Statut | Obsolete (EOL Juin 2023) | Developpement actif |
Structure d’un Fichier docker-compose.yml
services:
web:
image: nginx:latest
ports:
- "80:80"
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: motdepassesecret
networks:
# Reseaux personnalises (optionnel)
volumes:
# Volumes nommes (optionnel)
Variables d’Environnement et Fichiers .env
Creer un fichier .env dans le meme repertoire :
# .env
MYSQL_ROOT_PASSWORD=motdepassetressecret
MYSQL_DATABASE=monapplication
NGINX_PORT=8080
Conseil de Securite : Ajoutez toujours les fichiers
.enva votre.gitignorepour eviter de committer des secrets dans le controle de version.
Commandes Docker Compose Courantes
# Demarrer tous les services en arriere-plan
docker compose up -d
# Demarrer et forcer la reconstruction des images
docker compose up -d --build
# Arreter tous les services
docker compose down
# Voir les logs de tous les services
docker compose logs
# Suivre les logs d'un service specifique
docker compose logs -f nginx
# Redemarrer un service specifique
docker compose restart php
# Executer une commande dans un conteneur en cours d'execution
docker compose exec mysql mysql -u root -p
Considerations pour la Production
Politiques de Redemarrage
services:
web:
restart: unless-stopped
Health Checks
services:
api:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Limites de Ressources
services:
worker:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
Meilleures Pratiques de Securite
- N’executez jamais les conteneurs en tant que root sauf si absolument necessaire
- Definissez
read_only: truesur les conteneurs qui n’ont pas besoin d’ecrire - Supprimez les capacites Linux inutiles avec
cap_drop: [ALL] - Utilisez la gestion des secrets pour les donnees sensibles
Conclusion
Docker Compose transforme la facon dont les administrateurs systeme deploient et gerent les applications multi-conteneurs. En definissant votre infrastructure dans un fichier YAML declaratif, vous gagnez en reproductibilite, controle de version et un flux de deploiement en une seule commande. Les exemples et bonnes pratiques couverts dans ce guide devraient vous donner une base solide pour deployer des piles allant de simples applications web a des solutions de surveillance completes.