Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser la commande docker compose alpha scale pour mettre à l'échelle les services définis dans un projet Docker Compose. Nous commencerons par préparer un projet Docker Compose simple, qui inclura l'installation de Docker Compose, la création d'une application web basique, et la définition de son Dockerfile et de ses dépendances.

Après la configuration du projet, vous explorerez comment mettre à l'échelle un service unique en utilisant docker compose alpha scale, mettre à l'échelle plusieurs services simultanément, et mettre à l'échelle un service sans démarrer ses dépendances. Cette expérience pratique démontrera la flexibilité et la puissance de la commande scale pour gérer le nombre d'instances en cours d'exécution de vos services.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-555071{{"Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services"}} docker/ls -.-> lab-555071{{"Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services"}} docker/ps -.-> lab-555071{{"Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services"}} docker/rm -.-> lab-555071{{"Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services"}} docker/build -.-> lab-555071{{"Comment utiliser la commande docker compose alpha scale pour mettre à l'échelle des services"}} end

Préparer un projet Docker Compose simple

Dans cette étape, nous allons préparer un projet Docker Compose simple. Comme Docker Compose n'est pas préinstallé dans l'environnement LabEx, nous allons d'abord l'installer. Ensuite, nous créerons une application web simple et un fichier Docker Compose pour la définir et l'exécuter.

Tout d'abord, installons Docker Compose. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Maintenant, vérifions l'installation en consultant la version de Docker Compose.

docker-compose --version

Vous devriez voir la version installée de Docker Compose dans la sortie.

Ensuite, nous allons créer une application web simple. Nous utiliserons une application Python Flask basique. Créez un répertoire pour notre projet et accédez-y.

mkdir my-web-app
cd my-web-app

Dans le répertoire my-web-app, créez un fichier nommé app.py avec le contenu suivant :

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker Compose!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Il s'agit d'une application Flask simple qui renvoie "Hello, Docker Compose!" lorsqu'elle est accédée.

Maintenant, nous avons besoin d'un Dockerfile pour construire une image Docker pour notre application Flask. Créez un fichier nommé Dockerfile dans le répertoire my-web-app avec le contenu suivant :

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]

Ce Dockerfile utilise une image Python 3.9 slim, définit le répertoire de travail, copie et installe les dépendances depuis requirements.txt, copie le code de l'application, expose le port 5000 et spécifie la commande pour exécuter l'application.

Nous avons également besoin d'un fichier requirements.txt pour la dépendance Flask. Créez un fichier nommé requirements.txt dans le répertoire my-web-app avec le contenu suivant :

Flask==2.2.2

Enfin, nous allons créer un fichier docker-compose.yml pour définir notre service. Créez un fichier nommé docker-compose.yml dans le répertoire my-web-app avec le contenu suivant :

version: "3.8"

services:
  web:
    build: .
    ports:
      - "5000:5000"

Ce fichier docker-compose.yml définit un service nommé web. Il indique à Docker Compose de construire l'image en utilisant le Dockerfile dans le répertoire courant (.) et de mapper le port 5000 de l'hôte vers le port 5000 dans le conteneur.

Maintenant, construisons et exécutons le service en utilisant Docker Compose. Assurez-vous d'être dans le répertoire ~/project/my-web-app.

docker-compose up -d

Cette commande construit l'image (si elle n'est pas déjà construite), crée un conteneur pour le service web et le démarre en mode détaché (-d).

Vous pouvez vérifier si le conteneur est en cours d'exécution en utilisant la commande docker ps.

docker ps

Vous devriez voir un conteneur pour le service my-web-app-web-1 en cours d'exécution.

Pour vérifier que l'application fonctionne, vous pouvez y accéder en utilisant curl.

curl http://localhost:5000

Vous devriez voir la sortie "Hello, Docker Compose!".

Mettre à l'échelle un service avec docker compose alpha scale

Dans cette étape, nous allons apprendre à mettre à l'échelle un service en utilisant la commande docker compose alpha scale. Mettre à l'échelle un service signifie augmenter ou diminuer le nombre d'instances (conteneurs) en cours d'exécution pour ce service. Cela est utile pour gérer une charge accrue ou pour assurer une haute disponibilité.

La commande docker compose alpha scale vous permet de définir le nombre souhaité de répliques pour un service spécifique. Le sous-commande alpha indique qu'il s'agit d'une fonctionnalité récente dans Docker Compose.

