Publie le 24 mars 2026 Par

Docker Compose : orchestrer ses services de développement et production

Une application réelle n’est pas un seul service : il y a l’API, la base de données, le cache Redis, le service de mails. Docker Compose orchestre plusieurs containers qui fonctionnent ensemble. C’est l’outil qui transforme Docker en environnement de développement complet — et qui simplifie le déploiement sur un VPS.

Le problème que Docker Compose résout

Sans Docker Compose, démarrer un environnement de développement complet demande de lancer manuellement plusieurs docker run avec les bons ports, les bonnes variables d’environnement, les bons réseaux. Docker Compose décrit tout dans un fichier YAML et démarre tout avec une commande.

Un docker-compose.yml complet

# docker-compose.yml — Stack Next.js + PostgreSQL + Redis
version: '3.9'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
      - REDIS_URL=redis://cache:6379
      - NODE_ENV=development
    volumes:
      - .:/app                    # montage du code source pour le hot reload
      - /app/node_modules         # exclure node_modules du montage
    depends_on:
      db:
        condition: service_healthy  # attendre que la DB soit prête
      cache:
        condition: service_started
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data  # persistance des données
    ports:
      - "5432:5432"   # exposer pour accès depuis un client DB local (TablePlus, DBeaver)
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Les commandes essentielles

# Démarrer tous les services (en background)
docker compose up -d

# Voir les logs de tous les services
docker compose logs -f

# Voir les logs d'un service spécifique
docker compose logs -f app

# Arrêter les services (containers restent, volumes conservés)
docker compose stop

# Arrêter ET supprimer les containers
docker compose down

# Supprimer aussi les volumes (⚠️ supprime les données DB)
docker compose down -v

# Rebuild l'image après modification du Dockerfile
docker compose up -d --build

# Exécuter une commande dans un service
docker compose exec app sh
docker compose exec db psql -U postgres myapp

# Voir l'état des services
docker compose ps

Séparer dev et production

# docker-compose.yml — base commune
# docker-compose.override.yml — surcharge automatique en dev
# docker-compose.prod.yml — config production

# docker-compose.override.yml (dev)
services:
  app:
    volumes:
      - .:/app           # hot reload — inutile en prod
    environment:
      - NODE_ENV=development
    command: npm run dev  # serveur de dev, pas de build

# docker-compose.prod.yml
services:
  app:
    image: mon-registry/mon-app:latest  # image pré-buildée
    environment:
      - NODE_ENV=production
    restart: always

# En développement (override appliqué automatiquement)
docker compose up -d

# En production
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Les variables d’environnement avec .env
# .env (à côté de docker-compose.yml, ne pas commiter)
POSTGRES_PASSWORD=mon_mot_de_passe_securise
POSTGRES_DB=myapp_prod
REDIS_PASSWORD=autre_secret

# docker-compose.yml — référencer les variables
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}

Intégrer les migrations de base de données

# Lancer les migrations Prisma après démarrage
docker compose up -d
docker compose exec app npx prisma migrate deploy
docker compose exec app npx prisma db seed

# Ou dans un script de démarrage (entrypoint.sh)
#!/bin/sh
npx prisma migrate deploy
exec node server.js

Offres développeur fullstack et back-end

Des postes pour développeurs qui savent déployer leurs projets — Docker Compose est la compétence de base en entreprise.

À lire aussi : Docker pour développeursDéploiement sur VPSDevOps pour débutant

Categories : DevOps & Cloud