Ansible

Comment arrêter tous les conteneurs Docker à l'aide d'Ansible

Comment arrêter tous les conteneurs Docker à l'aide d'Ansible
Ansible dispose de nombreux modules pour automatiser votre hôte Docker, conteneurs, volumes, réseaux, etc. Si vous souhaitez arrêter vos conteneurs Docker en cours d'exécution, 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 à l'aide d'Ansible. Alors, commençons.

Conditions préalables:

Si vous voulez essayer les exemples de cet article,

1) Vous devez avoir Ansible installé sur votre ordinateur.
2) Docker doit être installé sur votre ordinateur ou sur un hôte Ubuntu distant.
3) Vous devez avoir la bibliothèque Python Docker installée sur votre hôte Docker.
4) Vous devez configurer l'hôte Docker pour l'automatisation Ansible.

REMARQUE: Hôte Docker est l'ordinateur sur lequel Docker est installé.

Il existe de nombreux articles sur LinuxHint dédiés à l'installation d'Ansible et à la configuration des hôtes pour l'automatisation d'Ansible et à l'installation de Docker. Vous pouvez les consulter si besoin.

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

Pour garder tous les fichiers et répertoires que nous allons créer dans cet article organisés, 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, naviguez jusqu'au docker1/ répertoire du projet comme suit :

$ cd docker1/

Configuration d'Ansible pour l'automatisation de l'hôte Docker à distance :

Si Docker est installé sur un hôte Ubuntu distant que vous souhaitez automatiser à l'aide d'Ansible, cette section est pour vous.

Tout d'abord, créez un fichier d'inventaire Ansible hôtes avec la commande suivante :

$ nano hôtes

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.nœudkite.com

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

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

Maintenant, créez un fichier de configuration Ansible ansible.cfg comme suit:

$ nano ansible.cfg

Maintenant, tapez les lignes suivantes dans le ansible.cfg fichier de configuration.

[docker]
vm4.nœudkite.com

Une fois que vous avez terminé, appuyez sur + X suivie par Oui et pour sauver le ansible.cfg déposer.

Maintenant, vérifiez si vous pouvez envoyer un ping à l'hôte Docker distant depuis votre ordinateur avec la commande suivante :

$ ansible all -u ansible -m ping

Comme vous pouvez le voir, je peux envoyer un ping à 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 avoir la bibliothèque Python Docker installée sur votre hôte Docker distant pour que les modules docker Ansible fonctionnent. Dans cet article, j'utilise Ubuntu. Alors, c'est ce que je vais couvrir.

Pour installer la bibliothèque Python Docker sur votre hôte Docker distant (Ubuntu), créez un nouveau playbook Ansible install_docker_python_lib.yaml dans le cahiers/ répertoire comme suit :

$ nano playbooks/install_docker_python_lib.yaml

Maintenant, tapez 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 : vrai

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

Maintenant, lancez le install_docker_python_lib.yaml livre de jeu comme suit :

$ ansible-playbook playbooks/install_docker_python_lib.yaml

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

Configuration d'Ansible pour l'automatisation de l'hôte Docker local :

Si Docker est installé sur l'hôte sur lequel Ansible est installé et que vous souhaitez l'automatiser à l'aide d'Ansible, cette section est pour vous.

Tout d'abord, créez un nouveau playbook Ansible install_docker_python_lib.yaml dans le cahiers/ répertoire comme suit :

$ nano playbooks/install_docker_python_lib.yaml

Maintenant, tapez 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 : vrai

Ici, la ligne utilisateur : shovon ensembles shovon en tant qu'utilisateur qui exécutera les tâches. Ce sera différent pour toi. 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 Oui et pour sauver le install_docker_python_lib.yaml déposer.

Maintenant, lancez le install_docker_python_lib.yaml livre de jeu comme suit :

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

Ansible 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 .

Ansible vous demandera également le mot de passe BECOME/sudo. Ce doit ê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 à s'exécuter. Cela peut prendre un certain temps pour terminer.

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

Faire les ajustements nécessaires aux Playbooks :

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

Dans les sections suivantes de cet article, j'exécuterai les exemples de playbooks sur un hôte Docker distant. Ainsi, tous les playbooks 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 playbooks commencent plutôt par 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 enregistrez le playbook en appuyant sur + X suivie par Oui et .

Vous devez également exécuter les playbooks Ansible un peu différemment si vous souhaitez gérer un hôte Docker localement à l'aide d'Ansible.

Vous pouvez exécuter un playbook Ansible localement comme suit :

$ ansible-playbook --ask-pass --ask-become-pass

Assurez-vous de changer au chemin de votre fichier YAML de playbook Ansible.

Arrêter 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 à l'aide d'Ansible.

