Comment installer Docker Swarm sur Debian 11?

Mis à jours 7 novembre 2022

Docker Swarm est une orchestration de conteneurs qui est basée sur Docker Engine. Il vous permet de créer, mais également de déployer un cluster de nœuds Docker grâce à plusieurs serveurs. Docker Swarm simplifie donc le déploiement de votre application conteneurisée dans un service. Il fournit un moyen simple et direct qui permet de gérer et d’orchestrer les conteneurs.

Docker Swarm offre un haut niveau de disponibilité pour toutes les applications. Dans Docker Swarm, il est possible d’exécuter une application ou un service sur plusieurs nœuds qui sont appelés « nœuds de travail ». En outre, il existe aussi un nœud appelé « Swarm Manager » qui assure la gestion et l’orchestration centralisées de Docker Swarm.

Docker Swarm

Dans ce tutoriel, vous allez voir comment configurer Docker Swarm sur des serveurs Debian 11. Vous allez commencer par installer Docker, configurer l’UFW (Uncomplicated Firewall), initialiser le « Swarm Manager » et ajouter des « Nodes ». De plus, vous allez également apprendre à utiliser Docker Swarm pour le déploiement d’applications.

Conditions préalables

Avant de suivre ce tutoriel, vous aurez besoin de plusieurs serveurs Debian 11 et d’un utilisateur non root avec des privilèges d’administrateur sudo/root.

Dans cette démonstration, nous allons en fait utiliser trois serveurs Debian 11 ayant les détails suivants :

Nom de l'hôte Addresse IP   Utilisé comme
-------------------------------------
manager     192.168.5.100     Gestionnaire de Swarm Manager
node1       192.168.5.120     Noeud
node2       192.168.5.121     Noeud

Une fois toutes ces exigences en place, vous pouvez commencer.

Installation de Docker

Le référentiel Debian par défaut fournit un package pour Docker. Mais, pour vous assurer que vous installez la dernière version de Docker, vous devrez l’installer via son référentiel officiel.

En outre, vous devez aussi installer Docker sur tous vos serveurs Debian.

Avant d’ajouter le référentiel, il faudra d’abord exécuter la commande apt suivante pour installer quelques packages de base. Lorsque vous êtes invité à confirmer l’installation, vous devrez saisir Y et appuyer sur ENTRÉE.

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
Installation des dépendances
installer les dépendances

Après avoir installé les packages de base, vous devrez ajouter la clé GPG pour le référentiel Docker grâce à la commande suivante. Avec cette commande, vous devrez créer un nouveau répertoire « /etc/apt/keyrings » et y stocker la clé GPG du référentiel Docker.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Ensuite, ajoutez le référentiel Docker pour le système Debian Linux en utilisant la commande ci-dessous.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Maintenant, vous devrez mettre à jour et actualiser votre index de package via la commande apt ci-dessous.

sudo apt update

Vous allez voir que le nouveau référentiel Docker est mis à jour.

le nouveau référentiel Docker est mis à jour
Ajouter référentiel

Ensuite, il faudra installer les packages Docker à l’aide de la commande apt suivante. Il vous demandera de confirmer l’installation, alors pour confirmer, saisissez « Y », puis appuyez sur ENTRER pour continuer.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
INstallation du pakcage Docker avec la commande APT
Installer docker

Après avoir installé Docker, vous devrez exécuter la commande suivante pour démarrer, ensuite activer le service « docker ». Ainsi, « docker » va s’exécuter au démarrage du système de manière automatique.

sudo systemctl start docker
sudo systemctl enable docker

Enfin, vous devrez vérifier le service « docker » à l’aide de la commande systemctl ci-dessous.

sudo systemctl status docker

Si le service « docker » est en cours d’exécution, la sortie ressemblera à la capture d’écran suivante :

le service « docker » est en cours d'exécution
vérifier l’état du service

En outre, si vous prévoyez d’utiliser un utilisateur non root pour votre déploiement, ajoutez votre utilisateur au service « docker » et autorisez-le à exécuter des conteneurs Docker.

sudo usermod -aG docker user

Configuration du pare-feu

Si vous déployez Docker Swarm pour la production, vous devez configurer le pare-feu entre tous les nœuds. Dans cet exemple, vous allez utiliser UFW comme pare-feu par défaut pour vos serveurs Debian.

Vous trouverez ci-dessous certains ports que vous devez ouvrir pour vous assurer que Docker Swarm fonctionne correctement :

  • Port TCP 2377 pour les communications de gestion de cluster. Celui-ci est utilisé si vous avez plusieurs Swarm Manager.
  • Port TCP et UDP 7946 pour la communication entre les nœuds, pour tous les nœuds de l’environnement Swarm.
  • Port UDP 4789 pour le trafic du réseau superposé.

Installez UFW sur vos systèmes Debian en utilisant la commande apt suivante.

sudo apt install ufw -y

Lorsque l’UFW est installé, vous devez exécuter la commande « ufw » suivante pour ajouter le profil d’application « OpenSSH ». Ensuite, démarrez, puis activez UFW.

