DOCKER COMPOSE — MULTI-CONTAINER ARCHITECTURE docker-compose network nginx Web Server port: 80:80 port: 443:443 app Application port: 3000 depends_on: db db PostgreSQL port: 5432 volume: pgdata redis Cache port: 6379 volume: redis docker-compose.yml defines all services, networks, and volumes in one file

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

CaracteristiqueCompose V1 (Heritage)Compose V2 (Actuel)
Commandedocker-compose (binaire separe)docker compose (plugin CLI)
LangagePythonGo
PerformanceDemarrage plus lentSignificativement plus rapide
InstallationInstallation separee requiseInclus avec Docker Engine
StatutObsolete (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 .env a votre .gitignore pour 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: true sur 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.