Maintenant que nous avons une structure de projet propre (/app, /data, /conf) et que Docker Compose est installé, il est temps d’apprendre à traduire vos commandes docker run en services YAML.
L’objectif : passer de multiples commandes individuelles à un fichier descriptif unique qui décrit toute la stack.
Rappel : Exemple d’un docker run simple
Supposons que nous voulons lancer MariaDB :
docker run -d \
--name mariadb \
-e MYSQL_ROOT_PASSWORD=secret \
-v ./data/mariadb:/var/lib/mysql \
--network monprojet-network \
mariadb:10.11
Pour Apache/PHP :
docker run -d \
--name php-web \
-p 8080:80 \
-v ./app:/var/www/html \
--network monprojet-network \
php:8.2-apache
Vous imaginez rapidement que si vous avez 5 ou 6 conteneurs, ça devient compliqué.
Traduction en YAML Docker Compose
Voici comment les mêmes services se traduisent dans docker-compose.yml :
services:
mariadb:
image: mariadb:10.11
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} # récupéré depuis .env
volumes:
- ./data/mariadb:/var/lib/mysql
networks:
- monprojet-network
php-web:
image: php:8.2-apache
container_name: php-web
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
networks:
- monprojet-network
networks:
monprojet-network:
driver: bridge
Explications
| Élément YAML | Rôle |
|---|---|
services: | Déclare tous les conteneurs (services) de la stack. |
image: | L’image Docker à utiliser. |
container_name: | Nom du conteneur (optionnel mais pratique). |
environment: | Variables d’environnement (on peut utiliser .env). |
volumes: | Montage des dossiers locaux dans le conteneur. |
ports: | Mapping des ports hôte → conteneur. |
networks: | Définition des réseaux utilisés par le conteneur. |
networks: à la fin | Déclaration du réseau si nécessaire (bridge, overlay…). |
Astuce : la lecture du YAML se fait du haut vers le bas, et chaque indentation est critique. Deux espaces sont recommandés.
Points clés
docker-compose.ymlremplace toutes vos commandesdocker run.- L’utilisation de
.envpermet de ne pas coder les mots de passe ou ports en dur. - Le YAML est lisible et modifiable facilement, idéal pour versionner votre projet.
- Vous pouvez maintenant lancer la stack complète avec :
docker compose up -d
- Et tout arrêter avec :
docker compose down
📌 À retenir
- Docker Compose simplifie la gestion multi-conteneurs en YAML.
- Chaque
docker rundevient un service dans le YAML.- Les variables dynamiques passent dans
.env.- L’organisation des dossiers (
/app,/data,/conf) s’intègre naturellement au YAML.