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 din, containere, volumer, nettverk osv. Hvis du vil stoppe løper Docker -containerne, kan du gjøre det også.

I denne artikkelen skal jeg vise deg hvordan du kan stoppe en spesifikk dockerbeholder. Jeg skal også vise deg hvordan du kan stoppe alle de løpende Docker -containerne, eller alle Docker -containerne som kjører et spesifikt 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 -bibliotek installert på Docker -verten din.
4) Du må konfigurere Docker -verten for ansettbar automatisering.

MERK: Docker -vert er datamaskinen der du har installert Docker.

Det er mange artikler om Linuxhint dedikert til å installere Ansible og konfigurere verter for Ansible Automation og installere Docker. Du kan sjekke dem ut om nødvendig.

Opprette en prosjektkatalog:

For å oppbevare alle filene og katalogen vi oppretter i denne artikkelen organisert, er det en god idé å lage en prosjektkatalog.

For å lage en prosjektkatalog Docker1/ I din nåværende arbeidskatalog, kjør følgende kommando:

$ mkdir -pv docker1/playbooks

Naviger nå 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 for deg.

Først må du opprette en Ansible Inventory -fil verter med følgende kommando:

$ Nano -verter

Legg nå IP -adressen eller DNS -navnet på Docker -verten din i verter ' Lagerfilen som følger.

[Docker]
VM4.Nodekite.com

I mitt tilfelle er DNS -navnet på Ubuntu Docker -verten min 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.

Lag nå en Ansible konfigurasjonsfil Ansible.CFG følgende:

$ Nano Ansible.CFG

Nå, 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.

Nå, sjekk 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 min eksterne Docker -vert.

Som du ser, har jeg Docker 19.03.11 installert på min eksterne Ubuntu Docker -vert.

Nå må du ha Python Docker -bibliotek installert på din eksterne Docker -vert for Ansible Docker -moduler for å fungere. I denne artikkelen bruker jeg Ubuntu. Så dette er hva jeg vil dekke.

For å installere Python Docker -biblioteket på din eksterne Docker -vert (Ubuntu), oppretter du en ny Ansible Playbook install_docker_python_lib.Yaml i Playbooks/ Katalog som følger:

$ nano playbooks/install_docker_python_lib.Yaml

Nå, skriv inn følgende linjer i install_docker_python_lib.Yaml fil.

- Verter: Docker
Bruker: Ansible
bli: sant
oppgaver:
- Navn: Forsikre deg om at Python3-Docker-pakken er installert
apt:
Navn: Python3-Docker
Stat: Nåværende
Update_cache: sant

Når du er ferdig, trykk+ X etterfulgt av Y og For å redde install_docker_python_lib.Yaml fil.

Nå, løp install_docker_python_lib.Yaml Playbook som følger:

$ ansible-playbook playbooks/install_docker_python_lib.Yaml

Playbooken skal kjøre vellykket, og den vil installere Python Docker -biblioteket på din eksterne Docker -vert.

Konfigurere Ansible for lokal Docker Host Automation:

Hvis du har installert Docker på verten der du har installert og du vil automatisere den ved hjelp av Ansible, er denne delen for deg.

Først må du lage en ny Ansible Playbook install_docker_python_lib.Yaml i Playbooks/ Katalog som følger:

$ nano playbooks/install_docker_python_lib.Yaml

Nå, skriv inn følgende linjer i install_docker_python_lib.Yaml fil.

- Verter: Localhost
Tilkobling: Lokal
Bruker: Shovon
bli: sant
oppgaver:
- Navn: Forsikre deg om at Python3-Docker-pakken er installert
apt:
Navn: Python3-Docker
Stat: Nåværende
Update_cache: sant

Her, 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 kan finne 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.

Nå, løp install_docker_python_lib.Yaml Playbook som følger:

$ Ansible-Playbook-ASK-PASS-ASK-BECOME-PASS
playbooks/install_docker_python_lib.Yaml

Ansible vil be deg om påloggingspassordet til brukeren du har spesifisert i spillboken. Skriv inn påloggingspassordet og trykk .

