Ansible

Hvordan stoppe alle Docker-containere ved hjelp av Ansible

Hvordan stoppe alle Docker-containere ved hjelp av Ansible
Ansible har mange moduler for å automatisere Docker-verten, containere, volumer, nettverk osv. Hvis du vil stoppe dine kjørende Docker-containere, kan du også gjøre det.

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 + X etterfulgt av Y og for å redde verter fil.

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 + X etterfulgt av Y og for å redde ansible.cfg fil.

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: docker
bruker: 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 + X etterfulgt av Y og for å redde install_docker_python_lib.yaml fil.

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: localhost
tilkobling: 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 + X etterfulgt av Y og for å redde install_docker_python_lib.yaml fil.

Kjør nå install_docker_python_lib.yaml spillbok som følger:

$ ansible-playbook --ask-pass - ask-become-pass
spillbø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: docker
bruker: 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: localhost
tilkobling: lokal
bruker: shovon
bli: Sant
oppgaver:

Bytt deretter ut med oppgavene du vil kjøre, og lagre spillboken ved å trykke på + X etterfulgt av Y og .

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 til banen til Ansible playbook YAML-filen.

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: docker
bruker: ansible
oppgaver:
- navn: Stopp http_server1-beholderen
docker_container:
navn: http_server1
tilstand: stoppet

Når du er ferdig, trykk + X etterfulgt av Y og for å redde stopp_container.yaml fil.

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 - alt

Som 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: docker
bruker: 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å + X etterfulgt av Y og .

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 - alt

Som 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: docker
bruker: 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 + X etterfulgt av Y og for å redde stop_all_image_containers.yaml fil.

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 - alt

Som 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

Mus Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
De fleste Linux-distribusjoner leveres med "libinput" -biblioteket som standard for å håndtere inngangshendelser på et system. Den kan behandle inngan...
Mus Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kanskje du trenger et verktøy som kan gjøre at musens kontroll endres med hvert program du bruker. Hvis dette er tilfelle, kan du prøve et program som...
Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jeg har nylig lest om Microsoft Sculpt Touch trådløs mus og bestemte meg for å kjøpe den. Etter å ha brukt den en stund bestemte jeg meg for å dele mi...