Ansible

So stoppen Sie alle Docker-Container mit Ansible

So stoppen Sie alle Docker-Container mit Ansible
Ansible verfügt über viele Module zur Automatisierung Ihres Docker-Hosts, Ihrer Container, Volumes, Netzwerke usw. Wenn Sie Ihre laufenden Docker-Container stoppen möchten, können Sie das auch tun.

In diesem Artikel zeige ich Ihnen, wie Sie einen bestimmten Docker-Container stoppen. Ich werde Ihnen auch zeigen, wie Sie mit Ansible alle laufenden Docker-Container oder alle Docker-Container, auf denen ein bestimmtes Docker-Image ausgeführt wird, stoppen. Also lasst uns anfangen.

Voraussetzungen:

Wenn Sie die Beispiele dieses Artikels ausprobieren möchten,

1) Sie müssen Ansible auf Ihrem Computer installiert haben.
2) Sie müssen Docker auf Ihrem Computer oder einem entfernten Ubuntu-Host installiert haben.
3) Sie müssen die Python Docker-Bibliothek auf Ihrem Docker-Host installiert haben.
4) Sie müssen den Docker-Host für die Ansible-Automatisierung konfigurieren.

HINWEIS: Docker-Host ist der Computer, auf dem Docker installiert ist.

Es gibt viele Artikel auf LinuxHint, die sich mit der Installation von Ansible und der Konfiguration von Hosts für die Ansible-Automatisierung und der Installation von Docker beschäftigen. Sie können sie bei Bedarf überprüfen.

Erstellen eines Projektverzeichnisses:

Um alle Dateien und Verzeichnisse, die wir in diesem Artikel erstellen, organisiert zu halten, ist es eine gute Idee, ein Projektverzeichnis zu erstellen.

So erstellen Sie ein Projektverzeichnis Docker1/ Führen Sie in Ihrem aktuellen Arbeitsverzeichnis den folgenden Befehl aus:

$ mkdir -pv docker1/playbooks

Navigieren Sie nun zum Docker1/ Projektverzeichnis wie folgt:

$ CD-Docker1/

Ansible für Remote Docker Host Automation konfigurieren:

Wenn Sie Docker auf einem Remote-Ubuntu-Host installiert haben, den Sie mit Ansible automatisieren möchten, ist dieser Abschnitt genau das Richtige für Sie.

Erstellen Sie zunächst eine Ansible-Inventardatei Gastgeber mit folgendem Befehl:

$ Nano-Hosts

Fügen Sie nun die IP-Adresse oder den DNS-Namen Ihres Docker-Hosts im Gastgeber Inventardatei wie folgt.

[Docker]
vm4.Knotendrachen.com

In meinem Fall lautet der DNS-Name meines Ubuntu Docker-Hosts vm4.Knotendrachen.com. Bei dir wird es anders sein. Stellen Sie also sicher, dass Sie es bei Bedarf ersetzen.

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten Gastgeber Datei.

Erstellen Sie nun eine Ansible-Konfigurationsdatei ansible.cfg wie folgt:

$ nano ansible.cfg

Geben Sie nun die folgenden Zeilen in die ein ansible.cfg Konfigurationsdatei.

[Docker]
vm4.Knotendrachen.com

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten ansible.cfg Datei.

Überprüfen Sie nun, ob Sie den Remote-Docker-Host von Ihrem Computer mit dem folgenden Befehl anpingen können:

$ ansible all -u ansible -m ping

Wie Sie sehen können, kann ich meinen Remote-Docker-Host anpingen.

Wie Sie sehen können, habe ich Docker 19.03.11 auf meinem Remote-Ubuntu-Docker-Host installiert.

Jetzt muss die Python Docker-Bibliothek auf Ihrem Remote-Docker-Host installiert sein, damit Ansible Docker-Module funktionieren. In diesem Artikel verwende ich Ubuntu. Also, das werde ich behandeln.

Um die Python Docker-Bibliothek auf Ihrem Remote-Docker-Host (Ubuntu) zu installieren, erstellen Sie ein neues Ansible-Playbook install_docker_python_lib.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ nano playbooks/install_docker_python_lib.yaml

Geben Sie nun die folgenden Zeilen in die ein install_docker_python_lib.yaml Datei.

