Se grouper par 2 ou 3 pour créer un cluster à partir de vos VM respectives (il faut utiliser une commande Swarm pour récupérer les instructions nécessaires : docker swarm init devrait vous orienter).
Si grouper plusieurs des VM n’est pas possible, vous pouvez faire un cluster à un seul noeud, ou bien créer un cluster multi-nodes très simplement avec l’interface du site Play With Docker, il faut s’y connecter avec vos identifiants Docker Hub. Vous pouvez vous connecter à ces VM en SSH.
Vous pouvez faire docker swarm --help pour obtenir des infos manquantes, ou faire docker swarm leave --force pour réinitialiser votre configuration Docker Swarm si besoin.
N’hésitez pas à regarder dans les logs avec systemctl status docker comment se passe l’élection du nœud leader, à partir du moment où vous avez plus d’un manager.
Afin de visualiser votre installation Swarm, utilisons : https://github.com/dockersamples/docker-swarm-visualizer
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer
En ligne de commande :
docker service create --name whoami --replicas 5 -p 9999:80 traefik/whoami
deploy: A l’aide de la propriété deploy: de docker compose, créer un service en 5 exemplaires (replicas) à partir de l’image traefik/whoami accessible sur le port 9999 et connecté au port 80 des 5 replicas.
services:
whoami:
image: traefik/whoami
ports:
- 9999:80
deploy:
replicas: 5
Accédez à votre service depuis un node et actualisez plusieurs fois la page (Ctrl+Maj+R sinon le cache du navigateur vous embêtera). Les informations affichées changent. Pourquoi ?
service scale pour changer le nombre de replicas de votre service et observez le changement avec docker service ps helloexample-voting-app Cloner l’application example-voting-app ici : https://github.com/dockersamples/example-voting-app
Lire le schéma d’architecture de l’app example-voting-app sur Github.
Lire attentivement le fichier docker-stack.yml. Ce sont des fichiers Docker Compose classiques avec différentes options liées à un déploiement via Swarm. Quelles options semblent spécifiques à Docker Swarm ? Ces options permettent de configurer des fonctionnalités d'orchestration.
Avec docker swarm init, transformer son installation Docker en une installation Docker compatible avec Swarm. Lisez attentivement le message qui vous est renvoyé.
Déployer la stack du fichier docker-stack.yml : docker stack deploy --compose-file docker-stack.yml vote
docker stack ls indique 6 services pour la stack vote. Observer également l’output de docker stack ps vote et de docker stack services vote. Qu’est-ce qu’un service dans la terminologie de Swarm ?
Accéder aux différents front-ends de la stack grâce aux informations contenues dans les commandes précédentes. Sur le front-end lié au vote, actualiser plusieurs fois la page. Que signifie la ligne Processed by container ID […] ? Pourquoi varie-t-elle ?
Scaler la stack en ajoutant des replicas du front-end lié au vote avec l’aide de docker service --help. Accédez à ce front-end et vérifier que cela a bien fonctionné en actualisant plusieurs fois.
puis spécifier quelques options d’orchestration exclusives à Docker Swarm : que fait mode: global ? N’oubliez pas de redéployer votre Compose file.
Avec Portainer ou avec docker-swarm-visualizer, explorer le cluster ainsi créé.
Trouver la commande pour déchoir et promouvoir l’un de vos nœuds de manager à worker et vice-versa.
Puis sortir un nœud du cluster (drain) : docker node update --availability drain <node-name>
example-voting-app Tenter :
docker-stack.yml) pour qu’il se base sur l’image que vous venez de reconstruire.update_config:. Un message de warning devrait apparaître, pourquoi ?Le fichier kube-deployment.yml de l’app example-voting-app décrit la même app pour un déploiement dans Kubernetes plutôt que dans Docker Compose ou Docker Swarm. Tentez de retrouver quelques équivalences entre Docker Compose / Swarm et Kubernetes en lisant attentivement ce fichier qui décrit un déploiement Kubernetes.
créer un secret avec : echo "This is a secret" | docker secret create my_secret_data
permettre l’accès au secret via : docker service create --name monservice --secret my_secret_data redis:alpine
lire le contenu secret dans : /var/run/my_secret_data
A partir d’une commande Curl, observez les changements de version d’un conteneur.
Vous pouvez vous servir de cette image qui lit la variable d’environnement VERSION :
docker run -e VERSION=v2.0.0 -p 8080:8080 containersol/k8s-deployment-strategies
Préparez 2 fichiers : docker-compose.init.yml et docker-compose.upgrade.yml, représentant vos deux scénarios. Vous pouvez vous inspirer de cette page et de son dépôt :
Nous allons maintenant mettre à jour, lancez d’abord dans un terminal la commande : while true; do curl localhost:8080; echo; sleep 1; done
Appliquez votre docker-compose.upgrade.yml et observez
Vous pouvez désormais faire l’exercice 2 du TP 7 pour configurer un serveur web qui permet d’accéder à vos services Swarm via des domaines spécifiques.
https://www.crunchydata.com/blog/an-easy-recipe-for-creating-a-postgresql-cluster-with-docker-swarm