Maintenant que nous savons pourquoi Docker Compose est utile, il est important d’apprendre à organiser notre projet correctement.
Une bonne structure permet de :
- Comprendre rapidement votre stack
- Faciliter la maintenance
- Partager ou versionner le projet sans casse-tête
La structure recommandée
Voici une structure classique et fonctionnelle pour un projet Docker Compose :
mon-projet/
├─ docker-compose.yml # Décrit tous les services
├─ .env # Variables d’environnement (ports, mots de passe, etc.)
├─ app/ # Code de l’application (site web, API, scripts)
│ ├─ index.php
│ └─ ...
├─ data/ # Données persistantes (bases de données, uploads)
│ └─ mariadb/
├─ conf/ # Fichiers de configuration (php.ini, nginx.conf, Traefik, etc.)
│ └─ ...
└─ logs/ # Journaux d’activité si besoin
Description des dossiers
| Dossier | Contenu & rôle |
|---|---|
| app/ | Contient tout le code de l’application. Avec un bind mount, Docker peut accéder directement à votre code depuis le conteneur. |
| data/ | Contient les volumes persistants pour les bases de données ou fichiers générés par l’application. Exemple : ./data/mariadb:/var/lib/mysql. |
| conf/ | Contient les fichiers de configuration spécifiques à vos services. Exemple : nginx.conf, php.ini, traefik.yml. |
| logs/ | Optionnel, pour centraliser les journaux si vous ne voulez pas les stocker directement dans les conteneurs. |
| docker-compose.yml | Décrit vos services et leur interaction. C’est le cœur de la stack. |
| .env | Contient toutes vos variables sensibles ou paramétrables. Permet de changer la configuration sans toucher au YAML. |
Bonnes pratiques
- Séparer le code, la configuration et les données : cela simplifie les backups et mises à jour.
- Toujours utiliser un
.envpour éviter de coder les mots de passe dans le YAML. - Nommer vos dossiers et services clairement :
app,db,cachesont préférables àservice1,service2. - Ne jamais stocker les données importantes uniquement dans le conteneur : les conteneurs peuvent disparaître. Utilisez des volumes.
- Versionner votre projet (Git) en excluant les dossiers de données volumineuses (
/data) avec.gitignore.
📌 À retenir
- Un projet Docker Compose doit être propre, lisible et maintenable.
- /app pour le code, /data pour les données persistantes, /conf pour les configs.
.envpour la configuration dynamique.- Cette organisation vous prépare à gérer des projets plus complexes et à collaborer avec d’autres développeurs.