Docker Compose CLI — cours synthétique
1. À quoi sert Docker Compose ?
Docker Compose permet de définir et de gérer une application composée de plusieurs conteneurs à partir d'un fichier docker-compose.yaml.
Exemple d'architecture :
┌─────────────┐
│ frontend │
└──────┬──────┘
│
┌──────▼──────┐
│ backend │
└──────┬──────┘
│
┌──────▼──────┐
│ PostgreSQL │
└─────────────┘
Exemple de docker-compose.yaml :
services:
frontend:
image: nginx
backend:
image: my-api
database:
image: postgres
Puis :
docker compose up
Idée clé : Docker compose orchestre plusieurs conteneurs qui appartiennent à une même application.
2. Le fichier docker-compose
Exemple réaliste :
services:
app:
image: nginx:alpine
ports:
- "8080:80"
db:
image: postgres:16
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Structure principale :
services:
service1:
...
service2:
...
volumes:
...
Chaque entrée sous services représente un conteneur.
3. Démarrer l'application
Premier plan
docker compose up
Compose :
- lit
docker-compose - crée les réseaux
- crée les volumes
- crée les conteneurs
- démarre les services
- affiche les logs
Pour lancer en arrière-plan :
docker compose up -d
-d signifie detached.
C'est généralement la commande utilisée sur un serveur.
4. Arrêter l'application
docker compose down
Cela supprime :
- les conteneurs
- les réseaux créés par Compose
Mais pas les volumes par défaut.
Les données PostgreSQL du volume restent donc présentes.
Supprimer également les volumes
docker compose down -v
⚠️ À utiliser avec précaution : cela peut supprimer les données persistantes.
5. Voir les conteneurs
docker compose ps
Exemple :
NAME IMAGE STATUS
myapp-app-1 nginx:alpine Up
myapp-db-1 postgres:16 Up
Pour voir également les conteneurs arrêtés :
docker compose ps -a
6. Consulter les logs
Tous les services :
docker compose logs
Suivre les logs en temps réel :
docker compose logs -f
Logs d'un service précis :
docker compose logs app
docker compose logs db
Dernières lignes :
docker compose logs --tail=100 app
Très pratique :
docker compose logs -f --tail=100 app
Réflexe debugging :
docker compose logs -f <service>.
7. Redémarrer un service
docker compose restart app
Ou tous les services :
docker compose restart
8. Arrêter / démarrer sans supprimer
Arrêter :
docker compose stop
Redémarrer :
docker compose start
Différence importante :
stop
│
└── arrête les conteneurs
down
│
└── arrête ET supprime les conteneurs/réseaux
Donc :
docker compose stop
docker compose start
conserve les conteneurs.
9. Exécuter une commande dans un conteneur
Une des commandes les plus importantes :
docker compose exec app bash
Tu obtiens un shell dans le conteneur.
Si bash n'existe pas, notamment avec Alpine :
docker compose exec app sh
Exécuter directement une commande :
docker compose exec app ls
docker compose exec db psql -U admin -d myapp
Différence avec docker exec
Avec Docker classique :
docker exec -it mycontainer bash
Avec Compose :
docker compose exec app bash
Compose retrouve automatiquement le bon conteneur à partir du nom du service.
10. Lancer un nouveau conteneur temporaire
Commande très utile :
docker compose run app bash
Contrairement à exec, run crée un nouveau conteneur basé sur le service.
À retenir
docker compose exec app bash
→ entre dans le conteneur existant.
docker compose run app bash
→ crée un conteneur temporaire.
11. Construire les images
Si ton docker-compose contient :
services:
app:
build: .
Tu peux construire l'image avec :
docker compose build
Pour un service :
docker compose build app
Forcer une reconstruction :
docker compose build --no-cache
12. Reconstruire et redémarrer
Très courant pendant le développement :
docker compose up -d --build
Cela signifie essentiellement :
build
↓
créer les nouvelles images
↓
up
↓
démarrer les services
C'est souvent la commande à utiliser après modification du Dockerfile.
13. Télécharger les images
docker compose pull
Télécharge les nouvelles versions des images définies dans le Compose.
Par exemple :
docker compose pull
docker compose up -d
14. Voir la configuration réellement interprétée
Très utile pour comprendre les problèmes de YAML, variables, overrides, etc.
docker compose config
Compose affiche la configuration finale.
Tu peux notamment vérifier :
- les variables
- les volumes
- les ports
- les réseaux
- les services
- les fichiers Compose fusionnés
15. Variables d'environnement
On peut écrire :
services:
app:
image: myapp:${TAG}
Puis :
TAG=1.2.0 docker compose up -d
Ou utiliser un fichier .env :
TAG=1.2.0
POSTGRES_PASSWORD=secret
Puis :
services:
app:
image: myapp:${TAG}
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
Et simplement :
docker compose up -d
16. Choisir un fichier Compose
Par défaut :
docker compose up
cherche notamment un fichier Compose dans le répertoire courant.
Tu peux spécifier un fichier :
docker compose -f compose.prod.yaml up -d
Plusieurs fichiers peuvent être combinés :
docker compose \
-f docker-compose \
-f docker-compose.prod.yaml \
up -d
Cela permet par exemple d'avoir :
docker-compose
docker-compose.dev.yaml
docker-compose.prod.yaml
17. Utiliser un projet Compose différent
Compose crée un nom de projet permettant d'isoler les ressources.
Tu peux le définir avec :
docker compose -p monprojet up -d
Par exemple :
docker compose -p dev up -d
docker compose -p prod up -d
Même si les deux utilisent le même docker-composeyaml, leurs ressources sont séparées.
18. Voir les images
docker compose images
19. Voir les processus
docker compose top
Permet de voir les processus exécutés dans les conteneurs.
20. Supprimer les conteneurs orphelins
Si tu as supprimé un service du docker-composeyaml, son ancien conteneur peut rester présent.
docker compose up -d --remove-orphans
21. Les commandes essentielles à mémoriser
| Commande | Rôle |
|---|---|
docker compose up -d |
Démarrer l'application |
docker compose down |
Arrêter + supprimer les conteneurs |
docker compose ps |
Voir l'état |
docker compose logs -f |
Suivre les logs |
docker compose exec <service> sh |
Entrer dans un conteneur |
docker compose restart |
Redémarrer |
docker compose stop |
Arrêter sans supprimer |
docker compose start |
Redémarrer les conteneurs arrêtés |
docker compose build |
Construire les images |
docker compose up -d --build |
Rebuild + démarrer |
docker compose pull |
Télécharger les nouvelles images |
docker compose config |
Voir la configuration finale |
docker compose down -v |
Supprimer aussi les volumes |
22. Le cycle de travail typique
Première installation
git clone ...
cd mon-projet
docker compose up -d
Vérifier :
docker compose ps
Voir les logs :
docker compose logs -f
Modification du Dockerfile
docker compose up -d --build
Problème avec l'application
docker compose ps
docker compose logs -f app
Puis :
docker compose exec app sh
Arrêt temporaire
docker compose stop
Puis :
docker compose start
Reset de l'environnement
docker compose down
docker compose up -d --build
Reset complet, données comprises :
docker compose down -v
docker compose up -d --build
⚠️
-v= attention aux données.
23. docker compose vs docker
Il faut bien comprendre la relation :
Docker
│
├── docker run
├── docker build
├── docker exec
├── docker logs
│
└── Docker Compose
├── docker compose up
├── docker compose down
├── docker compose exec
└── docker compose logs
Docker CLI manipule principalement des conteneurs/images individuellement.
Docker Compose manipule une application multi-conteneurs décrite comme un ensemble.
Par exemple, sans Compose :
docker run -d --name db postgres
docker run -d --name redis redis
docker run -d --name app myapp
Avec Compose :
docker compose up -d
C'est précisément l'intérêt de Compose.
24. Le modèle mental à retenir
Pense à Compose comme à une application déclarative :
docker-composeyaml
│
▼
docker compose up
│
├── réseau
├── volumes
├── conteneur app
├── conteneur db
└── conteneur redis
Les commandes principales correspondent à :
up → créer + démarrer
down → arrêter + supprimer
stop → arrêter
start → démarrer
restart → redémarrer
build → construire
pull → télécharger
logs → observer
exec → entrer/exécuter
config → inspecter
🧠 La règle des 5 commandes
Pour 80 % de l'utilisation quotidienne :
docker compose up -d
docker compose ps
docker compose logs -f
docker compose exec <service> sh
docker compose down
Et pour le développement :
docker compose up -d --build
C'est probablement la commande Compose la plus utile à connaître après up -d.