Dans ce TP, vous allez :
- Créer un cluster Swarm avec plusieurs nœuds.
- Déployer un service simple « ping » avec Nginx.
- Mettre à l’échelle ce service.
- Effectuer une mise à jour progressive vers un service « pong ».
- Visualiser la répartition des conteneurs.
- Activer un point d’accès Wi-Fi sur un téléphone pour connecter tous vos PC.
- Initialiser le Swarm sur un premier nœud (manager) :
docker swarm init --advertise-addr <IP_MANAGER>
- Rejoindre le cluster depuis les autres nœuds (workers) :
docker swarm join --token <TOKEN> <IP_MANAGER>:2377
- Vérifier les nœuds :
docker node ls
Note : Nous utilisons une image personnalisée au lieu de l'image Nginx par défaut afin de mieux contrôler son contenu, notamment pour y inclure nos propres fichiers HTML et assurer une mise à jour cohérente lors du rolling update.
- Créer un fichier
docker-compose.yml
:version: '3.8' services: web: image: mon-registre/mon-image:latest deploy: replicas: 3 ports: - "8080:80" volumes: - ./html-ping:/usr/share/nginx/html
- Dans le dossier
html-ping
, créer un fichierindex.html
avec le texte "ping".
- Dans le dossier
- Construire et tagger l’image avant le déploiement :
docker build -t mon-image:latest . # Assurez-vous que le Dockerfile est présent dans le répertoire courant docker tag mon-image:latest <URL_DU_REGISTRE>/mon-image:latest # Remplacez <URL_DU_REGISTRE> par l'adresse de votre registre
- Pousser l’image vers un registre (obligatoire) :
docker push mon-registre/mon-image:latest
- Déployer la stack :
docker stack deploy -c docker-compose.yml tp8stack
- Tester l’accès :
- Ouvrez un navigateur sur
http://<IP_MANAGER>:8080
: vous devriez voir "ping".
- Ouvrez un navigateur sur
- Monter à 10 réplicas :
docker service scale tp8stack_web=10
- Vérifier la répartition :
docker service ps tp8stack_web
- Redescendre à 4 réplicas :
docker service scale tp8stack_web=4
-
Modifier votre page web pour afficher "pong" :
- Dans un nouveau dossier
html-pong
, créer un fichierindex.html
avec le texte "pong".
- Dans un nouveau dossier
-
Construire et tagger l’image mise à jour :
docker build -t mon-image:latest . docker tag mon-image:latest mon-registre/mon-image:latest
-
Pousser l’image vers un registre (obligatoire) :
docker push mon-registre/mon-image:latest
-
Mettre à jour le service :
docker service update \ --image mon-registre/mon-image:latest \ tp8stack_web
-
Vérifier la transition progressive :
docker service ps tp8stack_web
- Le service doit passer de « ping » à « pong » sans interruption.
- Comment vérifié si il y a une intéruption ? A vour d'essayer des méthodes.
- Déployer Docker Swarm Visualizer :
- A vous de jouer ;)
- Aller sur
http://<IP_MANAGER>:9000
pour voir la répartition des conteneurs.
- Supprimer la stack :
docker stack rm tp8stack
- Optionnel : quitter le Swarm sur chaque nœud (sauf manager) :
docker swarm leave
- Sur le manager :
docker swarm leave --force