Syntaxe docker-compose.yml
Introduction
Docker Compose est une commande docker permettant de définir et de gérer des applications multi-conteneurs.
La commande utilise un fichier YAML (docker-compose.yml)
pour décrire les services, les réseaux, les volumes, et les dépendances entre les conteneurs.
Ci-dessous l'exemple d'un fichier docker-compose.yml
. Il s'agit d'un projet web avec une API Node.js, une base de données PostgreSQL, et un reverse proxy Nginx.
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web
web:
build: ./web
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: postgres
environment:
- POSTGRES_PASSWORD=secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
La "traduction" en ligne de commandes docker
ressemblerait à ceci :
# création du volume pour PostgreSQL
docker volume create pgdata
# création de l'image pour le serveur web
docker build -t web-image ./web
# lancement des conteneurs
docker run -d --name db -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data postgres
docker run -d --name web -e NODE_ENV=production web-image
docker run -d --name nginx --network frontnet -p 80:80 -v ./nginx.conf:/etc/nginx/nginx.conf nginx
Orchestration
L'orchestration d'une stack docker compose s'effectue avec la commande docker compose
.
docker-compose up # démarre les conteneurs
docker-compose down # arrête et supprime les conteneurs, réseaux et volumes
docker-compose build # construit les images des conteneurs
docker-compose logs # affiche les logs des conteneurs
Syntaxe
Services
La clé services
définit les conteneurs à lancer. Chaque service représente un conteneur Docker.
services:
web:
image: nginx:latest
Pour chaque service, les instructions suivantes sont disponibles.
Instruction | Description | Exemple |
---|---|---|
image |
Image de départ | image: ubuntu:24:04 |
container_name |
Nom du conteneur | container_name: mon_web |
ports |
Mappe les ports de la machine hôte vers le conteneur |
|
volumes |
Monte des volumes dans le conteneur. Volume mappés ou managés. |
|
environment |
Variables d'environnement |
|
command |
Commande au démarrage du conteneur | command: ["python", "app.py"] |
depends_on |
Ordre de création des conteneurs | depends_on: ["db"] |
restart |
Politique de redémarrage (no , always , on-failure , unless-stopped ) |
restart: always |
networks |
Réseaux du conteneur |
|
Volumes
La clé volumes
permet d'automatiser la création et le montage des volumes managés.
volumes:
db_data # volume sans paramètres spécifiques
external_volume:
external: true
name: mon_volume_externe
Instruction | Description | Exemple |
---|---|---|
external |
Indique si le volume a été créé en dehors de la stack docker compose. | external: true |
name |
Nom du volume, utile avec external |
|
Networks
La clé networks
définit les différents réseaux docker de la stack.
networks:
reseau1:
driver: bridge
reseau2:
driver: bridge
ipam:
config:
- subnet: "172.16.0.0/16"
reseau_externe:
external: true
name: mon_reseau_externe
Instruction | Description | Exemple |
---|---|---|
driver |
Type de réseau (bridge , host , etc.) |
driver: bridge |
external |
Indique si le réseau a été créé en dehors de la stack docker compose. | external: true |
name |
Nom du réseau, utile avec external |
|
ipam |
Configuration IP du réseau |
Voir exemple ci-dessus. |