TP08 - bpatureau/admin-2-TP GitHub Wiki
Noms des auteurs : Guillaume Ladrière, Bastien Patureau, Maxime Bongartz Date de réalisation : 1/06/2025
Tout d'abord on construit l'image sur base de notre Dockerfile et de la page qu'on veut ajouter à l'image :
FROM nginx:1.25.4
COPY ./index.html /usr/share/nginx/html/
On peut voir que le Dockerfile se base simplement sur l'image officielle nginx et rajoute notre page html au bon endroit. Ensuite on construit l'image :
docker build -t maxion78/mon_site:latest .
Puis on pousse l'image sur docker hub :
docker push maxion78/mon_site:latest
Maintenant on peut tester le site en lancent un container sur base de l'image :
docker run -d -p 8080:80 maxion78/mon_site:latest
Et pour finir on curl pour voir si on reçoit bien notre page custom :
curl http://localhost:8080
Effectivement on reçoit notre page.
Pour créer un swarm on va taper ces commandes :
docker swarm init
Pour ajouter des nodes manager, on va récupérer la commande à exécuter sur les autres VPS comme ceci :
docker swarm join-token manager
Ce qui nous donne cette commande en sortie et qui peut ensuite être exécutée sur nos autres VPS :
Nous avons trois nodes dans notre swarm qui sont de type manager (pas de worker car trop peu de nodes), le node leader est le host de Maxime car c'est celui là qui à créé le swarm. Pour le moment aucun container ne tourne mais par la suite ça sera le cas, ils seront répliqué sur les 3 VPS en fonctions des besoins. Pour illustrer cela voici un schéma post TP09, donc une infrastructure avec de containers répartis sur les VPS.
On peut voir que les services on été répartis stratégiquement pour obtenir une meilleure redondance et de bonnes performances. Par exemple on a vu que répliquer nos api plusieurs fois améliore les performances.
- Comment changer le type d'un node ?
Pour passer de worker à manager on peut faire
promote
:
docker node promote <node_id>
Pour passer de manager à worker on peut faire demote
:
docker node demote <node_id>
- Quelles commandes
docker node
sont disponibles, et lesquelles pourraient vous être utiles ?
docker node ls
Permet de lister les nodes de notre swarm
docker node inspect <node>
Permet d'inspecter un node pour voir les détails le concernant
docker node rm <node>
Permet de supprimer un node inactif. Et sinon pour voir toutes les commandes docker nodes
on peut faire :
docker node --help
-
Après avoir lancé pour la première fois votre service, sur quels nodes ce service est-il exécuté? Comment avez-vous obtenu la réponse ?
Le node tournait sur l'host de Guillaume qui à démarré le service et celui de Maxime, on a pu le voir grâce àdocker service ps <service>
(voir quel service tourne sur l'host) et sinon pour voir sur quel nodes tourne un service on peut fairedocker service ps mon_service
-
Le service a été lancé sur un port spécifique. Sur quel(s) VPS ce port est-il ouvert ?
Il est lancé sur le port 80:8080 et on peut le voir grâce à cette commande :docker service ls
. Le port est ouvert sur tous les VPS (grâce au routing mesh) même si la tâche ne tourne pas sur tous les nodes. -
Que se passe-t'il si vous stoppez un node ?
Si on stop un nodes mais qu'il reste des nodes actifs et que le leader est toujours là, alors docker swarm les redéploie sur un autre node. -
Et si vous aviez 'scalé' votre service à un seul replica et que vous stoppez le node sur lequel il tourne ?
Alors docker swarm le redéploie sur un autre node.
On à mis en place le round robin pour le service swarm
en ajoutant ceci dans notre fichier zone :
; Round-robin pour le service swarm
swarm IN A 54.36.180.26
swarm IN A 54.36.181.70
swarm IN A 54.36.180.122
On peut tester cela en effectuant des dig swarm.l1-2.ephec-ti.be
Comme on peut le voir sur ce screen, le round robin fonctionne bien car lorsqu'on fait un dig sur le service swarm, on reçoit les IPs de nos VPS dans un ordre diffèrent à chaque fois.