Introduction
Docker Compose est un outil essentiel pour les développeurs souhaitant rationaliser la gestion des conteneurs et le déploiement des applications. Ce tutoriel complet explore les bases de Docker Compose, fournissant des informations pratiques sur la configuration, le déploiement et la gestion d'environnements multi-conteneurs complexes de manière efficace et systématique.
Notions de base de Docker Compose
Introduction à Docker Compose
Docker Compose est un outil puissant pour définir et exécuter des applications Docker multi-conteneurs. Il permet aux développeurs d'utiliser un fichier YAML pour configurer les services, les réseaux et les volumes d'application, simplifiant ainsi le processus d'orchestration et de gestion des conteneurs.
Concepts et architecture de base
graph TD
A[Docker Compose] --> B[Configuration des services]
A --> C[Gestion multi-conteneurs]
A --> D[Infrastructure déclarative]
| Concept clé | Description |
|---|---|
docker-compose.yml |
Fichier de configuration définissant les services, réseaux et volumes |
| Services | Conteneurs individuels qui composent une application |
| Volumes | Stockage de données persistant pour les conteneurs |
| Réseaux | Configurations de réseaux personnalisés pour la communication entre conteneurs |
Exemple pratique : Configuration d'une application web
Voici un exemple complet démontrant la configuration Docker Compose pour une application web typique :
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Décomposition du code
version: '3.8'spécifie le format du fichier Docker Compose- La section
servicesdéfinit deux conteneurs : le serveur web et la base de données - Le service
nginxmappe le port hôte 80 au port conteneur 80 - Le service
postgresconfigure une base de données avec un stockage de volume persistant
Installation et commandes de base
Pour installer Docker Compose sur Ubuntu 22.04 :
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Commandes Docker Compose clés :
docker compose up: Démarre tous les servicesdocker compose down: Arrête et supprime les conteneursdocker compose ps: Liste les services en cours d'exécutiondocker compose logs: Affiche les journaux des services
Configuration et Déploiement
Structure du fichier Docker Compose
La configuration Docker Compose repose sur un fichier YAML qui définit l'infrastructure complète de l'application. Le fichier standard est nommé docker-compose.yml et contient des définitions de services complètes.
graph TD
A[docker-compose.yml] --> B[Services]
A --> C[Réseaux]
A --> D[Volumes]
A --> E[Variables d'environnement]
Exemple détaillé de configuration de service
version: "3.8"
services:
backend:
image: python:3.9
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@database:5432/appdb
depends_on:
- database
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
postgres_data:
Paramètres de configuration
| Paramètre | Description | Exemple |
|---|---|---|
image |
Image de conteneur de base | nginx:latest |
build |
Configuration de construction d'image personnalisée | context: ./app |
ports |
Mappage de ports | "8080:80" |
volumes |
Stockage de données persistant | - ./data:/app/data |
environment |
Variables d'environnement du conteneur | DATABASE_HOST=localhost |
Stratégies de déploiement
graph LR
A[Développement local] --> B[Environnement de pré-production]
B --> C[Déploiement de production]
C --> D[Mise à l'échelle des services]
Commandes de déploiement
Flux de travail de déploiement typique sur Ubuntu 22.04 :
## Valider le fichier compose
docker compose config
## Construire les services
docker compose build
## Démarrer les services
docker compose up -d
## Vérifier les services en cours d'exécution
docker compose ps
## Afficher les journaux
docker compose logs backend
## Arrêter les services
docker compose down
Techniques de configuration avancées
services:
webserver:
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Stratégies Compose Avancées
Configuration multi-environnement
Docker Compose prend en charge la gestion sophistiquée des environnements grâce à plusieurs fichiers de configuration et à des mécanismes de substitution.
graph LR
A[Configuration de base] --> B[Substitution de développement]
A --> C[Substitution de production]
A --> D[Substitution de pré-production]
Configuration spécifique à l'environnement
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
Mise à l'échelle dynamique des services
## Mettre à l'échelle le service web à 3 instances
docker compose up -d --scale web=3
Configurations de réseau avancées
| Mode de réseau | Description | Cas d'utilisation |
|---|---|---|
| bridge | Réseau par défaut | Communication isolée entre conteneurs |
| host | Réseau hôte direct | Scénarios hautes performances |
| custom | Réseaux définis par l'utilisateur | Architectures de microservices complexes |
Exemple Compose prêt pour la production
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file: ./config.json
Stratégies de versionnement des conteneurs
## Taguer et pousser les images versionnées
docker build -t myapp:v1.0 .
docker compose push
Flux de travail de déploiement
graph TD
A[Construire les images] --> B[Exécuter les tests]
B --> C[Poussez vers le registre]
C --> D[Déployer les conteneurs]
D --> E[Surveiller les performances]
Commandes de sécurité et de conformité
## Analyser les services compose pour les vulnérabilités
docker compose config --resolve-env-vars
docker scan docker-compose.yml
Résumé
En maîtrisant Docker Compose, les développeurs peuvent simplifier l'orchestration des conteneurs, définir l'infrastructure en tant que code et créer des environnements applicatifs évolutifs et reproductibles. Ce tutoriel couvre les concepts fondamentaux, les stratégies de configuration et les techniques de mise en œuvre pratiques qui permettent un développement et un déploiement d'applications multi-conteneurs transparents dans différents scénarios d'infrastructure.



