I denne artikel vil jeg vise dig, hvordan du stopper en bestemt Docker-container. Jeg vil også vise dig, hvordan du stopper alle kørende Docker-containere eller alle Docker-containere, der kører et specifikt Docker-billede ved hjælp af Ansible. Så lad os komme i gang.
Forudsætninger:
Hvis du vil prøve eksemplerne på denne artikel,
1) Du skal have Ansible installeret på din computer.
2) Du skal have Docker installeret på din computer eller en ekstern Ubuntu-vært.
3) Du skal have Python Docker-bibliotek installeret på din Docker-vært.
4) Du skal konfigurere Docker-værten til Ansible-automatisering.
BEMÆRK: Docker vært er den computer, hvor du har installeret Docker.
Der er mange artikler om LinuxHint dedikeret til installation af Ansible og konfigurering af værter til Ansible-automatisering og installation af Docker. Du kan tjekke dem ud, hvis det er nødvendigt.
Oprettelse af en projektmappe:
For at holde alle de filer og bibliotek, vi opretter i denne artikel, organiseret, er det en god ide at oprette en projektmappe.
For at oprette et projektmappe docker1 / i din nuværende arbejdsmappe skal du køre følgende kommando:
$ mkdir -pv docker1 / playbooks
Naviger nu til docker1 / projektmappe som følger:
$ cd docker1 /
Konfiguration af Ansible til Remote Docker Host Automation:
Hvis du har Docker installeret på en ekstern Ubuntu-vært, som du vil automatisere ved hjælp af Ansible, er dette afsnit noget for dig.
Opret først en Ansible beholdningsfil værter med følgende kommando:
$ nano værter
Tilføj nu din Docker-værts IP-adresse eller DNS-navn i værter opgørelsesfil som følger.
[docker]vm4.nodekite.com
I mit tilfælde er DNS-navnet på min Ubuntu Docker-vært vm4.nodekite.com. Det vil være anderledes for dig. Så sørg for at udskifte det efter behov.
Når du er færdig, skal du trykke på
Opret nu en Ansible-konfigurationsfil ansible.cfg som følger:
$ nano ansible.cfg
Skriv nu de følgende linjer i ansible.cfg konfigurationsfil.
[docker]vm4.nodekite.com
Når du er færdig, skal du trykke på
Kontroller nu, om du kan pinge den eksterne Docker-vært fra din computer med følgende kommando:
$ ansible all -u ansible -m ping
Som du kan se, kan jeg pinge til min eksterne Docker-vært.
Som du kan se, har jeg Docker 19.03.11 installeret på min eksterne Ubuntu Docker-vært.
Nu skal du have Python Docker-bibliotek installeret på din eksterne Docker-vært for at Ansible docker-moduler kan fungere. I denne artikel bruger jeg Ubuntu. Så dette er hvad jeg vil dække.
For at installere Python Docker-biblioteket på din eksterne Docker-vært (Ubuntu) skal du oprette en ny Ansible playbook install_docker_python_lib.yaml i legebøger / katalog som følger:
$ nano playbooks / install_docker_python_lib.yaml
Skriv nu de følgende linjer i install_docker_python_lib.yaml fil.
- værter: dockerbruger: ansible
blive: Sandt
opgaver:
- navn: Sørg for, at python3-docker-pakke er installeret
apt:
navn: python3-docker
tilstand: til stede
update_cache: Sandt
Når du er færdig, skal du trykke på
Kør nu install_docker_python_lib.yaml playbook som følger:
$ ansible-playbook playbooks / install_docker_python_lib.yaml
Playbook'en skal køre med succes, og den installerer Python Docker-biblioteket på din eksterne Docker-vært.
Konfiguration af Ansible for Local Docker Host Automation:
Hvis du har Docker installeret på den vært, hvor du har Ansible installeret, og du vil automatisere det ved hjælp af Ansible, så er dette afsnit noget for dig.
Opret først en ny Ansible playbook install_docker_python_lib.yaml i legebøger / katalog som følger:
$ nano playbooks / install_docker_python_lib.yaml
Skriv nu de følgende linjer i install_docker_python_lib.yaml fil.
- værter: localhostforbindelse: lokal
bruger: shovon
blive: Sandt
opgaver:
- navn: Sørg for, at python3-docker-pakke er installeret
apt:
navn: python3-docker
tilstand: til stede
update_cache: Sandt
Her er linjen bruger: shovon sæt shovon som den bruger, der skal udføre opgaverne. Det vil være anderledes for dig. Så sørg for at ændre det til dit login-brugernavn.
Du kan finde login-brugernavnet på din Docker-vært med følgende kommando:
$ whoami
Når du er færdig, skal du trykke på
Kør nu install_docker_python_lib.yaml playbook som følger:
$ ansible-playbook --ask-pass - spørge-blive-passplaybooks / install_docker_python_lib.yaml
Ansible vil bede dig om adgangskoden til den bruger, du har angivet i playbogen. Indtast loginadgangskoden, og tryk på
Ansible vil også bede dig om BECOME / sudo-adgangskoden. Det skal være den samme adgangskode som din loginadgangskode. Så lad det være tomt, og tryk på
Spilbogen skal begynde at køre. Det kan tage et stykke tid at gennemføre.
På dette tidspunkt skal playbook være vellykket, og Python Docker-biblioteket skal installeres.
Sådan foretages den nødvendige justering af playbøger:
Afhængigt af om du administrerer Docker-containere på din lokale Docker-vært eller en ekstern Docker-vært, skal du justere dine playbøger i overensstemmelse hermed.
Fra de næste sektioner i denne artikel kører jeg eksemplerne på playbøger på en ekstern Docker-vært. Så alle playbooks starter med følgende linjer:
- værter: dockerbruger: ansible
opgaver:
Hvis du vil køre playbøgerne på din lokale Docker-vært, skal du sørge for, at playbooks starter med følgende linjer i stedet.
- værter: localhostforbindelse: lokal
bruger: shovon
blive: Sandt
opgaver:
Udskift derefter
Du skal også køre Ansible-playbøgerne lidt anderledes, hvis du administrerer en Docker-vært lokalt ved hjælp af Ansible.
Du kan køre en Ansible playbook lokalt som følger:
$ ansible-playbook --ask-pass - spørge-blive-pass
Sørg for at ændre
Stoppe en Docker Container:
Hvis du har en kørende Docker-container, og du kender ID'eren eller navnet på Docker-containeren, kan du nemt stoppe den Docker-container ved hjælp af Ansible.
I dette afsnit vil jeg vise dig, hvordan du gør det.
Først skal jeg oprette en Nginx (billednavn) Docker-container http_server1 (containernavn) som følger:
$ docker køre -p 8080: 80 -d --navn http_server1 nginx
Som du kan se, Docker-containeren http_server1 løber.
$ docker ps
For at stoppe Docker-containeren http_server1 ved hjælp af Ansible, opret en ny playbook stop_container.yaml i legebøger / katalog som følger:
$ nano playbooks / stop_container.yaml
Indtast derefter de følgende linjer i stop_container.yaml playbook.
- værter: dockerbruger: ansible
opgaver:
- navn: Stop http_server1-containeren
docker_container:
navn: http_server1
tilstand: stoppet
Når du er færdig, skal du trykke på
Her det Ansible docker_container modul bruges til at stoppe Docker-containeren http_server1.
Kør nu stop_container.yaml playbook med følgende kommando:
$ ansible-playbook playbooks / stop_container.yaml
Som du kan se, Docker-containeren http_server1 kører ikke længere på min eksterne Docker-vært.
$ docker ps
Du kan liste alle Docker-containere (kører, pause, stoppet) med følgende kommando:
$ docker ps - altSom du kan se, den stoppede Docker-container http_server1 er opført.
Stop alle kørende Docker-containere:
Hvis du vil stoppe alle Docker-containere, der kører på din Docker-vært ved hjælp af Ansible, er dette afsnit noget for dig.
Først skal jeg oprette 3 Docker-containere (server1, server2, og server3) så jeg kan stoppe dem alle ved hjælp af Ansible senere.
At oprette server1 Docker-container, kør følgende kommando:
$ docker kør -p 8081: 80 -d --navn server1 nginx
At oprette server2 Docker-container, kør følgende kommando:
$ docker kør -p 8082: 80 -d --navn server2 nginx
At oprette server3 Docker-container, kør følgende kommando:
$ docker kør -p 8083: 80 -d --navn server3 nginx
Som du kan se, er server1, server2, og server3 Docker-containere kører på min eksterne Docker-vært.
$ docker ps
For at stoppe alle disse Docker-containere skal du oprette en ny playbook stop_all_container.yaml i din legebøger / katalog som følger:
$ nano playbooks / stop_all_container.yaml
Skriv nu de følgende linjer i stop_all_container.yaml playbook-fil.
- værter: dockerbruger: ansible
opgaver:
- navn: Få en liste over alle kørende containere
docker_host_info:
containere: Sandt
register: docker_info
- navn: Stop alle kørende containere
docker_container:
navn: 'item.Navne [0] | regex_replace ("^ /", "") '
tilstand: stoppet
loop: 'docker_info.containere '
For at gemme stop_all_container.yaml fil, skal du trykke på
Her har jeg defineret to opgaver.
Den første opgave bruger Ansible docker_host_info modul for at få en liste over alle kørende Docker-containere og gemme den i docker_info variabel.
Den anden opgave løber gennem docker_info.containere array finder de kørende Docker-containernavne og stopper dem en efter en.
Kør nu stop_all_container.yaml playbook med følgende kommando:
$ ansible-playbook playbooks / stop_all_container.yaml
Playbook'en skal køre med succes, som du kan se på skærmbilledet nedenfor.
Som du kan se, er der ingen kørende Docker-containere på min eksterne Docker-vært.
$ docker ps
Du kan liste alle Docker-containere (kører, pauser, stoppet) med følgende kommando:
$ docker ps - altSom du kan se, stoppede Docker-containere server1, server2, og server3 er anført.
Stop alle dockercontainere, der kører et specifikt billede:
Hvis du vil stoppe alle Docker-containere, der kører et specifikt Docker-billede, er dette afsnit noget for dig.
Lad os først oprette nogle dummy Docker-containere.
Jeg opretter 2 Docker-containere (nginx1 og nginx2) bruger Nginx Docker-billede og 2 Docker-containere (http1 og http2) bruger httpd Docker-billede til demonstrationen.
At oprette nginx1 Docker-container ved hjælp af Nginx Docker-billede, kør følgende kommando:
$ docker kør -d -p 8081: 80 --navn nginx1 nginx
At oprette nginx2 Docker-container ved hjælp af Nginx Docker-billede, kør følgende kommando:
$ docker kør -d -p 8082: 80 --navn nginx2 nginx
At oprette http1 Docker-container ved hjælp af httpd Docker-billede, kør følgende kommando:
$ docker køre -d -p 8091: 80 --navn http1 httpd
At oprette http2 Docker-container ved hjælp af httpd Docker-billede, kør følgende kommando:
$ docker køre -d -p 8092: 80 --navn http2 httpd
Som du kan se, er nginx1, nginx2, http1, og http2 Docker-containere kører på min eksterne Docker-vært.
For at stoppe alle Docker-containere, der kører et specifikt Docker-billede (lad os sige, nginx), opret en ny Docker-playbog stop_all_image_containere.yaml i legebøger / katalog som følger:
$ nano playbooks / stop_all_image_containers.yaml
Skriv nu de følgende linjer i stop_all_image_containere.yaml fil.
- værter: dockerbruger: ansible
opgaver:
- navn: Få en liste over alle kørende containere
docker_host_info:
containere: Sandt
register: docker_info
- navn: Stop alle containere, der kører nginx-billede
docker_container:
navn: 'item.Navne [0] | regex_replace ("^ /", "") '
tilstand: stoppet
når: vare.Billede == 'nginx'
loop: 'docker_info.containere '
Når du er færdig, skal du trykke på
Her har jeg tilføjet 2 opgaver.
Den første opgave bruger Ansible docker_host_info modul for at få en liste over alle kørende Docker-containere og gemme den i docker_info variabel.
Den anden opgave løber gennem docker_info.containere array finder de kørende Docker-containernavne og kører docker_container modul til hver kørende container kun, hvis containerens billednavn er Nginx. Derefter stopper det de matchede Docker-containere.
I den anden opgave bruges følgende linje til at kontrollere, om Docker-containeren kører Nginx billede. Du kan ændre det til et andet Docker-billednavn, hvis du vil.
Kør nu stop_all_image_containere.yaml playbook som følger:
$ ansible-playbook playbooks / stop_all_image_containers.yaml
Som du kan se, er kun den Nginx containere (nginx1 og nginx2) er ændret (stoppet). Det httpd containere (http1 og http2) springes over.
Som du kan se, nej Nginx Docker-containere kører på min eksterne Docker-vært. Kun den httpd Docker-containere (http1 og http2) løber.
$ docker ps
Du kan liste alle Docker-containere (kører, pauser, stoppet) med følgende kommando:
$ docker ps - altSom du kan se, stoppede Docker-containere nginx1 og nginx2 er anført.
Konklusion:
I denne artikel har jeg vist dig, hvordan du stopper en kørende Docker-container, alle Docker-containere, der kører et specifikt Docker-billede, og alle de kørende Docker-containere fra din Docker-vært. For at gøre det har jeg brugt Ansible docker_container og docker_host_info moduler i denne artikel.
For at lære mere om disse moduler skal du besøge følgende officielle Ansible-dokumentationssider.
[1] docker_container - Administrer dockercontainere
[2] docker_host_info - Henter fakta om docker vært og lister over objekter fra tjenesterne