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å
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å
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: dockeranvä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å
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: localhostanslutning: 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å
Kör nu install_docker_python_lib.yaml spelbok enligt följande:
$ ansible-playbook --ask-pass --ask-become-passplaybooks / 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: dockeranvä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: localhostanslutning: lokal
användare: shovon
bli sann
uppgifter:
Byt sedan ut
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
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: dockeranvä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å
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 - alltSom 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: dockeranvä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å
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 - alltSom 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: dockeranvä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å
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 - alltSom 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