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 hello
example-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