8.1 Commande docker compose scale
La mise à l'échelle des services, c'est le processus d'augmentation ou de diminution du nombre d'instances de conteneurs qui exécutent le même service, afin de gérer la charge et d'assurer la résilience de l'application. Dans Docker Compose, pour mettre à l'échelle les services, on utilise la commande docker compose scale
(dans les anciennes versions) ou le paramètre --scale
dans les nouvelles versions.
Concepts principaux de mise à l'échelle :
- Extensibilité : La capacité à augmenter ou réduire facilement le nombre d'instances d'un service en fonction de la charge actuelle.
- Résilience : L'exécution de plusieurs instances d'un service permet d'assurer la résilience, car une défaillance d'une instance ne conduit pas à l'arrêt complet du service.
- Répartition de la charge : La distribution de la charge entre plusieurs instances d'un service pour optimiser les performances.
Utilisation de la commande docker compose scale
Syntaxe de la commande :
docker compose scale SERVICE=NUM
Où :
- SERVICE : le nom du service à mettre à l'échelle.
- NUM : le nombre d'instances qui doivent être exécutées.
Exemple d'utilisation :
Supposons que vous avez un fichier compose.yaml
avec la définition du service web.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
Pour démarrer 3 instances du service web, utilisez la commande :
docker compose scale web=3
Remarque : Avant d'exécuter la commande docker compose scale
, assurez-vous que les services sont démarrés avec la commande docker compose up
.
Utilisation du paramètre --scale
dans les nouvelles versions
Dans les nouvelles versions de Docker Compose, la commande docker compose scale
a été remplacée par le paramètre --scale
, utilisé conjointement avec la commande up
.
docker compose up --scale web=3
Cette approche est préférable, car elle permet de démarrer et de mettre à l'échelle les services en même temps.
8.2 Exemples pratiques
Exemple 1 : Mise à l'échelle du serveur web
Créez un fichier compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
Lance et mets à l'échelle le service jusqu'à 3 instances :
docker compose up --scale web=3
Maintenant, tu auras 3 instances du serveur web Nginx fonctionnant sur des ports dans la plage 80-90.
Important !
Si le service prévoit une mise à l'échelle sur plusieurs instances, il est nécessaire d'indiquer une plage de ports, par exemple : "80-90:80"
. Cela « réservera » sur la machine hôte une plage de 10 ports. Lors de l'ajout d'une réplique du service, un port de la plage lui sera attribué. Si cela n'est pas fait, les ports seront choisis au hasard et les répliques deviendront inaccessibles.
Exemple 2 : Mise à l'échelle avec une base de données
Créez un fichier compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
Lance et mets à l'échelle le service web
jusqu'à 4 instances :
docker compose up --scale web=4
Maintenant, tu auras 4 instances du serveur web Nginx fonctionnant avec une seule base de données PostgreSQL.
8.3 Gestion des services évolutifs
Après avoir mis à l'échelle les services, tu peux utiliser les commandes Docker Compose pour gérer les instances.
Afficher les conteneurs en cours d'exécution
Utilise la commande docker compose ps
pour afficher tous les conteneurs en cours d'exécution :
docker compose ps
Arrêter et supprimer les services évolutifs
Pour arrêter et supprimer toutes les instances d'un service, utilise la commande docker compose down
:
docker compose down
Conseils et astuces :
- Répartition de charge : utilise des load balancers pour distribuer le trafic entre plusieurs instances d'un service. Par exemple, tu peux utiliser Nginx ou HAProxy pour cette tâche.
- Conservation des données : assure-toi que les données générées par les services évolutifs sont sauvegardées dans des volumes ou des stockages externes afin d'éviter toute perte en cas d'arrêt ou de suppression de conteneurs.
- Surveillance : utilise des outils de monitoring comme Prometheus ou Grafana pour suivre les performances et l'état des services évolutifs.
- Mise à l'échelle automatique : envisage la possibilité de mettre automatiquement à l'échelle les services en fonction de la charge avec des orchestrateurs tels que Kubernetes ou Docker Swarm.
GO TO FULL VERSION