So stoppen Sie alle Docker -Container mit Ansible

So stoppen Sie alle Docker -Container mit Ansible
Ansible verfügt über viele Module, um Ihren Docker -Host, Container, Volumina, Netzwerke usw. zu automatisieren. Wenn Sie Ihre laufenden Docker -Container stoppen möchten, können Sie dies auch tun.

In diesem Artikel werde ich Ihnen zeigen, wie Sie einen bestimmten Docker -Container stoppen können. Ich werde Ihnen auch zeigen, wie Sie alle laufenden Docker -Container oder alle Docker -Container stoppen können. 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 Remote -Ubuntu -Host installiert haben.
3) Sie müssen die Python Docker Library auf Ihrem Docker -Host installieren lassen.
4) Sie müssen den Docker -Host für Ansible Automation konfigurieren.

NOTIZ: Docker -Host ist der Computer, auf dem Sie Docker installiert haben.

Es gibt viele Artikel unter LinuxHint, die sich der Installation von Ansible und dem Konfigurieren von Hosts für Ansible Automation und Installation von Docker verschrieben haben. Sie können sie bei Bedarf überprüfen.

Erstellen eines Projektverzeichnisses:

Um alle Dateien und das Verzeichnis zu behalten, werden wir in diesem Artikel organisiert erstellen. Es ist eine gute Idee, ein Projektverzeichnis zu erstellen.

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

$ mkdir -pv docker1/Playbooks

Navigieren Sie nun zur Docker1/ Projektverzeichnis wie folgt:

$ cd docker1/

Konfigurieren von Ansible für Remote Docker Host -Automatisierung:

Wenn Sie Docker auf einem Remote -Ubuntu -Host installiert haben, den Sie mithilfe von Ansible automatisieren möchten, ist dieser Abschnitt für Sie vorhanden.

Erstellen Sie zunächst eine Ansible Inventory -Datei Gastgeber mit dem folgenden Befehl:

$ nano Gastgeber

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

[Docker]
VM4.Nodekite.com

In meinem Fall ist der DNS -Name meines Ubuntu Docker -Hosts VM4.Nodekite.com. Es wird für Sie anders sein. Stellen Sie also sicher, dass Sie es nach Bedarf ersetzen.

Sobald Sie fertig sind, drücken Sie+ X gefolgt von Y Und um die zu retten Gastgeber Datei.

Erstellen Sie nun eine Ansible -Konfigurationsdatei Ansible.CFG folgendermaßen:

$ nano ansible.CFG

Geben Sie nun die folgenden Zeilen in die Ansible.CFG Konfigurationsdatei.

[Docker]
VM4.Nodekite.com

Sobald Sie fertig sind, drücken Sie+ X gefolgt von Y Und um die zu retten Ansible.CFG Datei.

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

$ ANSIBLE ALL -U ANSIBLE -M PING

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

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

Jetzt müssen Sie die Python Docker -Bibliothek auf Ihrem Remote Docker -Host installiert, damit Ansible Docker -Module arbeiten können. In diesem Artikel verwende ich Ubuntu. Das werde ich also bedecken.

Um die Python Docker Library auf Ihrem Remote Docker -Host (Ubuntu) zu installieren, erstellen Sie ein neues Ansible Playbook install_docker_python_lib.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/install_docker_python_lib.Yaml

Geben Sie nun die folgenden Zeilen in die 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: Gegenwart
update_cache: true

Sobald Sie fertig sind, drücken Sie+ X gefolgt von Y Und um die zu retten install_docker_python_lib.Yaml Datei.

Jetzt leiten Sie die install_docker_python_lib.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/install_docker_python_lib.Yaml

Das Spielbuch sollte erfolgreich ausgeführt werden und die Python Docker Library auf Ihrem Remote Docker -Host installiert.

Konfigurieren von Ansible für lokale Docker -Host -Automatisierung:

Wenn Sie Docker auf dem Host installiert haben, wo Sie Ansible installiert haben und ihn mit Ansible automatisieren möchten, ist dieser Abschnitt für Sie vorhanden.

Erstellen Sie zunächst ein neues Ansible Playbook install_docker_python_lib.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/install_docker_python_lib.Yaml

Geben Sie nun die folgenden Zeilen in die install_docker_python_lib.Yaml Datei.

- Gastgeber: Localhost
Verbindung: Lokal
Benutzer: Shovon
wahr werden
Aufgaben:
- Name: Stellen Sie sicher, dass das Python3-Docker-Paket installiert ist
geeignet:
Name: Python3-Docker
Zustand: Gegenwart
update_cache: true

Hier die Linie Benutzer: Shovon Sets Shovon Als Benutzer, der die Aufgaben ausführt. Es wird für Sie anders sein. Stellen Sie also sicher, dass Sie es in Ihren Login -Benutzernamen ändern.

