D'accord, nous allons procéder étape par étape pour réaliser ce TP sur
Docker Swarm. Je vais t'expliquer chaque commande et chaque concept en
détail.
🔹 Partie I : Déploiement de Docker Swarm
Dans cette partie, nous allons créer un cluster Docker Swarm en configurant
une machine comme Manager et deux autres comme Workers.
1️⃣Préparation des machines virtuelles
Avant tout, assure-toi d’avoir 3 machines virtuelles avec Docker installé. Tu
peux vérifier si Docker est bien installé avec :
bashCopierModifierdocker --version
Si Docker n'est pas installé, installe-le avec la commande suivante :
bashCopierModifiercurl -fsSL [Link] | sh
Vérifie que le service Docker est bien démarré :
bashCopierModifiersudo systemctl start docker
sudo systemctl enable docker
2️⃣Initialisation du cluster Swarm (sur la machine Manager)
Sur la machine qui va jouer le rôle de Manager, exécute la commande :
bashCopierModifierdocker swarm init --advertise-addr [Link]
📌 Explication :
docker swarm init : Initialise un cluster Docker Swarm.
--advertise-addr [Link] : Spécifie l'adresse IP utilisée pour
communiquer avec les autres nœuds.
Après l'exécution, la commande affiche un token d'authentification
permettant aux Workers de rejoindre le cluster.
3️⃣Ajout des Workers au cluster
Sur chaque machine Worker, exécute la commande fournie par la
machine Manager :
bashCopierModifierdocker swarm join --token
letokenrenvoyeparleswarminit [Link]
📌 Explication :
docker swarm join : Permet à un nœud de rejoindre un cluster Swarm
existant.
--token : Utilise le token fourni par le Manager pour s'authentifier.
[Link] : Indique l'adresse et le port du Manager.
📌 Vérification des Workers ajoutés
Sur la machine Manager, tape :
bashCopierModifierdocker node ls
Cela affiche la liste des nœuds (Manager et Workers).
4️⃣Visualisation de l’infrastructure
Ajoute un visualiseur de l’état du cluster avec :
bashCopierModifierdocker service create --name=viz --publish
mode=host,target=8080,published=8080 \
--mode=global --constraint=[Link]==manager \
--mount=type=bind,src=/var/run/[Link],dst=/var/run/[Link] \
dockersamples/visualizer
📌 Accéder au visualiseur :
Ouvre ton navigateur et entre l'URL :
cppCopierModifier[Link]
5️⃣Récupération du token Swarm (si perdu)
Si tu as perdu le token du Swarm, utilise ces commandes sur le Manager :
Pour récupérer le token des Workers :
bashCopierModifierdocker swarm join-token worker
Pour récupérer le token des Managers :
bashCopierModifierdocker swarm join-token manager
6️⃣Promotion d’un Worker en Manager
Tu peux avoir plusieurs machines Manager en exécutant :
bashCopierModifierdocker node promote nom_du_noeud
Inversement, pour le remettre en Worker :
bashCopierModifierdocker node demote nom_du_noeud
7️⃣Quitter et rejoindre le cluster
Pour enlever un Worker du cluster (exécuté sur le Worker) :
bashCopierModifierdocker swarm leave
Pour le remettre dans le cluster (exécuté sur le Manager) :
bashCopierModifierdocker swarm join-token worker
🔹 Partie II : Usage d'un cluster Swarm
Ici, nous allons exécuter des services dans le cluster.
1️⃣Déploiement de Nginx en mode Swarm
Sur le Manager, exécute :
bashCopierModifierdocker service create --name web --publish 80:80 --
replicas=3 nginx:latest
📌 Explication :
--name web : Nomme le service "web".
--publish 80:80 : Mappe le port 80 du container au port 80 de l’hôte.
--replicas=3 : Exécute 3 instances du service.
2️⃣Vérifications
Lister tous les services :
bashCopierModifierdocker service ls
Lister toutes les instances du service :
bashCopierModifierdocker service ps web
Obtenir des détails sur un service :
bashCopierModifierdocker service inspect web
3️⃣Mise à l’échelle du service
Augmenter à 5 réplicas :
bashCopierModifierdocker service scale web=5
Réduire à 1 réplica :
bashCopierModifierdocker service scale web=1
Supprimer un service (ne pas exécuter ici) :
bashCopierModifierdocker service rm web
4️⃣Test de la tolérance aux pannes
1. Supprime un container depuis un Worker :
bashCopierModifierdocker kill id_du_container
2. Observe que Swarm relance automatiquement une nouvelle instance.
🔹 Partie III : Gestion des nœuds
1️⃣Mettre un Worker en maintenance
Sur le Manager :
bashCopierModifierdocker node update --availability drain
nom_du_worker
📌 Explication :
drain empêche l'exécution de nouveaux services sur ce Worker.
Pour le remettre en ligne :
bashCopierModifierdocker node update --availability active
nom_du_worker
2️⃣Promotion et rétrogradation
Promouvoir un Worker en Manager :
bashCopierModifierdocker node promote nom_du_worker
Rétrograder un Manager en Worker :
bashCopierModifierdocker node demote nom_du_manager
🔹 Partie IV : Réseau Overlay
1. Supprime les services existants (sauf Viz) :
bashCopierModifierdocker service rm web
2. Crée un réseau overlay :
bashCopierModifierdocker network create --driver overlay --
subnet=[Link]/24 --attachable reseau
3. Déploie Nginx sur ce réseau :
bashCopierModifierdocker service create --name web --network
reseau --publish 80:80 --replicas=3 nginx
4. Vérifie l’adressage IP :
bashCopierModifierdocker inspect web
🔹 Partie V : Création d'un registry privé
1. Crée un service de registry :
bashCopierModifierdocker service create --name registry --publish
5000:5000 registry:2
2. Pour le forcer à tourner sur le Manager :
bashCopierModifierdocker service create --name registry --publish
5000:5000 --constraint '[Link]==manager' registry:2
3. Tester le registry :
bashCopierModifierdocker pull hello-world
docker tag hello-world localhost:5000/my-hello-world
docker push localhost:5000/my-hello-world
docker rmi hello-world localhost:5000/my-hello-world
docker pull localhost:5000/my-hello-world
Voilà un guide détaillé pour chaque partie du TP. Dis-moi si tu as besoin
d’aide pour un point spécifique ! 🚀