Assurez-vous d'être dans le répertoire ~/project/my-web-app où se trouve votre fichier docker-compose.yml.

Actuellement, nous avons une seule instance du service web en cours d'exécution. Nous pouvons le vérifier en listant les conteneurs en cours d'exécution et en filtrant par le nom du service.

docker ps --filter "name=my-web-app-web"

Vous devriez voir un seul conteneur listé.

Maintenant, mettons à l'échelle le service web à 3 instances. Nous utiliserons la commande docker compose alpha scale suivie du nom du service et du nombre souhaité de répliques.

docker compose alpha scale web=3

Cette commande démarrera deux nouveaux conteneurs pour le service web, portant ainsi le nombre total d'instances à 3.

Après avoir exécuté la commande, vous pouvez à nouveau vérifier les conteneurs en cours d'exécution pour voir les instances mises à l'échelle.

docker ps --filter "name=my-web-app-web"

Vous devriez maintenant voir trois conteneurs listés, chacun avec un ID et un nom différents (par exemple, my-web-app-web-1, my-web-app-web-2, my-web-app-web-3).

La commande docker compose alpha scale est un moyen pratique d'ajuster dynamiquement le nombre de répliques de service sans modifier le fichier docker-compose.yml et sans avoir à relancer docker compose up.

Pour réduire le nombre d'instances du service, vous pouvez utiliser la même commande avec un nombre plus petit. Par exemple, pour revenir à 1 instance :

docker compose alpha scale web=1

Cela arrêtera et supprimera les conteneurs supplémentaires, ne laissant qu'une seule instance en cours d'exécution.

Remettons le service à 3 instances pour l'étape suivante.

docker compose alpha scale web=3

Mettre à l'échelle plusieurs services simultanément

Dans cette étape, nous allons apprendre à mettre à l'échelle plusieurs services simultanément en utilisant la commande docker compose alpha scale. Ceci est utile lorsque vous avez plusieurs services dans votre application qui doivent être mis à l'échelle ensemble pour gérer une charge accrue ou maintenir une architecture équilibrée.

Pour démontrer cela, ajoutons un autre service simple à notre fichier docker-compose.yml. Nous allons créer un service Nginx simple qui sert du contenu statique.

Tout d'abord, créez un répertoire pour le contenu statique Nginx.

mkdir static

Dans le répertoire static, créez un fichier HTML simple nommé index.html avec le contenu suivant :

<!doctype html>
<html>
  <head>
    <title>Static Content</title>
  </head>
  <body>
    <h1>Hello from Nginx!</h1>
  </body>
</html>

Maintenant, mettons à jour le fichier docker-compose.yml dans le répertoire ~/project/my-web-app pour inclure le service Nginx. Ouvrez le fichier docker-compose.yml avec nano.

nano docker-compose.yml

Ajoutez la définition de service suivante sous le service web :

nginx:
  image: nginx:latest
  ports:
    - "80:80"
  volumes:
    - ./static:/usr/share/nginx/html

Le fichier docker-compose.yml mis à jour devrait ressembler à ceci :

version: "3.8"

services:
  web:
    build: .
    ports:
      - "5000:5000"

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./static:/usr/share/nginx/html

Ceci ajoute un service nginx qui utilise l'image nginx:latest, mappe le port 80 de l'hôte vers le port 80 du conteneur, et monte le répertoire ./static vers la racine web par défaut de Nginx (/usr/share/nginx/html).

Enregistrez le fichier docker-compose.yml et quittez nano (Ctrl+X, Y, Entrée).

Maintenant, démarrons le nouveau service. Comme nous avons modifié le fichier docker-compose.yml, nous devons relancer docker compose up. Le drapeau -d exécute les conteneurs en mode détaché.

docker compose up -d

Docker Compose créera et démarrera le service nginx. Le service web devrait déjà être en cours d'exécution depuis l'étape précédente.

Vous pouvez vérifier que les deux services fonctionnent avec docker ps.

docker ps

Vous devriez voir des conteneurs pour my-web-app-web-1, my-web-app-web-2, my-web-app-web-3 et my-web-app-nginx-1.

Maintenant, mettons à l'échelle simultanément le service web à 5 instances et le service nginx à 2 instances. Nous pouvons le faire en listant les services et leurs nombres de répliques souhaités dans la commande docker compose alpha scale.

docker compose alpha scale web=5 nginx=2

Cette commande mettra à l'échelle le service web à 5 instances et le service nginx à 2 instances.

