Comment arrêter tous les conteneurs Docker en utilisant Anible

Comment arrêter tous les conteneurs Docker en utilisant Anible
ANIBLE dispose de nombreux modules pour automatiser votre hôte Docker, des conteneurs, des volumes, des réseaux, etc. Si vous souhaitez arrêter vos conteneurs Docker Running, vous pouvez également le faire.

Dans cet article, je vais vous montrer comment arrêter un conteneur Docker spécifique. Je vais également vous montrer comment arrêter tous les conteneurs Docker en cours d'exécution, ou tous les conteneurs Docker exécutant une image Docker spécifique en utilisant Anible. Alors, commençons.

Conditions préalables:

Si vous voulez essayer les exemples de cet article,

1) Vous devez faire installer un anible sur votre ordinateur.
2) Vous devez faire installer Docker sur votre ordinateur ou un hôte Ubuntu distant.
3) Vous devez installer la bibliothèque Python Docker sur votre hôte Docker.
4) Vous devez configurer l'hôte Docker pour ANSIBLE AUTOMATION.

NOTE: Hôte docker L'ordinateur est-il installé Docker.

Il existe de nombreux articles sur Linuxhint dédiés à l'installation de Ansible et à la configuration des hôtes pour l'automatisation anible et l'installation de Docker. Vous pouvez les vérifier si nécessaire.

Création d'un répertoire de projet:

Pour garder tous les fichiers et répertoires que nous créerons dans cet article organisé, c'est une bonne idée de créer un répertoire de projet.

Pour créer un répertoire de projet docker1 / Dans votre répertoire de travail actuel, exécutez la commande suivante:

$ mkdir -pv docker1 / playbooks

Maintenant, accédez à la docker1 / Répertoire de projet comme suit:

$ cd docker1 /

Configuration de l'automatisation de l'hôte Docker Remote:

Si Docker est installé sur un hôte Ubuntu distant que vous souhaitez automatiser en utilisant Anible, alors cette section est pour vous.

Créez d'abord un fichier d'inventaire ANSIBLE hôtes avec la commande suivante:

$ hôtes nano

Maintenant, ajoutez l'adresse IP ou le nom DNS de votre hôte docker dans le hôtes Fichier d'inventaire comme suit.

[docker]
VM4.nodekite.com

Dans mon cas, le nom DNS de mon hôte Ubuntu Docker est VM4.nodekite.com. Ce sera différent pour vous. Alors, assurez-vous de le remplacer si nécessaire.

Une fois que vous avez terminé, appuyez sur+ X suivie par Y et Pour sauver le hôtes déposer.

Maintenant, créez un fichier de configuration anible anable.CFG comme suit:

$ nano anible.CFG

Maintenant, saisissez les lignes suivantes dans le anable.CFG fichier de configuration.

[docker]
VM4.nodekite.com

Une fois que vous avez terminé, appuyez sur+ X suivie par Y et Pour sauver le anable.CFG déposer.

Maintenant, vérifiez si vous pouvez cingler l'hôte Docker distant de votre ordinateur avec la commande suivante:

$ anible all -u anible -m ping

Comme vous pouvez le voir, je peux cingler mon hôte docker distant.

Comme vous pouvez le voir, j'ai docker 19.03.11 installé sur mon hôte Ubuntu Docker distant.

Maintenant, vous devez faire installer la bibliothèque Python Docker sur votre hôte Docker distant pour les modules Docker ANSIBLE pour fonctionner. Dans cet article, j'utilise Ubuntu. Alors, c'est ce que je vais couvrir.

Pour installer Python Docker Library sur votre hôte Docker distant (UBUNTU), créez un nouveau livre de jeu anible install_docker_python_lib.yaml dans le Playbooks / Répertoire comme suit:

$ nano playbooks / install_docker_python_lib.yaml

Maintenant, saisissez les lignes suivantes dans le install_docker_python_lib.yaml déposer.

- hôtes: docker
Utilisateur: ANSIBLE
devenir vrai
Tâches:
- Nom: Assurez-vous que le package Python3-Docker est installé
apte:
Nom: Python3-Docker
État: présent
Update_cache: true

Une fois que vous avez terminé, appuyez sur+ X suivie par Y et Pour sauver le install_docker_python_lib.yaml déposer.