- Hosts: Docker
Benutzer: ansible
wahr werden
Aufgaben:
- name: Stellen Sie sicher, dass das Python3-Docker-Paket installiert ist
geeignet:
Name: Python3-Docker
Zustand: vorhanden
update_cache: Richtig

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten install_docker_python_lib.yaml Datei.

Führen Sie nun die install_docker_python_lib.yaml Spielbuch wie folgt:

$ ansible-playbook playbooks/install_docker_python_lib.yaml

Das Playbook sollte erfolgreich ausgeführt werden und die Python Docker-Bibliothek auf Ihrem Remote-Docker-Host installieren.

Ansible für die lokale Docker-Hostautomatisierung konfigurieren:

Wenn Sie Docker auf dem Host installiert haben, auf dem Sie Ansible installiert haben, und Sie es mit Ansible automatisieren möchten, dann ist dieser Abschnitt genau das Richtige für Sie.

Erstellen Sie zunächst ein neues Ansible-Playbook install_docker_python_lib.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ nano playbooks/install_docker_python_lib.yaml

Geben Sie nun die folgenden Zeilen in die ein install_docker_python_lib.yaml Datei.

- hosts: localhost
Verbindung: lokal
Benutzer: shovon
wahr werden
Aufgaben:
- name: Stellen Sie sicher, dass das Python3-Docker-Paket installiert ist
geeignet:
Name: Python3-Docker
Zustand: vorhanden
update_cache: Richtig

Hier die Linie Benutzer: shovon Sätze shovon als Benutzer, der die Aufgaben ausführt. Bei dir wird es anders sein. Stellen Sie also sicher, dass Sie ihn in Ihren Login-Benutzernamen ändern.

Den Login-Benutzernamen Ihres Docker-Hosts finden Sie mit dem folgenden Befehl:

$ whoami

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten install_docker_python_lib.yaml Datei.

Führen Sie nun die install_docker_python_lib.yaml Spielbuch wie folgt:

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

Ansible wird Sie nach dem Login-Passwort des Benutzers fragen, den Sie im Playbook angegeben haben. Geben Sie das Login-Passwort ein und drücken Sie .

Ansible wird Sie auch nach dem BECOME/sudo-Passwort fragen. Es sollte das gleiche Passwort wie Ihr Login-Passwort sein. Also, lass es leer und drücke .

Das Playbook sollte beginnen zu laufen. Es kann eine Weile dauern, bis es abgeschlossen ist.

An dieser Stelle sollte das Playbook erfolgreich sein und die Python Docker-Bibliothek sollte installiert sein.

Notwendige Anpassungen an Playbooks vornehmen:

Je nachdem, ob Sie Docker-Container auf Ihrem lokalen Docker-Host oder einem Remote-Docker-Host verwalten, müssen Sie Ihre Playbooks entsprechend anpassen.

In den nächsten Abschnitten dieses Artikels werde ich die Beispiel-Playbooks auf einem Remote-Docker-Host ausführen. Alle Playbooks beginnen also mit den folgenden Zeilen:

- Hosts: Docker
Benutzer: ansible
Aufgaben:

Wenn Sie die Playbooks auf Ihrem lokalen Docker-Host ausführen möchten, stellen Sie sicher, dass die Playbooks stattdessen mit den folgenden Zeilen beginnen.

- hosts: localhost
Verbindung: lokal
Benutzer: shovon
wahr werden
Aufgaben:

Dann ersetzen mit den Aufgaben, die Sie ausführen möchten, und speichern Sie das Playbook, indem Sie drücken + X gefolgt von Ja und .

Sie müssen die Ansible-Playbooks auch etwas anders ausführen, wenn Sie einen Docker-Host lokal mit Ansible verwalten möchten.

Sie können ein Ansible-Playbook lokal wie folgt ausführen:

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

Stellen Sie sicher, dass Sie sich ändern zum Pfad Ihrer Ansible Playbook YAML-Datei.

Stoppen eines Docker-Containers:

Wenn Sie einen laufenden Docker-Container haben und die ID oder den Namen des Docker-Containers kennen, können Sie diesen Docker-Container einfach mit Ansible . stoppen.

In diesem Abschnitt zeige ich dir, wie das geht.

Zuerst erstelle ich ein Nginx (Image-Name) Docker-Container http_server1 (Containername) wie folgt:

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

Wie Sie sehen, ist der Docker-Container http_server1 läuft.

$ docker ps

So stoppen Sie den Docker-Container http_server1 Erstellen Sie mit Ansible ein neues Playbook stop_container.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/stop_container.yaml

