Comment configurer Docker Swarm

DockerBeginner
Pratiquer maintenant

Introduction

Docker Swarm est une solution puissante de gestion et d'orchestration de cluster qui vous permet de déployer et de gérer des conteneurs Docker à grande échelle. Dans ce tutoriel, vous apprendrez à configurer un Docker Swarm, à gérer et à mettre à l'échelle vos services Swarm, et à exploiter tout le potentiel des capacités d'orchestration de conteneurs de Docker.

Comprendre Docker Swarm

Qu'est-ce que Docker Swarm ?

Docker Swarm est un outil natif de clustering et d'orchestration pour les conteneurs Docker. Il vous permet de gérer un groupe de moteurs Docker, appelé essaim (swarm), et de déployer des services dans cet essaim. Dans un Docker Swarm, les moteurs Docker fonctionnent ensemble comme un seul hôte Docker virtuel.

Concepts clés de Docker Swarm

  1. Nœuds : Les nœuds sont les moteurs Docker individuels participant à l'essaim. Il existe deux types de nœuds : les managers et les workers.

    • Managers : Les managers sont responsables de la gestion de l'essaim, y compris la planification des tâches, le maintien de l'état souhaité de l'essaim et la fourniture d'un point d'entrée pour l'essaim.
    • Workers : Les workers sont responsables de l'exécution des conteneurs réels dans l'essaim.
  2. Services : Les services définissent l'état souhaité de votre application. Un service peut être un seul conteneur ou un groupe de conteneurs qui fonctionnent ensemble.

  3. Tâches : Les tâches sont les unités atomiques de planification dans un essaim. Chaque service est divisé en tâches, qui sont ensuite planifiées pour s'exécuter sur les nœuds disponibles.

  4. Equilibrage de charge : Docker Swarm fournit un équilibre de charge intégré pour les services. Les nœuds managers distribuent automatiquement les tâches sur les nœuds workers, garantissant une haute disponibilité et une évolutivité.

Avantages de Docker Swarm

  1. Orchestration native : Docker Swarm est un outil d'orchestration natif, ce qui signifie qu'il est intégré au moteur Docker et ne nécessite aucun logiciel supplémentaire.

  2. Simplicité : Docker Swarm est relativement simple à configurer et à gérer, ce qui en fait un bon choix pour les déploiements de petite à moyenne taille.

  3. Haute disponibilité : Docker Swarm fournit des fonctionnalités de haute disponibilité intégrées, telles que la planification automatique des tâches et l'équilibrage de charge.

  4. Évolutivité : Docker Swarm peut facilement augmenter ou réduire le nombre de nœuds et de conteneurs selon les besoins.

  5. Sécurité : Docker Swarm utilise les mêmes fonctionnalités de sécurité que le moteur Docker, y compris le contrôle d'accès basé sur les rôles et la communication chiffrée.

Maintenant que vous avez une compréhension de base de Docker Swarm, passons à la section suivante : Initialisation d'un Docker Swarm.

Initialisation d'un Docker Swarm

Préparation des nœuds

Avant de pouvoir initialiser un Docker Swarm, vous devez disposer d'un ensemble d'hôtes Docker (nœuds) prêts. Vous pouvez utiliser des machines physiques ou virtuelles, à condition qu'elles exécutent la même version de Docker.

Initialisation de l'essaim

Pour initialiser le Docker Swarm, vous devez désigner l'un des nœuds comme manager. Vous pouvez le faire en exécutant la commande suivante sur le nœud souhaité :

docker swarm init --advertise-addr <MANAGER-IP>

Remplacez <MANAGER-IP> par l'adresse IP du nœud manager.

Après avoir exécuté cette commande, vous recevrez un jeton que vous pouvez utiliser pour joindre d'autres nœuds à l'essaim en tant que workers. Vous pouvez joindre un nœud en tant que worker en exécutant la commande suivante sur le nœud souhaité :

docker swarm join --token <TOKEN> <MANAGER-IP>:2377

