I denne artikkelen skal jeg vise deg hvordan du stopper en spesifikk Docker-container. Jeg skal også vise deg hvordan du stopper alle Docker-containere som kjører, eller alle Docker-containere som kjører et bestemt Docker-bilde ved hjelp av Ansible. Så la oss komme i gang.
Forutsetninger:
Hvis du vil prøve eksemplene på denne artikkelen,
1) Du må ha Ansible installert på datamaskinen din.
2) Du må ha Docker installert på datamaskinen din eller en ekstern Ubuntu-vert.
3) Du må ha Python Docker-biblioteket installert på Docker-verten din.
4) Du må konfigurere Docker-verten for Ansible-automatisering.
MERK: Docker vert er datamaskinen der du har Docker installert.
Det er mange artikler om LinuxHint dedikert til å installere Ansible og konfigurere verter for Ansible automatisering og installere Docker. Du kan sjekke dem ut om nødvendig.
Opprette en prosjektkatalog:
For å holde alle filene og katalogen vi skal lage i denne artikkelen organisert, er det en god ide å lage en prosjektkatalog.
Å lage en prosjektkatalog docker1 / i din nåværende arbeidskatalog, kjør følgende kommando:
$ mkdir -pv docker1 / playbooks
Nå, naviger til docker1 / prosjektkatalog som følger:
$ cd docker1 /
Konfigurere Ansible for Remote Docker Host Automation:
Hvis du har Docker installert på en ekstern Ubuntu-vert som du vil automatisere ved hjelp av Ansible, er denne delen noe for deg.
Først oppretter du en Ansible beholdningsfil verter med følgende kommando:
$ nano verter
Legg nå til IP-adressen eller DNS-navnet til Docker-verten din i verter ' inventarfil som følger.
[docker]vm4.nodekite.com
I mitt tilfelle er DNS-navnet til min Ubuntu Docker-vert vm4.nodekite.com. Det vil være annerledes for deg. Så sørg for å erstatte den etter behov.
Når du er ferdig, trykk
Opprett nå en Ansible-konfigurasjonsfil ansible.cfg som følger:
$ nano ansible.cfg
Skriv inn følgende linjer i ansible.cfg konfigurasjonsfil.
[docker]vm4.nodekite.com
Når du er ferdig, trykk
Sjekk nå om du kan pinge den eksterne Docker-verten fra datamaskinen din med følgende kommando:
$ ansible all -u ansible -m ping
Som du kan se, kan jeg pinge den eksterne Docker-verten min.
Som du kan se, har jeg Docker 19.03.11 installert på den eksterne Ubuntu Docker-verten min.
Nå må du ha Python Docker-biblioteket installert på den eksterne Docker-verten for at Ansible docker-moduler skal fungere. I denne artikkelen bruker jeg Ubuntu. Så dette er hva jeg skal dekke.
For å installere Python Docker-biblioteket på den eksterne Docker-verten (Ubuntu), oppretter du en ny Ansible-spillbok install_docker_python_lib.yaml i lekebøker / katalog som følger:
$ nano playbooks / install_docker_python_lib.yaml
Skriv inn følgende linjer i install_docker_python_lib.yaml fil.
- verter: dockerbruker: ansible
bli: Sant
oppgaver:
- navn: Sørg for at python3-docker-pakken er installert
apt:
navn: python3-docker
tilstand: til stede
update_cache: Sant
Når du er ferdig, trykk
Kjør nå install_docker_python_lib.yaml spillbok som følger:
$ ansible-playbook playbooks / install_docker_python_lib.yaml
Spillboken skal kjøre vellykket, og den vil installere Python Docker-biblioteket på den eksterne Docker-verten.
Konfigurere Ansible for Local Docker Host Automation:
Hvis du har Docker installert på verten der du har installert Ansible, og du vil automatisere den ved hjelp av Ansible, så er denne delen noe for deg.
Først oppretter du en ny Ansible-spillbok install_docker_python_lib.yaml i lekebøker / katalog som følger:
$ nano playbooks / install_docker_python_lib.yaml
Skriv inn følgende linjer i install_docker_python_lib.yaml fil.
- verter: localhosttilkobling: lokal
bruker: shovon
bli: Sant
oppgaver:
- navn: Sørg for at python3-docker-pakken er installert
apt:
navn: python3-docker
tilstand: til stede
update_cache: Sant
Her er linjen bruker: shovon settene shovon som brukeren som skal utføre oppgavene. Det vil være annerledes for deg. Så sørg for å endre det til påloggingsbrukernavnet ditt.
Du finner påloggingsbrukernavnet til Docker-verten din med følgende kommando:
$ whoami
Når du er ferdig, trykk
Kjør nå install_docker_python_lib.yaml spillbok som følger:
$ ansible-playbook --ask-pass - ask-become-passspillbøker / install_docker_python_lib.yaml
Ansible vil be deg om påloggingspassordet til brukeren du har angitt i spillboken. Skriv inn passordet for pålogging og trykk
Ansible vil også be deg om BECOME / sudo-passordet. Det skal være det samme passordet som påloggingspassordet ditt. La den stå tom og trykk
Spillboken skal begynne å kjøre. Det kan ta litt tid å fullføre.
På dette tidspunktet skal spillboken være vellykket og Python Docker-biblioteket skal installeres.
Gjør nødvendig justering av spillbøker:
Avhengig av om du administrerer Docker-containere på din lokale Docker-vert eller en ekstern Docker-vert, må du justere spillbøkene dine deretter.
Fra de neste delene av denne artikkelen vil jeg kjøre eksemplene på spillbøker på en ekstern Docker-vert. Så alle spillbøkene begynner med følgende linjer:
- verter: dockerbruker: ansible
oppgaver:
Hvis du vil kjøre playbooks på din lokale Docker-vert, må du sørge for at playbooks starter med følgende linjer i stedet.
- verter: localhosttilkobling: lokal
bruker: shovon
bli: Sant
oppgaver:
Bytt deretter ut
Du må også kjøre Ansible-spillbøkene litt annerledes hvis du skal administrere en Docker-vert lokalt ved hjelp av Ansible.
Du kan kjøre en Ansible-spillbok lokalt som følger:
$ ansible-playbook --ask-pass --ask-become-pass
Sørg for å endre
Stoppe en Docker Container:
Hvis du har en Docker-beholder som kjører, og du kjenner ID-en eller navnet på Docker-beholderen, kan du enkelt stoppe den Docker-beholderen ved hjelp av Ansible.
I denne delen skal jeg vise deg hvordan du gjør det.
Først skal jeg lage en Nginx (bilde navn) Docker container http_server1 (beholdernavn) som følger:
$ docker kjøre -p 8080: 80 -d --navn http_server1 nginx
Som du kan se, Docker-containeren http_server1 løper.
$ docker ps
For å stoppe Docker-containeren http_server1 ved hjelp av Ansible, opprett en ny spillbok stopp_container.yaml i lekebøker / katalog som følger:
$ nano playbooks / stop_container.yaml
Skriv deretter inn følgende linjer i stopp_container.yaml lekebok.
- verter: dockerbruker: ansible
oppgaver:
- navn: Stopp http_server1-beholderen
docker_container:
navn: http_server1
tilstand: stoppet
Når du er ferdig, trykk
Her Ansible docker_container modulen brukes til å stoppe Docker-containeren http_server1.
Kjør nå stopp_container.yaml spillbok med følgende kommando:
$ ansible-playbook playbooks / stop_container.yaml
Som du kan se, Docker-containeren http_server1 kjører ikke lenger på den eksterne Docker-verten min.
$ docker ps
Du kan liste alle Docker-containere (kjører, stopper, stoppes) med følgende kommando:
$ docker ps - altSom du kan se, stoppet Docker-beholderen http_server1 er oppført.
Stopper alle kjørende Docker-containere:
Hvis du vil stoppe alle Docker-containere som kjører på Docker-verten din ved hjelp av Ansible, er denne delen noe for deg.
Først skal jeg lage 3 Docker-containere (server1, server2, og server3) slik at jeg kan stoppe dem alle ved å bruke Ansible senere.
Å lage server1 Docker-container, kjør følgende kommando:
$ docker kjør -p 8081: 80 -d --navn server1 nginx
Å lage server2 Docker-container, kjør følgende kommando:
$ docker kjøre -p 8082: 80 -d --navn server2 nginx
Å lage server3 Docker container, kjør følgende kommando:
$ docker kjøre -p 8083: 80 -d --navn server3 nginx
Som du kan se, er server1, server2, og server3 Docker-containere kjører på den eksterne Docker-verten min.
$ docker ps
For å stoppe alle disse Docker-containerne, opprett en ny spillbok stop_all_container.yaml i din lekebøker / katalog som følger:
$ nano playbooks / stop_all_container.yaml
Skriv inn følgende linjer i stop_all_container.yaml spillboksfil.
- verter: dockerbruker: ansible
oppgaver:
- navn: Få en liste over alle containere som kjører
docker_host_info:
containere: Sant
registrer: docker_info
- navn: Stopp alle kjørende containere
docker_container:
navn: 'element.Navn [0] | regex_replace ("^ /", "") '
tilstand: stoppet
loop: 'docker_info.containere '
For å redde stop_all_container.yaml trykk på
Her har jeg definert to oppgaver.
Den første oppgaven bruker Ansible docker_host_info modul for å få en liste over alle kjørende Docker-containere og lagre den i docker_info variabel.
Den andre oppgaven går gjennom docker_info.containere array finner de kjørende Docker-containernavnene og stopper dem en etter en.
Kjør nå stop_all_container.yaml spillbok med følgende kommando:
$ ansible-playbook playbooks / stop_all_container.yaml
Spillboken skal kjøre som du kan se på skjermbildet nedenfor.
Som du kan se, er det ingen Docker-containere som kjører på den eksterne Docker-verten min.
$ docker ps
Du kan liste alle Docker-containere (kjører, stopper, stoppes) med følgende kommando:
$ docker ps - altSom du kan se, stoppet Docker-containere server1, server2, og server3 er listet.
Stopp alle Docker-containere som kjører et bestemt bilde:
Hvis du vil stoppe alle Docker-containere som kjører et bestemt Docker-bilde, er denne delen noe for deg.
La oss først lage noen dummy Docker-containere.
Jeg lager 2 Docker-containere (nginx1 og nginx2) bruker Nginx Docker-bilde og 2 Docker-containere (http1 og http2) bruker httpd Docker-bilde for demonstrasjonen.
Å lage nginx1 Docker-container ved hjelp av Nginx Docker-bilde, kjør følgende kommando:
$ docker kjøre -d -p 8081: 80 --navn nginx1 nginx
Å lage nginx2 Docker-container ved hjelp av Nginx Docker-bilde, kjør følgende kommando:
$ docker kjøre -d -p 8082: 80 --navn nginx2 nginx
Å lage http1 Docker-container ved hjelp av httpd Docker-bilde, kjør følgende kommando:
$ docker kjøre -d -p 8091: 80 --navn http1 httpd
Å lage http2 Docker-container ved hjelp av httpd Docker-bilde, kjør følgende kommando:
$ docker kjøre -d -p 8092: 80 --navn http2 httpd
Som du kan se, er nginx1, nginx2, http1, og http2 Docker-containere kjører på den eksterne Docker-verten min.
For å stoppe alle Docker-containere som kjører et spesifikt Docker-bilde (la oss si, nginx), opprett en ny Docker-spillbok stop_all_image_containers.yaml i lekebøker / katalog som følger:
$ nano playbooks / stop_all_image_containers.yaml
Skriv inn følgende linjer i stop_all_image_containers.yaml fil.
- verter: dockerbruker: ansible
oppgaver:
- navn: Få en liste over alle containere som kjører
docker_host_info:
containere: Sant
registrer: docker_info
- navn: Stopp alle containere som kjører nginx image
docker_container:
navn: 'element.Navn [0] | regex_replace ("^ /", "") '
tilstand: stoppet
når: vare.Bilde == 'nginx'
loop: 'docker_info.containere '
Når du er ferdig, trykk
Her har jeg lagt til 2 oppgaver.
Den første oppgaven bruker Ansible docker_host_info modul for å få en liste over alle kjørende Docker-containere og lagre den i docker_info variabel.
Den andre oppgaven går gjennom docker_info.containere array finner de kjørende navnene på Docker-container og kjører docker_container modul for hver container som kjører bare hvis containerens bildenavn er Nginx. Deretter stopper den matchede Docker-containere.
I den andre oppgaven brukes følgende linje for å sjekke om Docker-containeren kjører Nginx bilde. Du kan endre det til et annet Docker-bildenavn hvis du vil.
Kjør nå stop_all_image_containers.yaml spillbok som følger:
$ ansible-playbook playbooks / stop_all_image_containers.yaml
Som du kan se, er bare Nginx containere (nginx1 og nginx2) er modifisert (stoppet). De httpd containere (http1 og http2) hoppes over.
Som du ser, nei Nginx Docker-containere kjører på den eksterne Docker-verten min. Bare den httpd Docker-containere (http1 og http2) løper.
$ docker ps
Du kan liste opp alle Docker-containere (kjører, stopper, stoppes) med følgende kommando:
$ docker ps - altSom du kan se, stoppet Docker-containere nginx1 og nginx2 er listet.
Konklusjon:
I denne artikkelen har jeg vist deg hvordan du stopper en Docker-container som kjører, alle Docker-containere som kjører et bestemt Docker-bilde, og alle Docker-containere som kjører til din Docker-vert. For å gjøre det har jeg brukt Ansible docker_container og docker_host_info moduler i denne artikkelen.
For å lære mer om disse modulene, besøk følgende Ansible offisielle dokumentasjonssider.
[1] docker_container - Administrer dockercontainere
[2] docker_host_info - Henter fakta om docker-verten og lister over objekter fra tjenestene