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.
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.
À lire aussi
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
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.
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
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 :
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
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
À 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.
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 ».
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
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 ».
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 ».
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
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
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.
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 ».
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 ».
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
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
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 du conteneur sur le nœud2
docker ps
curl node2:8000
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
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
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.