Ansible

Hur man stoppar alla Docker-behållare med Ansible

Hur man stoppar alla Docker-behållare med Ansible
Ansible har många moduler för att automatisera din Docker-värd, behållare, volymer, nätverk etc. Om du vill stoppa dina körande Docker-behållare kan du också göra det.

I den här artikeln ska jag visa dig hur du stoppar en specifik Docker-behållare. Jag kommer också att visa dig hur du stoppar alla körande Docker-behållare eller alla Docker-behållare som kör en specifik Docker-bild med Ansible. Så, låt oss komma igång.

Förutsättningar:

Om du vill prova exemplen på den här artikeln,

1) Du måste ha Ansible installerat på din dator.
2) Du måste ha Docker installerad på din dator eller en fjärr Ubuntu-värd.
3) Du måste ha Python Docker-bibliotek installerat på din Docker-värd.
4) Du måste konfigurera Docker-värden för Ansible-automatisering.

NOTERA: Docker-värd är den dator där du har Docker installerat.

Det finns många artiklar om LinuxHint dedikerade till att installera Ansible och konfigurera värdar för Ansible-automatisering och installera Docker. Du kan kolla in dem om det behövs.

Skapa en projektkatalog:

För att hålla alla filer och kataloger som vi kommer att skapa i den här artikeln organiserade är det en bra idé att skapa en projektkatalog.

Att skapa en projektkatalog docker1 / i din nuvarande arbetskatalog, kör följande kommando:

$ mkdir -pv docker1 / playbooks

Navigera nu till docker1 / projektkatalog enligt följande:

$ cd docker1 /

Konfigurera Ansible för fjärr Docker Host Automation:

Om du har Docker installerat på en fjärrvärd Ubuntu-värd som du vill automatisera med Ansible, är det här avsnittet för dig.

Skapa först en Ansible inventeringsfil värdar med följande kommando:

$ nano värdar

Lägg nu till IP-adressen eller DNS-namnet på din Docker-värd i värdar inventeringsfilen enligt följande.

[hamnarbetare]
vm4.nodekite.com

I mitt fall är DNS-namnet på min Ubuntu Docker-värd vm4.nodekite.com. Det kommer att vara annorlunda för dig. Så se till att byta ut det efter behov.

När du är klar trycker du på + X följd av Y och för att spara värdar fil.

Skapa nu en Ansible-konfigurationsfil ansible.cfg som följer:

$ nano ansible.cfg

Skriv nu in följande rader i ansible.cfg konfigurationsfil.

[hamnarbetare]
vm4.nodekite.com

När du är klar trycker du på + X följd av Y och för att spara ansible.cfg fil.

Kontrollera nu om du kan pinga fjärr Docker-värden från din dator med följande kommando:

$ ansible all -u ansible -m ping

Som du kan se kan jag pinga min fjärr Docker-värd.

Som du kan se har jag Docker 19.03.11 installerad på min fjärr Ubuntu Docker-värd.

Nu måste du ha Python Docker-bibliotek installerat på din fjärr Docker-värd för att Ansible-dockermoduler ska fungera. I den här artikeln använder jag Ubuntu. Så det här kommer jag att täcka.

För att installera Python Docker-bibliotek på din fjärranslutna Docker-värd (Ubuntu), skapa en ny Ansible-spelbok install_docker_python_lib.yaml i spelböcker / katalog enligt följande:

$ nano playbooks / install_docker_python_lib.yaml

Skriv nu in följande rader i install_docker_python_lib.yaml fil.

- värdar: docker
användare: ansible
bli sann
uppgifter:
- namn: Se till att python3-docker-paketet är installerat
benägen:
namn: python3-docker
tillstånd: närvarande
update_cache: True

När du är klar trycker du på + X följd av Y och för att spara install_docker_python_lib.yaml fil.

Kör nu install_docker_python_lib.yaml spelbok enligt följande:

$ ansible-playbook playbooks / install_docker_python_lib.yaml

Spelboken ska köras framgångsrikt och den installerar Python Docker-biblioteket på din fjärr Docker-värd.

Konfigurera Ansible för Local Docker Host Automation:

Om du har Docker installerat på värden där du har Ansible installerat och du vill automatisera den med Ansible, är det här avsnittet för dig.

Skapa först en ny Ansible-spelbok install_docker_python_lib.yaml i spelböcker / katalog enligt följande:

$ nano playbooks / install_docker_python_lib.yaml

Skriv nu in följande rader i install_docker_python_lib.yaml fil.

- värdar: localhost
anslutning: lokal
användare: shovon
bli sann
uppgifter:
- namn: Se till att python3-docker-paketet är installerat
benägen:
namn: python3-docker
tillstånd: närvarande
update_cache: Sant

Här, linjen användare: shovon uppsättningar shovon som användaren som kommer att utföra uppgifterna. Det kommer att vara annorlunda för dig. Så se till att ändra det till ditt användarnamn för inloggning.

Du hittar användarnamnet för din Docker-värd med följande kommando:

$ whoami

När du är klar trycker du på + X följd av Y och för att spara install_docker_python_lib.yaml fil.

