Comment déployer une application multi-service avec un stack Docker Swarm

DockerBeginner
Pratiquer maintenant

Introduction

Dans ce tutoriel, nous explorerons le processus de déploiement d'une application multi-service à l'aide de Docker Swarm, une plateforme robuste d'orchestration de conteneurs. Vous apprendrez à utiliser Docker Compose pour définir les services de votre application, puis à les déployer en toute transparence en tant que stack Docker Swarm, garantissant ainsi l'évolutivité et la haute disponibilité.

Comprendre Docker Swarm

Docker Swarm est une solution native de clustering et d'orchestration pour les conteneurs Docker. Il vous permet de gérer un groupe d'hôtes Docker et de déployer des applications sur ceux-ci, offrant une haute disponibilité et une évolutivité.

Qu'est-ce que Docker Swarm ?

Docker Swarm est une fonctionnalité intégrée à Docker qui vous permet de créer et de gérer un cluster d'hôtes Docker, appelé Swarm. Dans un Swarm, plusieurs hôtes Docker (nœuds) fonctionnent ensemble comme un seul hôte Docker virtuel. Cela vous permet de déployer vos applications et services sur le Swarm, et Docker gérera l'équilibrage de charge, le scaling et le basculement pour vous.

Concepts clés de Docker Swarm

  • Swarm : Un cluster d'hôtes Docker configurés pour fonctionner ensemble.
  • Nœud : Un seul hôte Docker faisant partie du Swarm.
  • Service : Une manière déclarative de définir comment votre application ou service doit être déployé et mis à l'échelle sur le Swarm.
  • Tâche : Une instance unique d'un conteneur exécuté dans le cadre d'un service.
  • Réseau Overlay : Un réseau virtuel qui connecte tous les nœuds d'un Swarm, permettant aux conteneurs de communiquer entre eux.

Avantages de Docker Swarm

  • Haute disponibilité : Docker Swarm gère automatiquement la santé et la disponibilité de vos services, redémarrant les tâches en échec et les redistribuant sur le Swarm.
  • Évolutivité : Vous pouvez facilement mettre à l'échelle vos services vers le haut ou vers le bas en ajustant le nombre de répliques.
  • Equilibrage de charge : Docker Swarm fournit un équilibrage de charge intégré, répartissant les demandes entrantes sur les tâches de votre service.
  • Simplicité : Docker Swarm est une fonctionnalité native de Docker, ce qui facilite la configuration et la gestion de vos applications conteneurisées.
graph TD A[Hôte Docker] --> B[Hôte Docker] B[Hôte Docker] --> C[Hôte Docker] C[Hôte Docker] --> A[Hôte Docker] A[Hôte Docker] -- Swarm --> B[Hôte Docker] B[Hôte Docker] -- Swarm --> C[Hôte Docker] C[Hôte Docker] -- Swarm --> A[Hôte Docker]

Déploiement d'une application multi-service avec Docker Compose

Docker Compose est un outil qui vous permet de définir et d'exécuter des applications multi-conteneurs. Il est particulièrement utile lorsque vous devez déployer une application complexe composée de plusieurs services, chacun avec ses propres exigences.

Création d'un fichier Docker Compose

Pour déployer une application multi-service avec Docker Compose, vous devez créer un fichier docker-compose.yml qui définit les services, leurs configurations et la manière dont ils doivent être connectés. Voici un exemple :

version: "3"
services:
  web:
    image: labex/web-app:v1
    ports:
      - "80:8080"
    depends_on:
      - db
  db:
    image: labex/database:v1
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

Dans cet exemple, nous avons deux services : web et db. Le service web utilise l'image labex/web-app:v1 et expose le port 8080 sur le port 80 de l'hôte. Il dépend également du service db. Le service db utilise l'image labex/database:v1 et monte un volume pour les données de la base de données.

Déploiement de l'application

Pour déployer l'application, vous pouvez utiliser les commandes suivantes :

## Construire les images (le cas échéant)
docker-compose build

## Déployer l'application
docker-compose up -d

La commande docker-compose up -d démarrera tous les services en arrière-plan.

Mise à l'échelle de l'application

L'un des avantages de l'utilisation de Docker Compose est la possibilité de mettre facilement à l'échelle vos services. Par exemple, pour mettre à l'échelle le service web à 3 répliques, vous pouvez exécuter :

docker-compose scale web=3

Cela créera deux instances supplémentaires du service web, et Docker Compose équilibrera automatiquement le trafic entre elles.

graph LR client[Client] --> load_balancer[Equilibreur de charge] load_balancer --> web1[Service Web] load_balancer --> web2[Service Web] load_balancer --> web3[Service Web] web1 --> db[Service Base de données] web2 --> db web3 --> db

Gestion et mise à l'échelle du stack Docker Swarm

Une fois que vous avez déployé votre application multi-service en tant que stack Docker Swarm, vous pouvez utiliser diverses commandes pour la gérer et la mettre à l'échelle.

Déploiement du stack

Pour déployer votre application en tant que stack Docker Swarm, vous pouvez utiliser la commande docker stack deploy :

docker stack deploy -c docker-compose.yml my-app

Cela créera les services Swarm basés sur les configurations de votre fichier docker-compose.yml.

Surveillance du stack

Vous pouvez utiliser les commandes suivantes pour surveiller l'état de votre stack Swarm :

## Lister les services en cours d'exécution
docker stack services my-app

## Lister les tâches (instances de conteneurs) pour un service
docker service ps my-app_web

## Afficher les journaux d'un service
docker service logs my-app_web

Mise à l'échelle du stack

Pour mettre à l'échelle un service dans votre stack Swarm, vous pouvez utiliser la commande docker service scale :

## Mettre à l'échelle le service "web" à 5 répliques
docker service scale my-app_web=5

Cela créera 4 instances supplémentaires du service web, et Docker Swarm équilibrera automatiquement le trafic entre elles.

graph LR client[Client] --> load_balancer[Equilibreur de charge] load_balancer --> web1[Service Web] load_balancer --> web2[Service Web] load_balancer --> web3[Service Web] load_balancer --> web4[Service Web] load_balancer --> web5[Service Web] web1 --> db[Service Base de données] web2 --> db web3 --> db web4 --> db web5 --> db

Mise à jour du stack

Pour mettre à jour votre stack Swarm avec une nouvelle version d'un service, vous pouvez utiliser la commande docker service update :

## Mettre à jour le service "web" pour utiliser une nouvelle image
docker service update my-app_web --image labex/web-app:v2

Cela effectuera une mise à jour progressive du service web, remplaçant les anciens conteneurs par les nouveaux sans interrompre le service.

En utilisant ces commandes, vous pouvez efficacement gérer et mettre à l'échelle votre stack Docker Swarm pour garantir la haute disponibilité et les performances de votre application multi-service.

Résumé

À la fin de ce tutoriel, vous aurez une compréhension approfondie de Docker Swarm et de son utilisation pour déployer et gérer une application multi-service. Vous serez capable de configurer un cluster Docker Swarm, de définir les services de votre application à l'aide de Docker Compose, et de déployer l'ensemble du stack comme un système évolutif et résilient.