Geben Sie dann die folgenden Zeilen in die ein stop_container.yaml Spielbuch.

- Hosts: Docker
Benutzer: ansible
Aufgaben:
- name: Stoppen Sie den http_server1-Container
docker_container:
Name: http_server1
Zustand: gestoppt

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten stop_container.yaml Datei.

Hier der Ansible docker_container Modul wird verwendet, um den Docker-Container zu stoppen http_server1.

Führen Sie nun die stop_container.yaml Playbook mit folgendem Befehl:

$ ansible-playbook playbooks/stop_container.yaml

Wie Sie sehen, ist der Docker-Container http_server1 läuft nicht mehr auf meinem Remote-Docker-Host.

$ docker ps

Sie können alle Docker-Container (laufend, angehalten, gestoppt) mit dem folgenden Befehl auflisten:

$ docker ps --all

Wie Sie sehen können, ist der gestoppte Docker-Container http_server1 ist aufgelistet.

Stoppen aller laufenden Docker-Container:

Wenn Sie mit Ansible alle Docker-Container auf Ihrem Docker-Host stoppen möchten, ist dieser Abschnitt genau das Richtige für Sie section.

Zuerst werde ich 3 Docker-Container erstellen (Server 1, Server2, und server3) damit ich sie später alle mit Ansible stoppen kann.

Um die . zu erstellen Server 1 Docker-Container, führen Sie den folgenden Befehl aus:

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

Um die . zu erstellen Server2 Docker-Container, führen Sie den folgenden Befehl aus:

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

Um die . zu erstellen server3 Docker-Container, führen Sie den folgenden Befehl aus:

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

Wie Sie sehen können, ist die Server 1, Server2, und server3 Docker-Container werden auf meinem Remote-Docker-Host ausgeführt.

$ docker ps

Um all diese Docker-Container zu stoppen, erstellen Sie ein neues Playbook stop_all_container.yaml in deinem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/stop_all_container.yaml

Geben Sie nun die folgenden Zeilen in die ein stop_all_container.yaml Playbook-Datei.

- Hosts: Docker
Benutzer: ansible
Aufgaben:
- name: Rufen Sie eine Liste aller laufenden Container ab
docker_host_info:
Behälter: Richtig
registrieren: docker_info
- name: Stoppen Sie alle laufenden Container
docker_container:
Name: ' Artikel.Namen[0] | regex_replace("^/", "") '
Zustand: gestoppt
Schleife: ' docker_info.Behälter '

Um die zu retten stop_all_container.yaml Datei, drücken Sie + X gefolgt von Ja und .

Hier habe ich 2 Aufgaben definiert.

Die erste Aufgabe verwendet das Ansible docker_host_info -Modul, um eine Liste aller laufenden Docker-Container abzurufen und im docker_info Variable.

Die zweite Aufgabe durchläuft die docker_info.Behälter array findet die laufenden Docker-Containernamen und stoppt sie nacheinander.

Führen Sie nun die stop_all_container.yaml Playbook mit folgendem Befehl:

$ ansible-playbook playbooks/stop_all_container.yaml

Das Playbook sollte erfolgreich ausgeführt werden, wie Sie im Screenshot unten sehen können.

Wie Sie sehen, laufen auf meinem Docker-Remote-Host keine Docker-Container.

$ docker ps

Sie können alle Docker-Container (laufend, angehalten, gestoppt) mit dem folgenden Befehl auflisten:

$ docker ps --all

Wie Sie sehen können, die gestoppten Docker-Container Server 1, Server2, und server3 sind aufgelistet.

Stoppen Sie alle Docker-Container, die ein bestimmtes Image ausführen:

Wenn Sie alle Docker-Container stoppen möchten, die ein bestimmtes Docker-Image ausführen, ist dieser Abschnitt genau das Richtige für Sie.

Zuerst erstellen wir einige Dummy-Docker-Container.

Ich werde 2 Docker-Container erstellen (nginx1 und nginx2) Verwendung der Nginx Docker-Image und 2 Docker-Container (http1 und http2) Verwendung der httpd Docker-Image für die Demonstration.

Um die . zu erstellen nginx1 Docker-Container mit dem Nginx Docker-Image, führen Sie den folgenden Befehl aus:

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

Um die . zu erstellen nginx2 Docker-Container mit dem Nginx Docker-Image, führen Sie den folgenden Befehl aus:

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