Kör nu install_docker_python_lib.yaml spelbok enligt följande:

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

Ansible kommer att be dig om inloggningslösenordet för den användare du har angett i spelboken. Skriv in inloggningslösenordet och tryck på .

Ansible kommer också att be om BECOME / sudo-lösenordet. Det ska vara samma lösenord som ditt inloggningslösenord. Så lämna den tom och tryck .

Spelboken bör börja köras. Det kan ta ett tag att slutföra.

Vid den här tiden bör spelboken vara framgångsrik och Python Docker-biblioteket bör installeras.

Göra nödvändiga justeringar av Playbooks:

Beroende på om du hanterar Docker-behållare på din lokala Docker-värd eller en fjärr Docker-värd måste du justera dina spelböcker i enlighet med detta.

Från nästa avsnitt i den här artikeln kommer jag att köra exemplet på spelböcker på en fjärr Docker-värd. Så alla spelböcker börjar med följande rader:

- värdar: docker
användare: ansible
uppgifter:

Om du vill köra playbooks på din lokala Docker-värd, se till att playbooks börjar med följande rader istället.

- värdar: localhost
anslutning: lokal
användare: shovon
bli sann
uppgifter:

Byt sedan ut med de uppgifter du vill köra och spara spelboken genom att trycka på + X följd av Y och .

Du måste också köra Ansible-spelböckerna lite annorlunda om du ska hantera en Docker-värd lokalt med Ansible.

Du kan köra en Ansible-spelbok lokalt enligt följande:

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

Se till att ändra till sökvägen till din Ansible playbook YAML-fil.

Stoppa en Docker Container:

Om du har en igång Docker-behållare och du känner till ID: n eller namnet på Docker-behållaren kan du enkelt stoppa den Docker-behållaren med Ansible.

I det här avsnittet ska jag visa dig hur du gör det.

Först ska jag skapa en Nginx (bildnamn) Docker-behållare http_server1 (behållarens namn) enligt följande:

$ docker kör -p 8080: 80 -d - namn http_server1 nginx

Som du kan se, Docker-behållaren http_server1 körs.

$ docker ps

För att stoppa Docker-behållaren http_server1 med Ansible, skapa en ny spelbok stopp_container.yaml i spelböcker / katalog enligt följande:

$ nano playbooks / stop_container.yaml

Skriv sedan in följande rader i stopp_container.yaml spelbok.

- värdar: docker
användare: ansible
uppgifter:
- namn: Stoppa http_server1-behållaren
docker_container:
namn: http_server1
tillstånd: stoppat

När du är klar trycker du på + X följd av Y och för att spara stopp_container.yaml fil.

Här Ansible docker_container modulen används för att stoppa Docker-behållaren http_server1.

Kör nu stop_container.yaml spelbok med följande kommando:

$ ansible-playbook playbooks / stop_container.yaml

Som du kan se, Docker-behållaren http_server1 körs inte längre på min fjärr Docker-värd.

$ docker ps

Du kan lista alla Docker-behållare (kör, pausade, stoppade) med följande kommando:

$ docker ps - allt

Som du kan se den stoppade Docker-behållaren http_server1 är listad.

Stoppa alla körande Docker-behållare:

Om du vill stoppa alla Docker-behållare som körs på din Docker-värd med Ansible, är det här avsnittet för dig.

Först ska jag skapa 3 Docker-containrar (server1, server2, och server3) så att jag kan stoppa dem alla med Ansible senare.

Att skapa server1 Docker-behållare, kör följande kommando:

$ docker kör -p 8081: 80 -d - namn server1 nginx

Att skapa server2 Docker-behållare, kör följande kommando:

$ docker kör -p 8082: 80 -d - namn server2 nginx

Att skapa server3 Docker-behållare, kör följande kommando:

$ docker kör -p 8083: 80 -d - namn server3 nginx

Som du kan se server1, server2, och server3 Docker-behållare körs på min fjärr Docker-värd.

$ docker ps

Skapa en ny spelbok för att stoppa alla Docker-behållare stop_all_container.yaml i din spelböcker / katalog enligt följande:

$ nano playbooks / stop_all_container.yaml

Skriv nu in följande rader i stop_all_container.yaml playbook-fil.

- värdar: docker
användare: ansible
uppgifter:
- namn: Få en lista över alla containrar som körs
docker_host_info:
behållare: sant
registrera: docker_info
- namn: Stoppa alla körande containrar
docker_container:
namn: 'artikel.Namn [0] | regex_replace ("^ /", "") '
tillstånd: stoppat
loop: 'docker_info.containrar '

För att spara stop_all_container.yaml tryck på + X följd av Y och .

Här har jag definierat två uppgifter.

Den första uppgiften använder Ansible docker_host_info modul för att få en lista över alla körande Docker-behållare och lagra den i docker_info variabel.

Den andra uppgiften slingrar sig genom docker_info.behållare array hittar de löpande Docker-behållarnamnen och stoppar dem en efter en.

Kör nu stop_all_container.yaml spelbok med följande kommando:

