Gestion Docker Swarm
Cet article vous propose un guide complet pour la gestion de Docker Swarm, l’outil d’orchestration de conteneurs intégré à Docker. Nous y aborderons les méthodes pour administrer efficacement un cluster, depuis l’ajout de nœuds jusqu’à la gestion des services et des réseaux. Vous apprendrez également à optimiser les performances, garantir la disponibilité et résoudre les problèmes courants liés à l’orchestration de conteneurs avec Docker Swarm.
Prérequis → Cours précèdent
I. Créer son premier stack.yaml
1. Créer un dossier nginx
2. Créer un fichier stack.yaml dans ce dossier
mkdir nginx
nano nginx/stack.yaml
3. Coller la configuration suivante :
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: motdepasse
networks:
- mon_reseau
volumes:
- db_data:/var/lib/postgresql/data
networks:
mon_reseau: {}
volumes:
db_data: {}
(I) Info
Ici, le stack sera constitué d’un serveur web et d’une base de données.
ans cet exemple, deux services sont définis : web utilisant l’image nginx et db utilisant l’image postgres. La section ports sous web indique que le port 80 du conteneur sera mappé sur le port 80 de l’hôte.
4. Lancer le stack avec la commande suivante :
docker stack deploy -c stack.yaml nginx
5. Vérifier son fonctionnement avec la commande suivante :
docker stack services nginx
ID NAME MODE REPLICAS IMAGE PORTS
qlatnska6rwi nginx_db replicated 1/1 postgres:latest
6jtpso5k8l92 nginx_web replicated 1/1 nginx:latest *:80->80/tcp
Pour afficher les logs d’un service spécifique, utiliser la syntaxe suivante :
docker service logs -f qlatnska6rwi
nginx_db.1.5pe83z6phxbg@docker-2 | 2024-10-07 12:42:25.157 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
nginx_db.1.5pe83z6phxbg@docker-2 | 2024-10-07 12:42:25.157 UTC [1] LOG: listening on IPv6 address "::", port 5432
nginx_db.1.5pe83z6phxbg@docker-2 | 2024-10-07 12:42:25.165 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
nginx_db.1.5pe83z6phxbg@docker-2 | 2024-10-07 12:42:25.174 UTC [62] LOG: database system was shut down at 2024-10-07 12:42:25 UTC
nginx_db.1.5pe83z6phxbg@docker-2 | 2024-10-07 12:42:25.182 UTC [1] LOG: database system is ready to accept connections
Ici, on peut voir les dernières lignes de logs du service de base de données de la stack nginx.
A tout moment il est possible d’apporter des modifications à son fichier yaml, pour mettre à jour les services il suffit de lancer la commande suivante :
docker stack deploy -c stack.yaml nomdustack
II. Gestion des stacks Docker Swarm
Maintenant que le service tourne correctement, on va essayer d’ajouter des instances de ce stack.
Pour lister les services en cours :
docker stack services nginx
ID NAME MODE REPLICAS IMAGE PORTS
qlatnska6rwi nginx_db replicated 1/1 postgres:latest
6jtpso5k8l92 nginx_web replicated 1/1 nginx:latest *:80->80/tcp
Pour augmenter le nombre de répliques d’un service, utiliser la syntaxe suivante :
docker service update --replicas=5 nginx_web
nginx_web
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service nginx_web converged
On peut maintenant voir que notre service nginx_web est à 5 repliques :
ID NAME MODE REPLICAS IMAGE PORTS
qlatnska6rwi nginx_db replicated 1/1 postgres:latest
6jtpso5k8l92 nginx_web replicated 5/5 nginx:latest *:80->80/tcp
Même méthode pour réduire le nombre de répliques :
docker service update --replicas=2 nginx_web
nginx_web
overall progress: 2 out of 2 tasks
1/2: running
2/2: running
verify: Service nginx_web converged
III. Commandes docker swarm
Vérifiez les logs du service pour les erreurs lors de la mise à jour :
docker service logs mon_service
Vérifiez la configuration de l’équilibrage de charge et assurez-vous que tous les services fonctionnent comme prévu
docker service ls
Vérifiez la connectivité réseau et les configurations de pare-feu.
docker node ls
Pour supprimer une stack de votre cluster Docker Swarm, utilisez la commande docker stack rm. Par exemple, pour supprimer une stack nommée ma_stack, exécutez :
docker stack rm ma_stack
Après la suppression d’une stack, certains réseaux peuvent rester orphelins. Pour les nettoyer, vous pouvez utiliser la commande docker network prune
docker network prune
De même, pour nettoyer les volumes orphelins, utilisez docker volume prune :
docker volume prune
Au fil du temps, votre système peut accumuler des images Docker inutilisées. Pour les supprimer, utilisez :
docker image prune
Pour un nettoyage plus approfondi, y compris des images utilisées dans des conteneurs arrêtés, utilisez :
docker image prune -a
Enfin, pour supprimer les conteneurs qui ont été arrêtés, vous pouvez utiliser :
docker container prune