Au cours du processus, il vous sera demandé de confirmer l’exécution et l’activation du pare-feu UFW. Vous devrez saisir Y pour confirmer et appuyez sur ENTRER pour continuer.

sudo ufw allow "OpenSSH"
sudo ufw enable
Confirmer l'exécution et l'activation du pare-feu UFW
activer le pare-feu ufw

Maintenant, exécutez la commande ufw suivante pour ouvrir certains ports pour Docker Swarm.

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

Enfin, il faudra vérifier la liste des règles UFW activées sur votre serveur via la commande ufw suivante. Vous devrez aussi vous assurer que tous les ports pour Docker Swarm sont activés et disponibles sur UFW.

sudo ufw status
État du pare-feu UFW
vérifier le pare-feu

À ce stade, vous avez installé Docker et configuré l’UFW. Maintenant, initialisons Swarm Manager.

Initialisation de Swarm Manager

Swarm Manager est le centre du déploiement de Docker Swarm. Il gère lui-même l’état de Swarm et il n’a pas de limite quant au nombre de nœuds de gestion. Le déploiement de plusieurs Swarm Manager permet donc de créer un environnement tolérant aux pannes.

Le Swarm Manager est une gestion de cluster intégrée à Docker Engine. Il fournit un modèle de service déclaratif ainsi qu’une mise à l’échelle des services. Il offre également l’état souhaité des services, l’équilibrage des charges et les mises à jour permanentes.

Dans cet exemple, vous devrez initialiser un nœud en tant que Swarm Manager.

Pour initialiser le Swarm Manager, exécutez la commande docker suivante. Dans cet exemple, vous exécuterez le gestionnaire Swarm sur l’adresse IP 192.168.5.30. Le réseau pour les conteneurs sur l’environnement Docker Swarm sera 10.20.0.0/16.

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

Lorsque vous avez initialisé Swarm Manager, vous verrez la sortie suivante. Vous pouvez également voir les détails du jeton pour joindre les nœuds au gestionnaire Swarm.

Initialisation du gestionnaire Swarm
Initialisez le gestionnaire Swarm

Maintenant, exécutez la commande docker suivante pour vérifier que le mode Swarm est activé.

docker info

Dans la capture d’écran ci-dessous, vous allez constater que le mode Swarm est « actif » avec le pool d’adresse IP « 10.20.0.0/16 ». En outre, le nœud actuel disponible sur Docker Swarm est « 1 ».

Swarm est actif
Vérifier le mode Swarm

Il est possible de vérifier la liste des nœuds sur le Docker Swarm via la commande docker ci-dessous. Vous devriez voir qu’il n’y a qu’un seul nœud sur le Docker Swarm actuel, qui est le gestionnaire de Swarm.

docker node ls
Vérification de la liste des nœuds
Vérifier la liste des noeuds

Ajout de nœuds de travail à Swarm

Les conteneurs sont exécutés et fonctionnent dans les nœuds de travail. Sur un nœud de travail, il faudra installer le Docker Engine sur chaque serveur. En outre, il est également possible qu’un nœud de travail peut être promu en tant que Swarm Manager.

Pour ajouter un nœud ouvrier, vous devrez utiliser la commande « docker swarm join » suivie du jeton généré lors de l’initialisation du Swarm Manager.

Vous pouvez ajouter les serveurs « node1 » et « node2 » au Docker Swarm à partir de la commande « docker swarm join » ci-dessous. Ainsi, vous pouvez remplacer le jeton par le jeton que vous avez généré pendant l’initialisation de Swarm Manager.

docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377

Lorsque vous avez ajouté le nœud, vous devrez obtenir un message de sortie tel que « Ce nœud a rejoint un swarm en tant que ouvrier ».

Voici la sortie que vous devrez voir sur les deux serveurs « node1 » et « node2 ».

Nœud Joint
noeud1 joint

En outre, si vous avez perdu le jeton Swarm pour rejoindre le nœud de travail, vous pouvez l’afficher en utilisant la commande suivante.

docker swarm join-token worker

Enfin, retournez sur le serveur « manager » et vérifiez la liste des nœuds de votre environnement Docker Swarm à partir de la commande « docker » suivante.

docker node ls

Dans la capture d’écran suivante, vous allez voir que « node1 » et « node2 » sont ajoutés au Docker Swarm. Ils ont le statut « Ready » et le moteur docker « 20.10.18 ».

Vérification des nœuds
Vérifier les noeuds

Le déploiement de Docker Swarm est terminé. Maintenant, vous pouvez déployer votre application conteneurisée sur Swarm.

Gestion des services sur Docker Swarm

Le service est un terme de déploiement d’application sur Docker Swarm. En d’autres termes, il est l’image de vos microservices. Il peut s’agir d’un serveur HTTP, d’un serveur de base de données ou d’autres applications qui seront exécutées sur votre Docker Swarm.

Pour configurer un service dans Docker Swarm, il faudra d’abord spécifier l’image que vous allez utiliser, le port qui sera exposé, ainsi que le nombre de répliques.