Dans cette section, je vais vous montrer comment faire cela.

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

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

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

$ docker ps

Pour arrêter le conteneur Docker http_serveur1 en utilisant Ansible, créez un nouveau playbook stop_conteneur.yaml dans le cahiers/ répertoire comme suit :

$ nano playbooks/stop_container.yaml

Ensuite, tapez les lignes suivantes dans le stop_conteneur.yaml livre de jeu.

- hôtes : docker
utilisateur : ansible
Tâches:
- name : Arrêtez le conteneur http_server1
docker_container :
nom : http_serveur1
état : arrêté

Une fois que vous avez terminé, appuyez sur + X suivie par Oui et pour sauver le stop_conteneur.yaml déposer.

Ici, l'Ansible docker_container module est utilisé pour arrêter le conteneur Docker http_serveur1.

Maintenant, lancez le stop_conteneur.yaml playbook avec la commande suivante :

$ ansible-playbook playbooks/stop_container.yaml

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

$ docker ps

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

$ docker ps --all

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

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

Si vous souhaitez arrêter tous les conteneurs Docker exécutés sur votre hôte Docker à l'aide d'Ansible, cette section est pour vous.

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

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

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

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

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

Pour créer le serveur3 Conteneur Docker, 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 s'exécutent sur mon hôte Docker distant.

$ docker ps

Pour arrêter tous ces conteneurs Docker, créez un nouveau playbook stop_all_container.yaml dans votre cahiers/ répertoire comme suit :

$ nano playbooks/stop_all_container.yaml

Maintenant, tapez les lignes suivantes dans le stop_all_container.yaml fichier de livre de lecture.

- hôtes : docker
utilisateur : ansible
Tâches:
- name : obtenir une liste de tous les conteneurs en cours d'exécution
docker_host_info :
conteneurs : vrai
s'inscrire : docker_info
- name : arrêter tous les conteneurs en cours d'exécution
docker_container :
nom : ' élément.Noms[0] | regex_replace("^/", "") '
état : arrêté
boucle : ' docker_info.conteneurs '

Pour enregistrer le stop_all_container.yaml fichier, appuyez sur + X suivie par Oui 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 la stocker dans le docker_info variable.

La deuxième tâche parcourt le docker_info.conteneurs array trouve les noms des conteneurs Docker en cours d'exécution et les arrête un par un.

Maintenant, lancez le stop_all_container.yaml playbook avec la commande suivante :

$ ansible-playbook playbooks/stop_all_container.yaml

Le playbook devrait 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 lister tous les conteneurs Docker (en cours d'exécution, en pause, à l'arrêt) avec la commande suivante :

$ docker ps --all

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 Docker factices.

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 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 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 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 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 s'exécutent 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 playbook Docker stop_all_image_containers.yaml dans le cahiers/ répertoire comme suit :

$ nano playbooks/stop_all_image_containers.yaml

Maintenant, tapez les lignes suivantes dans le stop_all_image_containers.yaml déposer.

- hôtes : docker
utilisateur : ansible
Tâches:
- name : obtenir une liste de tous les conteneurs en cours d'exécution
docker_host_info :
conteneurs : vrai
s'inscrire : docker_info
- name : arrêtez tous les conteneurs exécutant l'image nginx
docker_container :
nom : ' élément.Noms[0] | regex_replace("^/", "") '
état : arrêté
quand : article.Image == 'nginx'
boucle : ' docker_info.conteneurs '

Une fois que vous avez terminé, appuyez sur + X suivie par Oui et pour sauver le stop_all_image_containers.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 la stocker dans le docker_info variable.

La deuxième tâche parcourt 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 correspondants.

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 nom d'image Docker différent si vous le souhaitez.

Maintenant, lancez le stop_all_image_containers.yaml livre de jeu comme suit :

$ ansible-playbook playbooks/stop_all_image_containers.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 ignorés.

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

$ docker ps

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

$ docker ps --all

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 dans cet article.

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

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

WinMouse vous permet de personnaliser et d'améliorer le mouvement du pointeur de la souris sur un PC Windows
Si vous souhaitez améliorer les fonctions par défaut de votre pointeur de souris, utilisez un logiciel gratuit WinMouse. Il ajoute plus de fonctionnal...
Le bouton de clic gauche de la souris ne fonctionne pas sous Windows 10
Si vous utilisez une souris dédiée avec votre ordinateur portable ou de bureau mais que le le clic gauche de la souris ne fonctionne pas sur Windows 1...
Le curseur saute ou se déplace de manière aléatoire lors de la saisie dans Windows 10
Si vous constatez que le curseur de votre souris saute ou se déplace tout seul, automatiquement, au hasard lors de la saisie sur un ordinateur portabl...