Sie finden den Anmeldemittel Ihres Docker -Hosts mit dem folgenden Befehl:

$ whoami

Sobald Sie fertig sind, drücken Sie+ X gefolgt von Y Und um die zu retten install_docker_python_lib.Yaml Datei.

Jetzt leiten Sie die install_docker_python_lib.Yaml Spielbuch wie folgt:

$ Ansible-Playbook-mask-pass-masken-become-pass
Playbooks/install_docker_python_lib.Yaml

Ansible fragt Sie nach dem Anmeldekennwort des Benutzers, den Sie im Spielbuch angegeben haben. Geben Sie das Passwort ein und drücken Sie .

Ansible fragt Sie auch nach dem Wagen-/sudo -Passwort. Es sollte das gleiche Passwort wie Ihr Anmeldebotschaft sein. Lassen Sie es also leer und drücken Sie .

Das Spielbuch sollte laufen. Es kann eine Weile dauern, bis es fertig ist.

Zu diesem Zeitpunkt sollte das Spielbuch erfolgreich sein und die Python Docker -Bibliothek sollte installiert werden.

Die erforderliche Anpassung an Playbooks vornehmen:

Abhängig davon, ob Sie Docker -Container auf Ihrem lokalen Docker -Host oder einem Remote -Docker -Host verwalten, müssen Sie Ihre Playbooks entsprechend anpassen.

Aus den nächsten Abschnitten dieses Artikels werde ich die Beispiel -Playbooks auf einem Remote -Docker -Host ausführen. Alle Spielbücher 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 fest, dass die Playbooks stattdessen mit den folgenden Zeilen beginnen.

- Gastgeber: Localhost
Verbindung: Lokal
Benutzer: Shovon
wahr werden
Aufgaben:

Dann ersetzen Sie Mit den Aufgaben, die Sie ausführen und das Spielbuch durch Drücken speichern möchten + X gefolgt von Y Und .

Sie müssen auch die Ansible -Playbooks ein wenig 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-mask-pass-masken-become-pass

Stellen Sie sicher, dass Sie sich ändern auf den Weg Ihres Ansible Playbook YAML -Datei.

Stoppen eines Docker -Containers:

Wenn Sie über einen laufenden Docker -Container verfügen und die ID oder den Namen des Docker -Containers kennen, können Sie diesen Docker -Container leicht mit Ansible stoppen.

In diesem Abschnitt werde ich Ihnen zeigen, wie das geht.

Erstens werde ich eine erstellen Nginx (Bildname) Docker -Container http_server1 (Containername) wie folgt:

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

Wie Sie sehen können, der Docker -Container http_server1 läuft.

$ docker ps

Um den Docker -Container zu stoppen http_server1 Erstellen Sie ein neues Spielbuch mit Ansible stop_container.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/stop_container.Yaml

Geben Sie dann die folgenden Zeilen in die stop_container.Yaml Spielbuch.

- Hosts: Docker
Benutzer: Ansible
Aufgaben:
- Name: Stoppen Sie den Container http_server1
Docker_Container:
Name: http_server1
Staat: gestoppt

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten stop_container.Yaml Datei.

Hier die Ansible Docker_Container Das Modul wird verwendet, um den Docker -Container zu stoppen http_server1.

Jetzt leiten Sie die stop_container.Yaml Spielbuch mit dem folgenden Befehl:

$ Ansible-Playbook Playbooks/Stop_Container.Yaml

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

$ docker ps

Sie können alle Docker -Container (ausgeführt, innehalten, angehalten) mit dem folgenden Befehl auflisten:

$ docker ps --all

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

Stoppen Sie alle laufenden Docker -Container:

Wenn Sie alle Docker -Container mithilfe von Ansible stoppen möchten, ist dieser Abschnitt für Sie.

Zunächst werde ich 3 Docker -Container erstellen (Server 1, Server2, Und Server3), damit ich sie alle später mit Ansible stoppen kann.

Um das zu erstellen Server 1 Docker -Container, den folgenden Befehl ausführen:

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

Um das zu erstellen Server2 Docker -Container, den folgenden Befehl ausführen:

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

Um das zu erstellen Server3 Docker -Container, den folgenden Befehl ausführen:

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

Wie Sie sehen können, 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 Spielbuch STOP_ALL_CONTAINER.Yaml in deinem Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/stop_all_container.Yaml

Geben Sie nun die folgenden Zeilen in die STOP_ALL_CONTAINER.Yaml Playbook -Datei.