Ansible vil også be deg om å bli/sudo -passordet. Det skal være det samme passordet som påloggingspassordet ditt. Så la det være tomt og trykk .

Playbooken skal begynne å løpe. Det kan ta en stund å 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 eksemplet på spillbøker på en ekstern Docker -vert. Så alle spillbøkene vil starte med følgende linjer:

- Verter: Docker
Bruker: Ansible
oppgaver:

Hvis du vil kjøre spillbøkene på din lokale Docker -vert, så sørg for at spillbøkene 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 + X etterfulgt av Y og .

Du må også kjøre Ansible Playbooks litt annerledes hvis du skal administrere en Docker -vert lokalt ved hjelp av Ansible.

Du kan kjøre en Ansible Playbook lokalt som følger:

$ Ansible-Playbook-ASK-PASS-ASK-BECOME-PASS

Sørg for å endre til banen til din Ansible Playbook YAML -fil.

Stopper en Docker -beholder:

Hvis du har en løpende Docker -beholder og kjenner ID eller navn 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 (Bildenavn) Docker Container http_server1 (Containernavn) som følger:

$ Docker Run -P 8080: 80 -D -Navn http_server1 nginx

Som du kan se, dockerbeholderen http_server1 løper.

$ docker ps

Å stoppe dockerbeholderen http_server1 Bruke Ansible, lage en ny spillbok stop_container.Yaml i Playbooks/ Katalog som følger:

$ nano playbooks/stop_container.Yaml

Skriv deretter inn følgende linjer i stop_container.Yaml Playbook.

- Verter: Docker
Bruker: Ansible
oppgaver:
- Navn: Stopp http_server1 -beholderen
docker_container:
Navn: http_server1
Stat: stoppet

Når du er ferdig, trykk + X etterfulgt av Y og For å redde stop_container.Yaml fil.

Her, Ansible docker_container Modul brukes til å stoppe dockerbeholderen http_server1.

Nå, løp stop_container.Yaml Playbook med følgende kommando:

$ Ansible-Playbook Playbooks/stop_container.Yaml

Som du kan se, dockerbeholderen http_server1 kjører ikke lenger på min eksterne Docker -vert.

$ docker ps

Du kan liste opp alle Docker -containerne (løpende, pause, stoppet) med følgende kommando:

$ docker ps --all

Som du kan se, stoppet Docker -beholderen http_server1 er oppført.

Stopper alle løpende Docker -containere:

Hvis du vil stoppe alle Docker -containerne som kjører på Docker -verten din ved hjelp av Ansible, er denne delen 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 Run -P 8081: 80 -d -Name Server1 Nginx

Å lage Server2 Docker Container, kjør følgende kommando:

$ Docker Run -P 8082: 80 -d -Name Server2 Nginx

Å lage Server3 Docker Container, kjør følgende kommando:

$ Docker Run -P 8083: 80 -d -Name Server3 Nginx

Som du kan se, Server1, Server2, og Server3 Docker -containere kjører på min eksterne Docker -vert.

$ docker ps

For å stoppe alle disse Docker -containerne, oppretter du en ny spillbok stop_all_container.Yaml i din Playbooks/ Katalog som følger:

$ nano playbooks/stop_all_container.Yaml

Nå, skriv inn følgende linjer i stop_all_container.Yaml Playbook -fil.

- Verter: Docker
Bruker: Ansible
oppgaver:
- Navn: Få en liste over alle løpende containere
docker_host_info:
Containere: True
Register: Docker_info
- Navn: Stopp alle løpende containere
docker_container:
Navn: 'element.Navn [0] | regex_replace ("^/", "") '
Stat: stoppet
loop: 'docker_info.containere '

For å redde stop_all_container.Yaml fil, trykk + X etterfulgt av Y og .

Her har jeg definert 2 oppgaver.

Den første oppgaven bruker Ansible docker_host_info modul for å få en liste over alle løpende docker -containere og lagrer den i docker_info variabel.

