AdminII TP8 Docker Swarm & Haute Disponibilité - dudleydehenau/Ephec GitHub Wiki
Avant de pouvoir déployer notre service sur le Swarm, il nous faut une image sur Docker Hub auquel un noeud peut accéder.
On crée un petit fichier index.html
<!DOCTYPE html>
<html>
<head>
<title>Mon App Swarm!</title>
</head>
<body>
<h1>Bienvenue sur mon service Nginx via Docker Swarm!</h1>
<p>Cette page est servie par une instance Nginx gérée par Swarm.</p>
<p>Version 1.0</p>
</body>
</html>
qu'on lie à notre Dockerfile
FROM nginx:1.25.4
COPY ./index.html /usr/share/nginx/html/index.html
Et on peut contruire l'image
docker build -t votre_user_dockerhub/mon-app-swarm:1.0 .
Un petit test en local pour vérifier que tout fonctionne comme prévu:
docker run -d -p 8081:80 votre_user_dockerhub/mon-app-swarm:1.0
1.2. Publication de l'image sur Docker Hub
Une fois l'image construite et testée on se connecte sur Docker Hub et l'on y push notre image.
docker login
Puis, on pousse notre image :
docker push votre_user_dockerhub/mon-app-swarm:1.0
On a vérifié sur l'interface web de Docker Hub que notre image était bien présente. Pour s'assurer qu'elle était accessible depuis "n'importe où", on l'a testée en la tirant depuis notre second VPS
- Mise en place de notre Swarm
2.1. Initialisation du Swarm
Sur notre premier VPS, que nous avons désigné comme manager initial, on lance la commande :
docker swarm init --advertise-addr 192.168.1.200
Et on exécute sur les autres vps la commande qui est retournée
docker swarm join --token <TOKEN_RECUPERE> <IP_DU_VPS_MANAGER>:2377
Docker info pour vérifier que tout fonctionne :
2.2. Gestion des Nœuds
docker node ls
2.3. Docker Service : Notre application en action !
On a créé notre service web en utilisant l'image poussée précédemment sur Docker Hub. On le réplique deux fois pour qu'il tourne sur nos deux VPS :
docker service create --name mon-web-service -p 8080:80 --replicas 2 votre_user_dockerhub/mon-app-swarm:1.0
Pour voir où tournent nos conteneurs (les "tâches" du service) :
docker service ps mon-web-service
On peut aussi vérifier avec docker ps sur chaque VPS. La publication des ports se fait sur tous les nœuds du Swarm grâce au "routing mesh". On peut donc accéder à notre service via http://192.168.1.200:8080 et http://192.168.1.201:8080.
4.Mise à jour d'un service
Redimentionnement :
docker service scale mon-web-service=3
Mise a jour de l'image :
Modifié index.html
Reconstruit l'image avec un nouveau tag : ciran0_dockerhub/mon-app-swarm:2.0.
Poussé cette nouvelle version sur Docker Hub.
docker service update --image votre_user_dockerhub/mon-app-swarm:2.0 mon-web-service
Swarm effectue une mise à jour progressive (rolling update) évite les interruptions.
5.Test de résilience
Que se passe-t-il si un nœud tombe ? On a simulé cela en arrêtant Docker sur l'un de nos VPS (par exemple sudo systemctl stop docker sur swarm-worker01). Le service est resté accessible via l'IP du manager. 3. DNS Round Robin
Round Robin consiste à associer plusieurs adresses IP (celles des différents noeuds de notre swarm) à un même nom de domaine (FQDN) via plusieurs enregistrements DNS de type A. Par exemple :
monservice.l2-6.ephec-ti.be. IN A 192.168.1.200 monservice.l2-6.ephec-ti.be. IN A 192.168.1.201
Lorsqu'un client résout monservice.l2-6.ephec-ti.be., le serveur DNS lui renvoie l'une des IP, distribuant ainsi la charge.