Aller au contenu

Déployer avec Docker Compose

Docker Compose, c'est l'outil idéal pour orchestrer et gérer des applications composées de plusieurs services, chacun fonctionnant dans un conteneur distinct. Il simplifie le déploiement, l'organisation et la maintenance des applications complexes. Si votre projet comporte plusieurs composantes, Docker Compose est votre allié incontournable.

Motivations

Les applications modernes sont souvent constituées de plusieurs composantes interconnectées. Prenons l'exemple d'une plateforme e-commerce :

  • Frontend : l'interface utilisateur.
  • Backend : le service qui gère la logique métier et les API.
  • Base de données : pour stocker les informations des utilisateurs, produits, commandes, etc.

Chaque composante fonctionne idéalement dans un conteneur indépendant. Docker Compose permet de définir et gérer l'ensemble de ces conteneurs dans un fichier unique.

docker-compose.yaml

Le fichier docker-compose.yml est au cœur de Docker Compose. Semblable à un Dockerfile, il définit les services, les réseaux, les volumes et les interactions entre conteneurs.

Voici un exemple pour déployer un service PostgreSQL :

docker-compose.yml
services:
  postgres:
    image: postgres:17
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: postgres
    ports:
      - "2345:5432"
    volumes:
      - postgres-dev-db-volume:/var/lib/postgresql/data
    restart: always

volumes:
  postgres-dev-db-volume:

Déployer les conteneurs

Pour lancer les services définis dans le fichier docker-compose.yml, exécutez :

docker compose up -d

  • L'option -d (--detach) permet de lancer les conteneurs en arrière-plan, equivalent de docker run.
  • Docker Compose configure les réseaux, attache les volumes et démarre les services automatiquement.

Construire les images

Ci-dessus un exemple avec trois services avec les services, Frontend Angular, Backend Python et la base de données Postgres.

docker-compose.yml
services:
  postgres:
    image: postgres:17
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: postgres
    ports:
      - "2345:5432"
    volumes:
      - postgres-dev-db-volume:/var/lib/postgresql/data
    restart: always

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    environment:
      DATABASE_URL: postgres://admin:admin@postgres:5432/postgres
    ports:
      - "5000:5000"
    depends_on:
      - postgres
    restart: always

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "4200:4200"
    depends_on:
      - backend
    restart: always

volumes:
  postgres-dev-db-volume:

Il faut dans un premier temps construire les images pour le frontend et le backend avec la commande suivante:

docker compose build

Stopper les conteneurs

Si vous souhaitez arrêter temporairement vos conteneurs sans les supprimer :

docker compose stop
Les conteneurs seront arrêtés mais conservés, avec leurs volumes et configurations intactes.

Démarrer les conteneurs

Pour redémarrer les conteneurs arrêtés, utilisez :

docker compose start
Cela relance les services définis dans votre fichier docker-compose.yml sans reconfigurer les volumes ou les réseaux.

Arrêter les conteneurs

Pour arrêter et supprimer les conteneurs, les réseaux, et les volumes anonymes créés par Docker Compose :

docker compose down
Cela nettoie votre environnement tout en conservant les volumes nommés, comme celui défini dans l'exemple.

Redémarrer les conteneurs

La commande restart permet de redémarrer vos conteneurs. Elle fonctionne comme une combinaison de stop suivi de start (stop + start), sans recréer ou modifier les conteneurs existants.

docker compose restart

Commande Ce qu'elle fait
stop + start Arrête les conteneurs en cours d'exécution puis les relance sans les recréer ni modifier leurs paramètres.
down + up Détruit les conteneurs, réseaux, et (optionnellement) les volumes, puis recrée et relance les services.

Avec Docker Compose, la gestion de vos conteneurs devient simple et efficace. Que ce soit pour déployer une application multi-composantes ou pour simuler un environnement de production, Docker Compose est une solution incontournable pour accélérer vos développements.