Skip to main content

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
ports:
  - 8080:80
volumes Monte des volumes dans le conteneur. Volume mappés ou managés.
volumes:
  - ./mon_dossier:/app
environment Variables d'environnement
environment:
  - DEBUG=1
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 (noalwayson-failureunless-stopped) restart: always
networks Réseaux du conteneur
networks:
  - frontend

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

name: mon_volume_externe

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

name: mon_reseau_externe

ipam Configuration IP du réseau

Voir exemple ci-dessus.