Maintenant, exécutez le install_docker_python_lib.yaml Playbook comme suit:

$ anible-playbook playbooks / install_docker_python_lib.yaml

Le playbook doit s'exécuter avec succès et il installera la bibliothèque Python Docker sur votre hôte Docker distant.

Configuration de l'automatisation de l'hôte Docker local:

Si Docker est installé sur l'hôte où vous avez installé Ansible et que vous souhaitez l'automatiser en utilisant Ansible, alors cette section est pour vous.

Tout d'abord, créez un nouveau manuel ANSIBLE install_docker_python_lib.yaml dans le Playbooks / Répertoire comme suit:

$ nano playbooks / install_docker_python_lib.yaml

Maintenant, saisissez les lignes suivantes dans le install_docker_python_lib.yaml déposer.

- hôtes: localhost
Connexion: locale
Utilisateur: Shovon
devenir vrai
Tâches:
- Nom: Assurez-vous que le package Python3-Docker est installé
apte:
Nom: Python3-Docker
État: présent
Update_cache: true

Ici, la ligne Utilisateur: Shovon sets bousculade En tant qu'utilisateur qui exécutera les tâches. Ce sera différent pour vous. Alors, assurez-vous de le changer en votre nom d'utilisateur de connexion.

Vous pouvez trouver le nom d'utilisateur de connexion de votre hôte docker avec la commande suivante:

$ whoami

Une fois que vous avez terminé, appuyez sur+ X suivie par Y et Pour sauver le install_docker_python_lib.yaml déposer.

Maintenant, exécutez le install_docker_python_lib.yaml Playbook comme suit:

$ anible-playbook --ask-pass --ask-become-pass
playbooks / install_docker_python_lib.yaml

ANIBLE vous demandera le mot de passe de connexion de l'utilisateur que vous avez spécifié dans le playbook. Tapez le mot de passe de connexion et appuyez sur .

ANIBLE vous demandera également le mot de passe CETH / SUDO. Ce devrait être le même mot de passe que votre mot de passe de connexion. Alors, laissez-le vide et appuyez sur .

Le playbook devrait commencer à fonctionner. Cela peut prendre un certain temps pour terminer.

À ce stade, le Playbook devrait réussir et la bibliothèque Python Docker doit être installée.

Faire un ajustement nécessaire aux manuels:

Selon que vous gérez des conteneurs Docker sur votre hôte Docker local ou un hôte Docker distant, vous devez ajuster vos lecteurs en conséquence.

À partir des prochaines sections de cet article, je vais exécuter l'exemple de livres de lecture sur un hôte Docker distant. Ainsi, tous les livres de jeu commenceront par les lignes suivantes:

- hôtes: docker
Utilisateur: ANSIBLE
Tâches:

Si vous souhaitez exécuter les PlayBooks sur votre hôte Docker local, assurez-vous que les livres de jeu commencent à la place avec les lignes suivantes.

- hôtes: localhost
Connexion: locale
Utilisateur: Shovon
devenir vrai
Tâches:

Ensuite, remplacez avec les tâches que vous souhaitez exécuter et enregistrer le livre de jeu en appuyant sur + X suivie par Y et .

Vous devez également exécuter un peu de jeu ANSIBLE un peu différemment si vous allez gérer un hôte docker localement en utilisant Anible.

Vous pouvez exécuter un manuel ANSIBLE localement comme suit:

$ anible-playbook --ask-pass --ask-become-pass

Assurez-vous de changer sur le chemin de votre fichier yaml playbook anible.

Arrêt d'un conteneur Docker:

Si vous avez un conteneur Docker en cours d'exécution et que vous connaissez l'ID ou le nom du conteneur Docker, vous pouvez facilement arrêter ce conteneur Docker en utilisant Anible.

Dans cette section, je vais vous montrer comment faire ça.

Tout d'abord, je vais créer un Nginx (Nom de l'image) Conteneur Docker http_server1 (Nom du conteneur) comme suit:

$ docker run -p 8080: 80 -d --name http_server1 nginx

Comme vous pouvez le voir, le conteneur Docker http_server1 est en cours d'exécution.

$ docker ps