Après avoir exécuté la commande, vérifiez à nouveau les conteneurs en cours d'exécution.

docker ps

Vous devriez maintenant voir 5 conteneurs pour le service web et 2 conteneurs pour le service nginx.

Ceci démontre comment vous pouvez mettre à l'échelle plusieurs services avec une seule commande docker compose alpha scale, ce qui est efficace pour gérer la mise à l'échelle des composants de votre application.

Mettre à l'échelle un service sans démarrer ses dépendances

Dans cette étape, nous allons explorer comment mettre à l'échelle un service spécifique en utilisant docker compose alpha scale sans démarrer ses dépendances. Par défaut, lorsque vous mettez à l'échelle un service, Docker Compose peut également démarrer ou s'assurer que ses dépendances sont en cours d'exécution. Cependant, il existe des scénarios où vous pourriez vouloir uniquement mettre à l'échelle un seul service sans affecter les autres.

Pour illustrer cela, ajoutons une dépendance à notre service web. Nous allons ajouter un simple service de base de données, bien que nous n'implémenterons aucune logique de base de données dans notre application web pour cet exemple. Ceci est simplement pour démontrer le concept de dépendance.

Ouvrez le fichier docker-compose.yml dans le répertoire ~/project/my-web-app en utilisant nano.

nano docker-compose.yml

Ajoutez une nouvelle définition de service pour une base de données (par exemple, une simple image postgres) et ajoutez une section depends_on au service web.

version: "3.8"

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./static:/usr/share/nginx/html

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase

Le fichier docker-compose.yml mis à jour inclut maintenant un service db utilisant l'image postgres:latest et le service web a une ligne depends_on: - db, indiquant que le service web dépend du service db.

Enregistrez le fichier docker-compose.yml et quittez nano (Ctrl+X, Y, Entrée).

Maintenant, démarrons les services avec la configuration mise à jour.

docker compose up -d

Docker Compose créera et démarrera également le service db car le service web en dépend.

Vous pouvez vérifier que tous les services fonctionnent en utilisant docker ps.

docker ps

Vous devriez voir des conteneurs pour web, nginx et db.

Supposons maintenant que nous voulons mettre à l'échelle uniquement le service web à 4 instances sans démarrer ou affecter le service db (s'il n'était pas déjà en cours d'exécution). La commande docker compose alpha scale, par défaut, respecte les dépendances. Cependant, pour ce scénario spécifique où nous voulons mettre à l'échelle uniquement le service spécifié, la commande standard docker compose alpha scale est suffisante car elle se concentre principalement sur le service cible. La relation depends_on affecte principalement l'ordre de démarrage lors de l'utilisation de docker compose up. Lors de l'utilisation de docker compose alpha scale, elle se concentre sur l'ajustement du nombre d'instances pour le service spécifié.

Mettons à l'échelle le service web à 4 instances.

docker compose alpha scale web=4

Cette commande mettra à l'échelle le service web à 4 instances. Elle ne démarrera pas explicitement le service db s'il n'était pas en cours d'exécution, mais comme il a été démarré par le précédent docker compose up, il restera en cours d'exécution. L'essentiel ici est que docker compose alpha scale est conçue pour mettre à l'échelle le service spécifié sans nécessairement déclencher le démarrage de ses dépendances si elles ne sont pas déjà en cours d'exécution.

Vérifiez le nombre de conteneurs du service web en cours d'exécution.

docker ps --filter "name=my-web-app-web"

Vous devriez voir 4 conteneurs pour le service web. Le conteneur du service db devrait également toujours être en cours d'exécution.

Ceci démontre que docker compose alpha scale se concentre sur le service cible pour la mise à l'échelle.

Enfin, arrêtons tous les services.

docker compose down

Cette commande arrêtera et supprimera tous les conteneurs, réseaux et volumes créés par Docker Compose pour ce projet.

Résumé

Dans ce labo, nous avons appris à préparer un projet simple avec Docker Compose. Cela a impliqué l'installation de Docker Compose dans l'environnement LabEx, la vérification de l'installation, puis la création d'une application web basique en Python Flask. Nous avons également créé un Dockerfile pour construire une image Docker de l'application et un fichier requirements.txt pour lister les dépendances de l'application. Cette configuration initiale fournit la base pour explorer les fonctionnalités de Docker Compose, en se concentrant spécifiquement sur la mise à l'échelle des services dans les étapes suivantes.