Aller au contenu

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: {}  
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