$ ansible-playbook playbooks / stop_all_container.yaml

Spelboken ska köras framgångsrikt som du kan se på skärmdumpen nedan.

Som du kan se finns det inga Docker-behållare som körs på min fjärr Docker-värd.

$ docker ps

Du kan lista alla Docker-behållare (kör, pausade, stoppade) med följande kommando:

$ docker ps - allt

Som du kan se stoppade Docker-behållare server1, server2, och server3 är listade.

Stoppa alla Docker-behållare som kör en specifik bild:

Om du vill stoppa alla Docker-behållare som kör en specifik Docker-avbildning är det här avsnittet för dig.

Låt oss först skapa några dummy-Docker-behållare.

Jag skapar två Docker-containrar (nginx1 och nginx2) använda Nginx Docker-bild och 2 Docker-behållare (http1 och http2) använda httpd Docker-bild för demonstrationen.

Att skapa nginx1 Docker-behållare med Nginx Docker-bild, kör följande kommando:

$ docker kör -d -p 8081: 80 - namn nginx1 nginx

Att skapa nginx2 Docker-behållare med Nginx Docker-bild, kör följande kommando:

$ docker kör -d -p 8082: 80 - namn nginx2 nginx

Att skapa http1 Docker-behållare med httpd Docker-bild, kör följande kommando:

$ docker kör -d -p 8091: 80 - namn http1 httpd

Att skapa http2 Docker-behållare med httpd Docker-bild, kör följande kommando:

$ docker kör -d -p 8092: 80 - namn http2 httpd

Som du kan se nginx1, nginx2, http1, och http2 Docker-behållare körs på min fjärr Docker-värd.

För att stoppa alla Docker-behållare som kör en specifik Docker-avbildning (låt oss säga, nginx), skapa en ny Docker-spelbok stop_all_image_containers.yaml i spelböcker / katalog enligt följande:

$ nano playbooks / stop_all_image_containers.yaml

Skriv nu in följande rader i stop_all_image_containers.yaml fil.

- värdar: docker
användare: ansible
uppgifter:
- namn: Få en lista med alla containrar som körs
docker_host_info:
behållare: sant
registrera: docker_info
- namn: Stoppa alla behållare som kör nginx-avbildningen
docker_container:
namn: 'artikel.Namn [0] | regex_replace ("^ /", "") '
tillstånd: stoppat
när: artikel.Bild == 'nginx'
loop: 'docker_info.containrar '

När du är klar trycker du på + X följd av Y och för att spara stop_all_image_containers.yaml fil.

Här har jag lagt till två uppgifter.

Den första uppgiften använder Ansible docker_host_info modul för att få en lista över alla körande Docker-behållare och lagra den i docker_info variabel.

Den andra uppgiften slingrar sig genom docker_info.behållare array hittar de löpande Docker-behållarnamnen och kör den docker_container modulen för varje container som körs endast om behållarens bildnamn är Nginx. Sedan stoppar den matchade Docker-behållare.

I den andra uppgiften används följande rad för att kontrollera om Docker-behållaren kör Nginx bild. Du kan ändra det till ett annat Docker-bildnamn om du vill.

Kör nu stop_all_image_containers.yaml spelbok enligt följande:

$ ansible-playbook playbooks / stop_all_image_containers.yaml

Som du kan se, bara Nginx behållare (nginx1 och nginx2) är modifierade (stoppade). De httpd behållare (http1 och http2) hoppas över.

Som du kan se, nej Nginx Docker-behållare körs på min fjärr Docker-värd. Bara httpd Dockerbehållare (http1 och http2) körs.

$ docker ps

Du kan lista alla Docker-behållare (kör, pausade, stoppade) med följande kommando:

$ docker ps - allt

Som du kan se stoppade Docker-behållare nginx1 och nginx2 är listade.

Slutsats:

I den här artikeln har jag visat dig hur du stoppar en igång Docker-behållare, alla Docker-behållare som kör en specifik Docker-avbildning och alla Docker-behållare som körs i din Docker-värd. För att göra det har jag använt Ansible docker_container och docker_host_info moduler i den här artikeln.

För att lära dig mer om dessa moduler, besök följande officiella Ansible-dokumentationssidor.

[1] docker_container - Hantera dockercontainrar
[2] docker_host_info - Hämtar fakta om dockvärd och listor över objekt för tjänsterna

Så här installerar du League Of Legends på Ubuntu 14.04
Om du gillar League of Legends är det här en möjlighet för dig att testa League of Legends. Observera att LOL stöds på PlayOnLinux om du är en Linux-a...
Installera det senaste OpenRA-strategispelet på Ubuntu Linux
OpenRA är en Libre / Free Real Time Strategy-spelmotor som återskapar de tidiga Westwood-spelen som det klassiska Command & Conquer: Red Alert. Distri...
Installera senaste Dolphin Emulator för Gamecube & Wii på Linux
Dolphin Emulator låter dig spela dina valda Gamecube & Wii-spel på Linux Personal Computers (PC). Eftersom Dolphin Emulator är en fritt tillgänglig o...