Pour arrêter le conteneur Docker http_server1 En utilisant Anible, créez un nouveau livre de jeu stop_container.yaml dans le Playbooks / Répertoire comme suit:

$ Nano PlayBooks / stop_container.yaml

Ensuite, saisissez les lignes suivantes dans le stop_container.yaml livre de jeu.

- hôtes: docker
Utilisateur: ANSIBLE
Tâches:
- Nom: Arrêtez le conteneur HTTP_SERVER1
docker_container:
Nom: http_server1
État: arrêté

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le stop_container.yaml déposer.

Ici, l'ANSIBLE docker_container Le module est utilisé pour arrêter le conteneur Docker http_server1.

Maintenant, exécutez le stop_container.yaml Playbook avec la commande suivante:

$ anible-playbook playbooks / stop_continer.yaml

Comme vous pouvez le voir, le conteneur Docker http_server1 ne fonctionne plus sur mon hôte docker distant.

$ docker ps

Vous pouvez répertorier tous les conteneurs Docker (en cours d'exécution, en pause, arrêté) avec la commande suivante:

$ docker ps - tout

Comme vous pouvez le voir, le conteneur Docker arrêté http_server1 est listé.

Arrêt de tous les conteneurs Docker en cours d'exécution:

Si vous souhaitez arrêter tous les conteneurs Docker en cours d'exécution sur votre hôte Docker en utilisant Anible, alors cette section est pour vous.

Tout d'abord, je vais créer 3 conteneurs Docker (serveur1, serveur2, et serveur3) pour que je puisse les arrêter tous en utilisant Anible plus tard.

Pour créer le serveur1 Docker Container, exécutez la commande suivante:

$ docker run -p 8081: 80 -d --name Server1 nginx

Pour créer le serveur2 Docker Container, exécutez la commande suivante:

$ docker run -p 8082: 80 -d --name Server2 nginx

Pour créer le serveur3 Docker Container, exécutez la commande suivante:

$ docker run -p 8083: 80 -d --name Server3 nginx

Comme vous pouvez le voir, le serveur1, serveur2, et serveur3 Les conteneurs Docker fonctionnent sur mon hôte docker distant.

$ docker ps

Pour arrêter tous ces conteneurs Docker, créez un nouveau livre de jeu stop_all_container.yaml dans ton Playbooks / Répertoire comme suit:

$ nano playbooks / stop_all_continer.yaml

Maintenant, saisissez les lignes suivantes dans le stop_all_container.yaml fichier de manuel.

- hôtes: docker
Utilisateur: ANSIBLE
Tâches:
- Nom: Obtenez une liste de tous les conteneurs en cours d'exécution
docker_host_info:
Conteneurs: Vrai
Enregistrement: docker_info
- Nom: arrêter tous les conteneurs en cours d'exécution
docker_container:
nom: 'item.Noms [0] | regex_replace ("^ /", "") '
État: arrêté
Loop: 'docker_info.conteneurs '

Pour sauver le stop_all_container.yaml fichier, appuyez sur + X suivie par Y et .

Ici, j'ai défini 2 tâches.

La première tâche utilise l'ANSIBLE docker_host_info module pour obtenir une liste de tous les conteneurs Docker en cours d'exécution et le stocke dans le docker_info variable.

La deuxième tâche boucle à travers le docker_info.conteneurs Array trouve les noms de conteneurs Docker en cours d'exécution et les arrête un par un.

Maintenant, exécutez le stop_all_container.yaml Playbook avec la commande suivante:

$ anible-playbook playbooks / stop_all_continer.yaml

Le playbook doit fonctionner avec succès comme vous pouvez le voir dans la capture d'écran ci-dessous.

Comme vous pouvez le voir, il n'y a pas de conteneurs Docker en cours d'exécution sur mon hôte Docker distant.

$ docker ps

Vous pouvez répertorier tous les conteneurs Docker (en cours d'exécution, en pause, arrêté) avec la commande suivante:

$ docker ps - tout

Comme vous pouvez le voir, les conteneurs Docker arrêtés serveur1, serveur2, et serveur3 sont répertoriés.

Arrêtez tous les conteneurs Docker exécutant une image spécifique:

Si vous souhaitez arrêter tous les conteneurs Docker exécutant une image Docker spécifique, cette section est pour vous.

Tout d'abord, créons des conteneurs de docker mannequin.

Je vais créer 2 conteneurs Docker (nginx1 et nginx2) en utilisant le Nginx Image Docker et 2 conteneurs Docker (http1 et http2) en utilisant le httpd Image docker pour la démonstration.

Pour créer le nginx1 Conteneur docker en utilisant le Nginx Image docker, exécutez la commande suivante:

$ docker run -d -p 8081: 80 --name nginx1 nginx

Pour créer le nginx2 Conteneur docker en utilisant le Nginx Image docker, exécutez la commande suivante:

$ docker run -d -p 8082: 80 --name nginx2 nginx

Pour créer le http1 Conteneur docker en utilisant le httpd Image docker, exécutez la commande suivante:

$ docker run -d -p 8091: 80 --name http1 httpd

Pour créer le http2 Conteneur docker en utilisant le httpd Image docker, exécutez la commande suivante:

$ docker run -d -p 8092: 80 --name http2 httpd

Comme vous pouvez le voir, le nginx1, nginx2, http1, et http2 Les conteneurs Docker fonctionnent sur mon hôte docker distant.

Pour arrêter tous les conteneurs Docker exécutant une image Docker spécifique (disons, nginx), créer un nouveau livre de jeu docker stop_all_image_continers.yaml dans le Playbooks / Répertoire comme suit:

$ Nano Playbooks / stop_all_image_continers.yaml

Maintenant, saisissez les lignes suivantes dans le stop_all_image_continers.yaml déposer.

- hôtes: docker
Utilisateur: ANSIBLE
Tâches:
- Nom: Obtenez une liste de tous les conteneurs en cours d'exécution
docker_host_info:
Conteneurs: Vrai
Enregistrement: docker_info
- Nom: Arrêtez tous les conteneurs exécutant l'image nginx
docker_container:
nom: 'item.Noms [0] | regex_replace ("^ /", "") '
État: arrêté
Quand: article.Image == 'nginx'
Loop: 'docker_info.conteneurs '

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le stop_all_image_continers.yaml déposer.

Ici, j'ai ajouté 2 tâches.

La première tâche utilise l'ANSIBLE docker_host_info module pour obtenir une liste de tous les conteneurs Docker en cours d'exécution et le stocke dans le docker_info variable.

La deuxième tâche boucle à travers le docker_info.conteneurs Array trouve les noms de conteneur Docker en cours d'exécution et exécute le docker_container Module pour chaque conteneur en cours d'exécution uniquement si le nom de l'image du conteneur est Nginx. Ensuite, il arrête les conteneurs Docker appariés.

Dans la deuxième tâche, la ligne suivante est utilisée pour vérifier si le conteneur Docker exécute le Nginx image. Vous pouvez le changer en un autre nom d'image Docker si vous le souhaitez.

Maintenant, exécutez le stop_all_image_continers.yaml Playbook comme suit:

$ anible-playbook playbooks / stop_all_image_continers.yaml

Comme vous pouvez le voir, seul le Nginx conteneurs (nginx1 et nginx2) sont modifiés (arrêtés). Le httpd conteneurs (http1 et http2) sont sautés.

Comme vous pouvez le voir, non Nginx Les conteneurs Docker fonctionnent sur mon hôte docker distant. Seulement le httpd Conteneurs Docker (http1 et http2) est en cours d'exécution.

$ docker ps

Vous pouvez répertorier tous les conteneurs Docker (en cours d'exécution, en pause, arrêté) avec la commande suivante:

$ docker ps - tout

Comme vous pouvez le voir, les conteneurs Docker arrêtés nginx1 et nginx2 sont répertoriés.

Conclusion:

Dans cet article, je vous ai montré comment arrêter un conteneur Docker en cours d'exécution, tous les conteneurs Docker exécutant une image Docker spécifique et tous les conteneurs Docker en cours d'exécution de votre hôte Docker. Pour ce faire, j'ai utilisé l'ANSIBLE docker_container et docker_host_info modules de cet article.

Pour en savoir plus sur ces modules, visitez les pages de documentation officielle suivantes.

[1] Docker_Container - Gérer les conteneurs Docker
[2] docker_host_info - récupère les faits sur l'hôte docker et les listes d'objets des services