Remplacez <TOKEN> par le jeton que vous avez reçu de la commande docker swarm init et <MANAGER-IP> par l'adresse IP du nœud manager.

Vérification de l'essaim

Vous pouvez vérifier l'état de l'essaim en exécutant la commande suivante sur le nœud manager :

docker node ls

Cela affichera une liste de tous les nœuds de l'essaim, avec leurs rôles (manager ou worker) et leur état.

Sécurisation de l'essaim

Par défaut, la communication entre les nœuds de l'essaim est chiffrée à l'aide du protocole Raft. Toutefois, vous pouvez renforcer la sécurité de votre essaim en activant l'authentification mutuelle Transport Layer Security (mTLS).

Pour activer mTLS, vous devez générer et distribuer les certificats nécessaires. Vous pouvez le faire à l'aide de la commande docker swarm ca sur le nœud manager.

docker swarm ca --rotate

Cette commande générera de nouveaux certificats racine et intermédiaires et les distribuera à tous les nœuds de l'essaim.

Maintenant que vous avez initialisé votre Docker Swarm, passons à la section suivante : Gestion et mise à l'échelle des services Swarm.

Gestion et mise à l'échelle des services Swarm

Déploiement d'un service

Pour déployer un service sur Docker Swarm, vous pouvez utiliser la commande docker service create. Par exemple, pour déployer un serveur web Nginx, vous pouvez exécuter la commande suivante :

docker service create --name nginx -p 80:80 nginx:latest

Cela créera un nouveau service nommé "nginx" et le déploiera sur l'essaim. Le service exposera le port 80 sur l'hôte et le redirigera vers le port 80 dans le conteneur.

Mise à l'échelle d'un service

Vous pouvez mettre à l'échelle le nombre de répliques (tâches) d'un service à l'aide de la commande docker service scale. Par exemple, pour mettre à l'échelle le service "nginx" à 5 répliques, vous pouvez exécuter :

docker service scale nginx=5

Cela créera 4 tâches supplémentaires pour le service "nginx", et le nœud manager les planifiera automatiquement sur les nœuds workers disponibles.

Mise à jour d'un service

Vous pouvez mettre à jour la configuration d'un service à l'aide de la commande docker service update. Par exemple, pour mettre à jour le service "nginx" afin d'utiliser une version d'image différente, vous pouvez exécuter :

docker service update --image nginx:1.19 nginx

Cela mettra à jour le service "nginx" pour qu'il utilise l'image "nginx:1.19".

Surveillance des services Swarm

Vous pouvez surveiller l'état de vos services Swarm à l'aide des commandes docker service ls et docker service ps. La commande docker service ls vous affichera une liste de tous les services en cours d'exécution dans l'essaim, tandis que la commande docker service ps vous affichera l'état de chaque tâche au sein d'un service.

## Liste de tous les services
docker service ls

## Liste des tâches pour un service spécifique
docker service ps nginx

Mise hors service des nœuds

Si vous devez effectuer une maintenance sur un nœud, vous pouvez le "mettre hors service", ce qui entraînera le réacheminement par le manager de toutes les tâches exécutées sur ce nœud vers d'autres nœuds disponibles. Vous pouvez le faire à l'aide de la commande docker node update :

docker node update --availability drain <NODE-ID>

Remplacez <NODE-ID> par l'ID du nœud que vous souhaitez mettre hors service.

Ceci couvre les bases de la gestion et de la mise à l'échelle des services Docker Swarm. Avec ces connaissances, vous devriez être en mesure de déployer, de mettre à l'échelle et de maintenir vos applications exécutées sur un Docker Swarm.

Résumé

À la fin de ce tutoriel, vous aurez une compréhension approfondie de Docker Swarm et de la manière de le configurer, de gérer vos services Swarm et de mettre à l'échelle vos applications conteneurisées facilement. Profitez de la puissance de Docker Swarm pour rationaliser vos processus de déploiement et de gestion de conteneurs, garantissant ainsi la haute disponibilité et la capacité d'échelle de vos applications.