LAB : Setup Docker Swarm Cluster#
Présentation#
Objectifs:#
- Familiarisation avec Docker-swarm
- Déploiement d'un cluster Docker Swarm
- Appropriation des concepts d'orchestration avec Swarm
Architecture#
Dans ce lab, nous allons déployer un cluster composé de 2 noeuds:
lcf_manager_node: Manager noeudlcf_worker_node: Worker noeud
NB: vous pouvez nommer vos noeuds comme vous voulez.

Prérequis#
- Connaissance de Docker
- Familiarisation avec les concepts de base de Docker Swarm
- 02 Instance EC2 avec docker installé sur chacune
- Minimum de connaissance sur Linux
Déroulement du Lab#
Etape 1 : Création du groupe de sécurité lcf-sg#
Pour que les noeuds de Swarm puissent échanger, il faut que les ports suivants soient ouverts:
-
Port 2377 TCP: pour la communication avec et entre les nœuds
-
Port 7946 TCP/UDP: pour la découverte des nœuds du réseau superposé (overlay)
-
Port 4789 UDP (configurable): pour le trafic du réseau superposé (overlay)
Pour les besoins de ce labs, nous allons également ouvrir les ports:
-
Port 22 SSH: pour pouvoir se connecter à la machine via SSH
-
Port 80 HTTP: pour se connecter à l'app qui sera déployé dans la suite
Pour ce faire naviguez dans le menu EC2 > Réseau & Sécurité > Groupe de sécurité et:
- Cliquer sur Créer un groupe de sécurité et remplissez le formulaire avec les informations suivantes:
- Nom du groupe de sécurité: lcf-sg
- Description:
- vpc: Laisser l'option par défaut
- Cliquer sur ajouter une règle entrante et la remplir comme suit:

Etape 2: Provisionning des instances EC2#
Connectez-vous à la console AWS et démarrer 03 instances EC2 avec seulement les paramètres suivants à changer: - Name: lcf-manager, lcf-worker01, lcf-worker02 (Un pour chaque VM) - AMI: Ubuntu 24.04 LTS - Instance Type: t2.micro - Nom de la paire de clés : Continuer sans paire de clés - Groupe se sécurité: lcf-sg
Avant de lancer la création, dépilez Détails avancés et rajouter dans la section Données utilisateur le code ci-dessous:
#!/bin/bash
# Update the package database
sudo apt update -y
# Install necessary prerequisites
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker's official APT repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update the package database with Docker packages
sudo apt update -y
# Install Docker CE (Community Edition)
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Start and enable Docker service
sudo systemctl start docker
sudo systemctl enable docker
# Add 'ubuntu' user to the docker group to run Docker without sudo
sudo usermod -aG docker ubuntu
NB: Au besoin, consultez la partie prérequis sur comment lancer une instance EC2 avec AWS
La figure ci-dessous montre les 03 instances provisionnés sur AWS.

Pour se connecter à l'une des instances par SSH, cliquer sur l'entrée correspondante à l'instance esuite sur le bouton Se connecter. Laissez les options par défaut puis cliquer encore sur Se connecter
Etape 3: Initialiser un cluster Swarm#
La commande suivante devra être executée sur l'instance lcf-manager. Elle permettra d'initialiser le cluster Swarm et de faire de lcf-manager le leader.
docker swarm init
Vous devriez avoir une sortie semblabe à la capture ci-dessous:

NB: Il est possible d'avoir plusieurs master pour des raisons de haute disponibilité.
Etape 4 : Ajout des workers au cluster#
Sur chacun des workers lcf-worker01 et lcf-worke02, la commande suivante devra être executée. Elle est renseignée dans l'output de la commande à l'étape 1.
docker swarm join --token <token> <ip-manager>:2377
NB: si vous ne parvenez pas à trouver le token ou si ce dernier est expiré, vous pouvez retrouver la commande avec l'instructionci-dessous
docker swarm join-token worker
Etape 5 : Afficher les details du cluster#
La commande suivante permet de lister les noeuds du cluster. Elle devra s'executer dans le noeud manager lcf-manager
docker node ls

Etape 6 : Créer un service pour tester le cluster#
Pour l'exemple ci-dessous, on va déployer un service nginx avec 1 replica, une limitation de la mémoire à 100Mo et une exposition sur le port 80 de la machine hôte.
docker service create --name lcf-app \
--replicas 1 \
--publish 80:80 \
--restart-condition=on-failure \
--limit-memory 100M \
nginx
Etape 7 : Afficher le status du service déployé#
docker service ls
docker ps
Etape 6: Accéder à l'interface de votre app#
Lancer votre navigateur et accéder à l'url http://<ip-public-manager>.
Etape 7: Mettre à jour l'image du service#
Il est possible de mettre à jour votre application depuis votre nouvelle image sans interruption de service.
docker service update --image nginx:stable-alpine lcf-app
Etape 8: Mettre à jour le nombre de replicas à 2#
docker service scale lcf-app=2
docker service ls
docker ps

Etape 9: Supprimer le service#
La commande ci-dessous permet de supprimer le service.
docker service rm lcf-app
Conclusion#
Dans la suite, nous allons voir comment déployer un ensemble de services à travers un stack. N'oubliez pas d'éteindre cos instances EC2, si vous ne passez pas directement au prochain lab pour éviter des coûts additionnels