Um die . zu erstellen http1 Docker-Container mit dem httpd Docker-Image, führen Sie den folgenden Befehl aus:

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

Um die . zu erstellen http2 Docker-Container mit dem httpd Docker-Image, führen Sie den folgenden Befehl aus:

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

Wie Sie sehen können, ist die nginx1, nginx2, http1, und http2 Docker-Container werden auf meinem Remote-Docker-Host ausgeführt.

Um alle Docker-Container zu stoppen, die ein bestimmtes Docker-Image ausführen (sagen wir, nginx), erstellen Sie ein neues Docker-Playbook stop_all_image_containers.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/stop_all_image_containers.yaml

Geben Sie nun die folgenden Zeilen in die ein stop_all_image_containers.yaml Datei.

- Hosts: Docker
Benutzer: ansible
Aufgaben:
- name: Rufen Sie eine Liste aller laufenden Container ab
docker_host_info:
Behälter: Richtig
registrieren: docker_info
- name: Stoppen Sie alle Container, die nginx-Image ausführen running
docker_container:
Name: ' Artikel.Namen[0] | regex_replace("^/", "") '
Zustand: gestoppt
Wann: Artikel.Bild == 'nginx'
Schleife: ' docker_info.Behälter '

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und um die zu retten stop_all_image_containers.yaml Datei.

Hier habe ich 2 Aufgaben hinzugefügt.

Die erste Aufgabe verwendet das Ansible docker_host_info -Modul, um eine Liste aller laufenden Docker-Container abzurufen und im docker_info Variable.

Die zweite Aufgabe durchläuft die docker_info.Behälter array findet die laufenden Docker-Containernamen und führt die docker_container Modul für jeden laufenden Container nur, wenn der Image-Name des Containers ist Nginx. Dann stoppt es die übereinstimmenden Docker-Container.

In der zweiten Aufgabe wird die folgende Zeile verwendet, um zu überprüfen, ob der Docker-Container die Nginx Bild. Sie können es in einen anderen Docker-Image-Namen ändern, wenn Sie möchten.

Führen Sie nun die stop_all_image_containers.yaml Spielbuch wie folgt:

$ ansible-playbook playbooks/stop_all_image_containers.yaml

Wie Sie sehen, sind nur die Nginx Behälter (nginx1 und nginx2) werden modifiziert (gestoppt). Das httpd Behälter (http1 und http2) werden übersprungen.

Wie Sie sehen können, nein Nginx Docker-Container werden auf meinem Remote-Docker-Host ausgeführt. Nur der httpd Docker-Container (http1 und http2) läuft.

$ docker ps

Sie können alle Docker-Container (laufend, angehalten, gestoppt) mit dem folgenden Befehl auflisten:

$ docker ps --all

Wie Sie sehen können, die gestoppten Docker-Container nginx1 und nginx2 sind aufgelistet.

Fazit:

In diesem Artikel habe ich Ihnen gezeigt, wie Sie einen laufenden Docker-Container, alle Docker-Container, auf denen ein bestimmtes Docker-Image ausgeführt wird, und alle laufenden Docker-Container Ihres Docker-Hosts stoppen. Dazu habe ich das Ansible verwendet docker_container und docker_host_info Module in diesem Artikel.

Um mehr über diese Module zu erfahren, besuchen Sie die folgenden offiziellen Dokumentationsseiten von Ansible.

[1] docker_container - Docker-Container verwalten
[2] docker_host_info - Ruft Fakten über Docker-Host und Listen von Objekten der Dienste ab

Emulieren Sie Mausklicks, indem Sie den Mauszeiger mit der klicklosen Maus in Windows 10 bewegen
Die Verwendung einer Maus oder Tastatur in der falschen Haltung bei übermäßiger Nutzung kann zu vielen gesundheitlichen Problemen führen, einschließli...
Fügen Sie mit diesen kostenlosen Tools Mausgesten zu Windows 10 hinzu
In den letzten Jahren haben sich Computer und Betriebssysteme stark weiterentwickelt. Es gab eine Zeit, in der Benutzer Befehle verwenden mussten, um ...
Steuern und verwalten Sie Mausbewegungen zwischen mehreren Monitoren in Windows 10
Dual-Display-Maus-Manager lässt Sie die Mausbewegung zwischen mehreren Monitoren steuern und konfigurieren, indem Sie ihre Bewegungen in der Nähe der ...