Docker Compose
Section INF (All)
Docker
Compose
Comprendre la structure d’un fichier Compose
Connaître les éléments top level
Savoir définir des services et leurs dépendances
Découvrir les bonnes pratiques et commandes clés
Qu’est-ce que Docker Compose ?
Un outil pour déclarer et piloter une stack
multi-conteneurs avec un seul fichier.
Fichier de configuration YAML lisible et
versionnable.
5 éléments top level principaux:
services
networks
volumes
secrets
configs
Que signifie top level dans un
YAML ?
L’indentation définit la hiérarchie.
Un top level est un élément sans indentation.
Exemple:
services: # top level
web: # 2e niveau
image: nginx
volumes: # top level
networks: # top level
Champs fréquents dans services.<nom>:
volumes
networks
depends_on
Exemple minimal:
services:
web:
image: nginx:1.27
ports:
- "8080:80"
Définir une image via Dockerfile
services:
api:
build:
context: .
dockerfile: Dockerfile
args:
APP_ENV: dev
environment:
- APP_ENV=dev
Bind mount: monte un dossier hôte tel quel.
services:
web:
volumes:
- ./site:/usr/share/nginx/html:ro
Named volume: stocke des données Docker gérées par
le daemon.
services:
db:
image: postgres:15
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:
services:
web:
image: nginx
networks: [frontnet]
api:
image: myapi
networks: [frontnet, backnet]
db:
image: postgres:15
networks: [backnet]
networks:
frontnet:
backnet:
driver: bridge
internal: true
ipam:
config:
- subnet: 192.168.17.0/24
Dépendances et ordre de démarrage
depends_on gère l’ordre de lancement,
pas la disponibilité.
services:
app:
depends_on:
- db
Attendre que le service soit healthy:
services:
app:
depends_on:
db:
condition: service_healthy
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 2s
retries: 10
But: donner un signal healthy à l’orchestrateur.
services:
web:
image: nginx:1.27
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1"]
interval: 10s
timeout: 2s
retries: 3
Local Compose: - secrets et configs montés
depuis des fichiers.
Swarm: - intégration native avec gestionnaire de secrets.
services:
app:
image: myapp
secrets:
- api_key
secrets:
api_key:
file: ./secrets/api_key.txt
Expansion des variables dans le YAML:
services:
api:
image: myapi:${API_TAG:-latest}
environment:
- API_URL=${API_URL}
Fichier .env au même répertoire que le compose.
Ordre de résolution: 1. Variables du shell 2. .env 3.
Valeur par défaut :-
Que signifie external ?
services:
web:
image: nginx
networks:
- frontnet
networks:
frontnet:
external: true
name: my-existing-network
external permet de lier le docker compose à une
ressource déjà existante.
docker compose up -d # créer et démarrer
docker compose down -v # arrêter et supprimer tout
docker compose ps # état des services
docker compose logs -f web # suivre les logs
docker compose restart api # redémarrer un service
docker compose build --no-cache # rebuilder
Exemple complet: web + api + db