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 :
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 :
- L'option
-d
(--detach
) permet de lancer les conteneurs en arrière-plan, equivalent dedocker 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.
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:
Stopper les conteneurs
Si vous souhaitez arrêter temporairement vos conteneurs sans les supprimer :
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 :
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 :
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.
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.