Den andre oppgaven sløyer seg gjennom docker_info.containere Array finner de løpende Docker -beholdernavnene og stopper dem en etter en.

Nå, løp stop_all_container.Yaml Playbook med følgende kommando:

$ ansible-playbook playbooks/stop_all_container.Yaml

Playbooken skal kjøre vellykket som du kan se på skjermdumpen nedenfor.

Som du ser, er det ingen løpende dockerbeholdere på min eksterne Docker -vert.

$ docker ps

Du kan liste opp alle Docker -containerne (løpende, pause, stoppet) med følgende kommando:

$ docker ps --all

Som du kan se, stoppede Docker -containere Server1, Server2, og server3 er listet.

Stopp alle Docker -containere som kjører et spesifikt bilde:

Hvis du vil stoppe alle Docker -containerne som kjører et spesifikt Docker -bilde, er dette avsnittet 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 -beholderen ved hjelp av Nginx Docker -bilde, kjør følgende kommando:

$ Docker Run -D -P 8081: 80 -Navn Nginx1 Nginx

Å lage nginx2 Docker -beholderen ved hjelp av Nginx Docker -bilde, kjør følgende kommando:

$ Docker Run -D -P 8082: 80 -Navn Nginx2 Nginx

Å lage http1 Docker -beholderen ved hjelp av httpd Docker -bilde, kjør følgende kommando:

$ Docker Run -D -P 8091: 80 -Navn http1 httpd

Å lage http2 Docker -beholderen ved hjelp av httpd Docker -bilde, kjør følgende kommando:

$ Docker Run -D -P 8092: 80 -Navn http2 httpd

Som du kan se, nginx1, nginx2, http1, og http2 Docker -containere kjører på min eksterne Docker -vert.

For å stoppe alle Docker -containerne som kjører et spesifikt Docker -bilde (la oss si, nginx), opprette en ny Docker -spillbok stop_all_image_containers.Yaml i Playbooks/ Katalog som følger:

$ nano playbooks/stop_all_image_containers.Yaml

Nå, skriv inn følgende linjer i stop_all_image_containers.Yaml fil.

- Verter: Docker
Bruker: Ansible
oppgaver:
- Navn: Få en liste over alle løpende containere
docker_host_info:
Containere: True
Register: Docker_info
- Navn: Stopp alle containere som kjører Nginx -bilde
docker_container:
Navn: 'element.Navn [0] | regex_replace ("^/", "") '
Stat: stoppet
Når: vare.Image == '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 løpende docker -containere og lagrer den i Docker_info variabel.

Den andre oppgaven sløyer seg gjennom docker_info.containere Array finner de løpende Docker Container -navnene og kjører docker_container Modul for hver løpende beholder bare hvis beholderens bildenavn er Nginx. Deretter stopper det de matchede Docker -containerne.

I den andre oppgaven brukes følgende linje for å sjekke om Docker -beholderen kjører Nginx bilde. Du kan endre det til et annet docker -bildavn hvis du vil.

Nå, løp stop_all_image_containers.Yaml Playbook som følger:

$ ansible-playbook playbooks/stop_all_image_containers.Yaml

Som du kan se, bare Nginx containere (nginx1 og nginx2) er endret (stoppet). De httpd containere (http1 og http2) blir hoppet over.

Som du kan se, nei Nginx Docker -containere kjører på min eksterne Docker -vert. Bare den httpd Docker containere (http1 og http2) løper.

$ docker ps

Du kan liste opp alle Docker -containerne (løpende, pause, stoppet) med følgende kommando:

$ docker ps --all

Som du kan se, stoppede Docker -containere nginx1 og nginx2 er listet.

Konklusjon:

I denne artikkelen har jeg vist deg hvordan du stopper en løpende Docker -beholder, alle Docker -containerne som kjører et spesifikt Docker -bilde, og alle Running Docker -containere i Docker -verten din. 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 offisielle dokumentasjonssider.

[1] Docker_Container - Administrer Docker Containers
[2] Docker_host_info - Henter fakta om Docker -vert og lister over objekter av tjenestene