Builders Academy
Docker — Conteneurisation des Applications
3 of 3

Chapitre 2 · Leçon 1

Docker Compose

API + base de données + Redis en un seul fichier

Docker Compose permet de définir et lancer plusieurs conteneurs en un seul fichier docker-compose.yml. Il gère automatiquement les réseaux, les volumes et les dépendances entre services.

docker-compose.yml complet

docker-compose.yml

yaml
1version: '3.9'
2
3services:
4  # ─── Base de données ──────────────────────────────────
5  postgres:
6    image: postgres:16-alpine
7    container_name: usher_db
8    restart: unless-stopped
9    environment:
10      POSTGRES_DB: usher_platform
11      POSTGRES_USER: usher
12      POSTGRES_PASSWORD: ${DB_PASSWORD}
13    volumes:
14      - postgres_data:/var/lib/postgresql/data
15      - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
16    networks:
17      - backend
18    healthcheck:
19      test: ["CMD-SHELL", "pg_isready -U usher -d usher_platform"]
20      interval: 10s
21      timeout: 5s
22      retries: 5
23
24  # ─── Cache Redis ──────────────────────────────────────
25  redis:
26    image: redis:7-alpine
27    container_name: usher_redis
28    restart: unless-stopped
29    command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
30    volumes:
31      - redis_data:/data
32    networks:
33      - backend
34    healthcheck:
35      test: ["CMD", "redis-cli", "ping"]
36      interval: 10s
37
38  # ─── API Backend ──────────────────────────────────────
39  api:
40    build:
41      context: .
42      dockerfile: Dockerfile
43      target: runner          # stage multi-stage
44    container_name: usher_api
45    restart: unless-stopped
46    env_file: .env.production
47    environment:
48      DATABASE_URL: postgresql://usher:${DB_PASSWORD}@postgres:5432/usher_platform
49      REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
50      NODE_ENV: production
51    ports:
52      - "3000:3000"
53    depends_on:
54      postgres:
55        condition: service_healthy
56      redis:
57        condition: service_healthy
58    networks:
59      - backend
60      - frontend
61
62  # ─── Nginx Reverse Proxy ──────────────────────────────
63  nginx:
64    image: nginx:alpine
65    container_name: usher_nginx
66    restart: unless-stopped
67    ports:
68      - "80:80"
69      - "443:443"
70    volumes:
71      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
72      - /etc/letsencrypt:/etc/letsencrypt:ro
73    depends_on:
74      - api
75    networks:
76      - frontend
77
78volumes:
79  postgres_data:
80  redis_data:
81
82networks:
83  backend:     # réseau interne (db, redis, api)
84    internal: true
85  frontend:    # réseau exposé (nginx ↔ api)

Commandes Docker Compose essentielles

snippet.bash

bash
1# Démarrer tous les services
2docker compose up -d
3
4# Voir les logs de tous les services
5docker compose logs -f
6
7# Voir les logs d'un seul service
8docker compose logs -f api
9
10# Arrêter sans supprimer les données
11docker compose stop
12
13# Arrêter et supprimer les conteneurs
14docker compose down
15
16# Arrêter, supprimer conteneurs + volumes (reset complet)
17docker compose down -v
18
19# Rebuild une image après modification du code
20docker compose up -d --build api
21
22# Exécuter une commande dans un conteneur
23docker compose exec api sh
24docker compose exec api pnpm prisma migrate deploy
25docker compose exec postgres psql -U usher -d usher_platform

Docker — de dev à prod sans surprise

Docker garantit que l'application tourne exactement de la même façon en développement, en staging et en production. Docker Compose simplifie l'orchestration locale. Pour la prod, un VPS avec Docker Compose ou un service comme Railway/Render suffit pour la plupart des projets.

Topics and skills covered

  • Docker Compose
  • Multi-service
  • Networking
  • Volumes