- Hosts: Docker
Benutzer: Ansible
Aufgaben:
- Name: Holen Sie sich eine Liste aller laufenden Container
Docker_host_info:
Container: wahr
Register: Docker_info
- Name: Stoppen Sie alle laufenden Container
Docker_Container:
Name: 'Element.Namen [0] | regex_replace ("^/", "") '
Staat: gestoppt
Schleife: 'Docker_info.Behälter '

Um die zu retten STOP_ALL_CONTAINER.Yaml Datei, drücken Sie + X gefolgt von Y Und .

Hier habe ich 2 Aufgaben definiert.

Die erste Aufgabe verwendet die Ansible docker_host_info Modul, um eine Liste aller laufenden Docker -Container zu erhalten, und speichert sie in der Docker_info Variable.

Die zweite Aufgabe schießt durch die Docker_info.Behälter Array findet die laufenden Docker -Containernamen und stoppt sie einzeln.

Jetzt leiten Sie die STOP_ALL_CONTAINER.Yaml Spielbuch mit dem folgenden Befehl:

$ Ansible-Playbook Playbooks/STOP_ALL_CONTINEER.Yaml

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

Wie Sie sehen können, gibt es keine laufenden Docker -Container auf meinem Remote Docker -Host.

$ docker ps

Sie können alle Docker -Container (ausgeführt, innehalten, angehalten) mit dem folgenden Befehl auflisten:

$ docker ps --all

Wie Sie sehen können, haben die gestoppten Docker -Container Server 1, Server2, und Server3 sind aufgeführt.

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

Wenn Sie alle Docker -Container stoppen möchten, die ein bestimmtes Docker -Bild ausführen, ist dieser Abschnitt für Sie vorhanden.

Lassen Sie uns zunächst einige Dummy -Docker -Container erstellen.

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

Um das zu erstellen nginx1 Docker -Container mit dem Nginx Docker -Bild, den folgenden Befehl ausführen:

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

Um das zu erstellen nginx2 Docker -Container mit dem Nginx Docker -Bild, den folgenden Befehl ausführen:

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

Um das zu erstellen http1 Docker -Container mit dem httpd Docker -Bild, den folgenden Befehl ausführen:

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

Um das zu erstellen http2 Docker -Container mit dem httpd Docker -Bild, den folgenden Befehl ausführen:

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

Wie Sie sehen können, 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 -Bild ausführen (sagen wir, sagen wir, nginx), erstellen Sie ein neues Docker -Spielbuch STOP_ALL_IMAGE_CONTINEERS.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/stop_all_image_containers.Yaml

Geben Sie nun die folgenden Zeilen in die STOP_ALL_IMAGE_CONTINEERS.Yaml Datei.

- Hosts: Docker
Benutzer: Ansible
Aufgaben:
- Name: Holen Sie sich eine Liste aller laufenden Container
Docker_host_info:
Container: wahr
Register: Docker_info
- Name: Stoppen Sie alle Container, die das Nginx -Bild ausführen
Docker_Container:
Name: 'Element.Namen [0] | regex_replace ("^/", "") '
Staat: gestoppt
Wann: Artikel.Bild == 'nginx'
Schleife: 'Docker_info.Behälter '

Sobald Sie fertig sind, drücken Sie + X gefolgt von Y Und um die zu retten STOP_ALL_IMAGE_CONTINEERS.Yaml Datei.

Hier habe ich 2 Aufgaben hinzugefügt.

Die erste Aufgabe verwendet die Ansible docker_host_info Modul, um eine Liste aller laufenden Docker -Container zu erhalten, und speichert sie in der Docker_info Variable.

Die zweite Aufgabe schießt durch die Docker_info.Behälter Array findet die laufenden Docker -Containernamen und führt die aus Docker_Container Modul für jeden laufenden Container nur, wenn der Bildname des Containers ist Nginx. Dann stoppt es die übereinstimmenden Docker -Container.

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

Jetzt leiten Sie die STOP_ALL_IMAGE_CONTINEERS.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/STOP_ALL_IMAGE_CONTINEERS.Yaml

Wie Sie sehen können, nur die Nginx Behälter (nginx1 Und nginx2) werden modifiziert (gestoppt). Der 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 Dockerbehälter (http1 Und http2) läuft.

$ docker ps

Sie können alle Docker -Container (ausgeführt, innehalten, angehalten) mit dem folgenden Befehl auflisten:

$ docker ps --all

Wie Sie sehen können, haben die gestoppten Docker -Container nginx1 und Nginx2 sind aufgeführt.

Abschluss:

In diesem Artikel habe ich Ihnen gezeigt. Dazu habe ich das Ansible benutzt Docker_Container Und docker_host_info Module in diesem Artikel.

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

[1] Docker_Container - Docker -Container verwalten
[2] DOCKER_HOST_INFO - Ruft Fakten über Docker -Host und Listen der Objekte der Dienste ab