Après avoir déployé Docker Swarm, vous allez présentement apprendre le déploiement de base de vos services sur Docker Swarm.

Créez un nouveau service « test-httpd » à partir de la commande « docker service create » comme ci-dessous.

Dans cet exemple, vous créerez un nouveau service « test-httpd » avec la réplique 1 et exposer le port « 8000 » sur le nœud Swarm. L’image que vous allez utiliser est « httpd:alpine ».

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine
Eéxcution du service Docker Swarm
Exécuter le service

Lorsque vous avez lancé le service « test-httpd », vérifiez-le à l’aide de la commande suivante. Vous devriez voir que le service « test-httpd » fonctionne avec 1 réplique et expose le port TCP 8000.

docker service ls
Liste de services docker
liste service

Maintenant, vous devez exécuter la commande suivante pour vérifier les détails du service « test-httpd ».

docker service inspect test-httpd
docker service inspect --pretty test-httpd

Ci-dessous, vous verrez le service détaillé de « test-httpd ». Cela inclut le nombre de répliques, les ports externes, l’image de base que vous utilisez, etc.

Inspection de la liste des services Docker
inspecter le service

Vous pouvez aussi vérifier le conteneur en cours d’exécution sur le service « test-httpd » à partir de la commande « docker service ps » comme ci-dessous.

docker service ps test-httpd

Vous pouvez ensuite voir que le conteneur « test-httpd.1 » est en cours d’exécution sur le serveur « manager ».

Liste de conteneurs en cours d'exécution
Liste de conteneurs en cours d’exécution

Maintenant, ouvrez le port « 8000 » sur tous les serveurs via la commande ufw ci-dessous.

sudo ufw allow 8000/tcp

Ensuite, vérifiez le service « test-httpd » en exécutant la commande curl ci-dessous. Le « 192.168.5.30 » est l’adresse IP du Swarm Manager et le service « test-httpd » fonctionne sur le port 8000.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Vous allez voir la page index.html par défaut du service « test-httpd ».

Service swarm accessible
Accès service

Mise à l’échelle des services sur Docker Swarm

Désormais, vous allez apprendre à mettre à l’échelle vos services sur Docker Swarm.

Exécutez la commande suivante pour mettre à l’échelle le service « test-httpd » à 3 répliques.

docker service scale test-httpd=3
Mise à l'échelle des services sur Docker Swarm
mise à l’échelle du service

Maintenant, vérifiez le conteneur en cours d’exécution sur le service « test-httpd » en utilisant la commande ci-dessous. Vous devriez, en effet, voir 3 conteneurs différents sur le service « test-http », exécuté sur le gestionnaire de serveur, le nœud 1, et le nœud 2.

docker service ps test-httpd
Liste de service ps test-httpd
liste services

Enfin, exécutez la commande docker suivante pour vérifier le conteneur en cours d’exécution sur les serveurs node1 et node2. Vous devriez ensuite voir que le conteneur avec le nom « test-httpd.random name » est en cours d’exécution sur les deux serveurs. En outre, vous allez aussi voir que le conteneur est accessible via le port TCP 8000.

Vérification du conteneur sur le noeud1.

docker ps
curl node1:8000
Vérification nœud 1
vérification conteneur sur node1

Vérification du conteneur sur le nœud2

docker ps
curl node2:8000
vérification conteneur sur node2
vérification conteneur sur node2

Suppression de services sur Docker Swarm

Le moment est venu de nettoyer votre environnement en supprimant les services que vous avez déployés sur Docker Swarm.

Exécutez la commande suivante pour retirer et supprimer le service « test-httpd » du Docker Swarm.

docker service rm test-httpd

Puis, vous devrez aussi vérifier le service « test-httpd » via la commande « docker service inspect » ci-dessous. Vous devriez voir que le service est supprimé.

docker service inspect test-httpd
Supression de service docker swarm
service supprimé

En outre, vous pouvez également vérifier la liste des conteneurs et des images en cours d’exécution sur votre Swarm à l’aide de la commande docker ci-dessous.

Vous devriez voir que le conteneur est supprimé et que l’image « httpd:alpine » est disponible sur tous les serveurs.

docker ps
docker images
Vérifiez si le service est supprimé ou non
vérifier le service supprimé

Conclusion

Dans ce tutoriel, vous avez déployé le Docker Swarm avec 3 serveurs Debian 11. Vous avez également appris l’installation de base de Docker Engine sur un serveur Linux et la configuration de base du pare-feu UFW sur un système Debian. Pour terminer, vous avez également appris le déploiement de base d’une application sur Docker Swarm à partir de la commande « docker service ».

Grâce à ce tuto, vous pouvez désormais déployer vos applications conteneurisées avec toutes les dépendances à Docker Swarm. Vous pouvez aussi ajouter d’autres Swarm Manager pour configurer la haute disponibilité de votre environnement Docker Swarm.

Aina Strauss

À lire aussi

Convertir votre fichier .py (python) en un fichier .exe (executable) : Guide étape par étape

Mis à jours 1 septembre 2022 Vous recherchez un guide pour convertir votre fichier python …