Odgovorno

Kako zaustaviti sve Docker spremnike pomoću Ansible

Kako zaustaviti sve Docker spremnike pomoću Ansible
Ansible ima mnogo modula za automatizaciju vašeg Dockera domaćina, spremnika, volumena, mreža itd. Ako želite zaustaviti svoje pokrenute Dockerove spremnike, možete i to učiniti.

U ovom članku pokazat ću vam kako zaustaviti određeni Docker spremnik. Također ću vam pokazati kako zaustaviti sve pokrenute Docker spremnike ili sve Dockerove spremnike koji izvode određenu Dockerovu sliku pomoću Ansible. Pa, krenimo.

Preduvjeti:

Ako želite isprobati primjere ovog članka,

1) Na računalu morate imati instaliran Ansible.
2) Na računalu ili udaljenom Ubuntu hostu morate imati instaliran Docker.
3) Na vašem Docker hostu morate imati instaliranu biblioteku Python Docker.
4) Morate konfigurirati Dockerovog domaćina za Ansible automatizaciju.

BILJEŠKA: Docker domaćin je računalo na kojem imate instaliran Docker.

Na LinuxHintu postoji mnogo članaka posvećenih Instaliranju Ansible i konfiguriranju hostova za Ansible automatizaciju i instaliranje Dockera. Možete ih provjeriti ako je potrebno.

Izrada direktorija projekata:

Da bi sve datoteke i direktorij koje ćemo stvarati u ovom članku bili organizirani, dobra je ideja stvoriti direktorij projekta.

Za stvaranje direktorija projekta docker1 / u trenutnom radnom direktoriju pokrenite sljedeću naredbu:

$ mkdir -pv docker1 / playbooks

Sada idite na docker1 / direktorij projekta kako slijedi:

$ cd docker1 /

Konfiguriranje odgovornog za automatizaciju hosta na udaljenoj priključnoj stanici:

Ako imate Docker instaliran na udaljenom Ubuntu hostu koji želite automatizirati pomoću Ansible, onda je ovaj odjeljak za vas.

Prvo stvorite datoteku inventara Ansible domaćini sa sljedećom naredbom:

$ nano domaćini

Sada dodajte IP adresu ili DNS ime svog domaćina Dockera u domaćini ' spis inventara kako slijedi.

[lučki radnik]
vm4.nodekite.com

U mom slučaju, DNS ime mog Ubuntu Docker hosta je vm4.nodekite.com. Za vas će biti drugačije. Stoga ga po potrebi zamijenite.

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti domaćini datoteka.

Sada stvorite konfiguracijsku datoteku Ansible ansible.usp kako slijedi:

$ nano ansible.usp

Sada unesite sljedeće retke u ansible.usp konfiguracijska datoteka.

[lučki radnik]
vm4.nodekite.com

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti ansible.usp datoteka.

Sada provjerite možete li pingati udaljeni Docker host sa svog računala pomoću sljedeće naredbe:

$ ansible sve -u ansible -m ping

Kao što vidite, mogu pingati svog udaljenog domaćina Dockera.

Kao što vidite, imam Docker 19.03.11 instaliran na mom udaljenom Ubuntu Docker hostu.

Sada za rad modula Ansible docker morate imati instaliranu biblioteku Python Docker na udaljenom hostu Dockera. U ovom članku koristim Ubuntu. Dakle, ovo je ono što ću pokriti.

Da biste instalirali biblioteku Python Docker na udaljeni Docker host (Ubuntu), stvorite novu knjigu s odgovorima install_docker_python_lib.yaml u igraonice / direktorij kako slijedi:

$ nano playbooks / install_docker_python_lib.yaml

Sada unesite sljedeće retke u install_docker_python_lib.yaml datoteka.

- domaćini: docker
korisnik: ansible
postati: Istina
zadaci:
- ime: Provjerite je li instaliran paket python3-docker
prikladan:
naziv: python3-docker
stanje: prisutno
update_cache: Tačno

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti install_docker_python_lib.yaml datoteka.

Sada pokrenite install_docker_python_lib.yaml playbook kako slijedi:

$ ansible-playbook playbooks / install_docker_python_lib.yaml

Knjiga za igru ​​trebala bi se uspješno izvoditi i instalirat će knjižnicu Python Docker na vaš udaljeni Docker domaćin.

Konfiguriranje odgovornog za lokalnu automatizaciju hosta dockera:

Ako imate Docker instaliran na hostu na koji ste instalirali Ansible i želite ga automatizirati pomoću Ansible, onda je ovaj odjeljak za vas.

Prvo izradite novu knjigu odgovora Ansible install_docker_python_lib.yaml u igraonice / direktorij kako slijedi:

$ nano playbooks / install_docker_python_lib.yaml

Sada unesite sljedeće retke u install_docker_python_lib.yaml datoteka.

- domaćini: localhost
veza: lokalna
korisnik: shovon
postati: Istina
zadaci:
- ime: Provjerite je li instaliran paket python3-docker
prikladan:
naziv: python3-docker
stanje: prisutno
update_cache: Tačno

Evo, crta korisnik: shovon setovi šovon kao korisnik koji će izvršavati zadatke. Za vas će biti drugačije. Stoga ga obavezno promijenite u svoje korisničko ime za prijavu.

Možete pronaći korisničko ime za prijavu vašeg domaćina Dockera pomoću sljedeće naredbe:

$ whoami

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti install_docker_python_lib.yaml datoteka.

Sada pokrenite install_docker_python_lib.yaml playbook kako slijedi:

$ ansible-playbook --ask-pass --ask-become-pass
playbooks / install_docker_python_lib.yaml

Ansible će vas pitati za lozinku za prijavu korisnika kojeg ste naveli u priručniku. Upišite lozinku za prijavu i pritisnite .

Ansible će od vas tražiti i POSTANI / sudo lozinku. To bi trebala biti ista lozinka kao i lozinka za prijavu. Dakle, ostavite ga praznim i pritisnite .

Knjiga s igrama trebala bi početi raditi. Dovršenje može potrajati.

U ovom bi trenutku knjiga priručnika trebala biti uspješna i instalirati biblioteku Python Docker.

Potrebno prilagođavanje Playbooka:

Ovisno o tome upravljate li Dockerovim spremnicima na vašem lokalnom Dockerovom hostu ili na udaljenom Dockerovom hostu, morate prilagoditi svoje playboje.

Iz sljedećih odjeljaka ovog članka pokrenut ću primjere knjiga knjiga na udaljenom Dockerovom hostu. Dakle, sve knjige s igrama započet će sa sljedećim redovima:

- domaćini: docker
korisnik: ansible
zadaci:

Ako želite pokrenuti knjige s reprodukcijama na lokalnom domaćinu Dockera, pobrinite se da knjige započinju sa sljedećim redovima.

- domaćini: localhost
veza: lokalna
korisnik: shovon
postati: Istina
zadaci:

Zatim zamijenite sa zadacima koje želite pokrenuti i spremite knjigu pjesama pritiskom na + x nakon čega slijedi Y i .

Također morate pokrenuti Ansible playbooks malo drugačije ako ćete lokalno upravljati Dockerovim računalom koristeći Ansible.

Možete pokrenuti Ansible playbook lokalno na sljedeći način:

$ ansible-playbook --ask-pass --ask-become-pass

Obavezno se promijenite do puta do vaše datoteke Ansible YAML datoteke.

Zaustavljanje spremnika za dockere:

Ako imate pokrenut Docker spremnik i znate ID ili naziv spremnika Docker, možete jednostavno zaustaviti taj Docker spremnik pomoću Ansible.

U ovom odjeljku pokazat ću vam kako to učiniti.

Prvo ću stvoriti Nginx (naziv slike) Docker spremnik http_server1 (naziv spremnika) kako slijedi:

$ docker pokreni -p 8080: 80 -d --name http_server1 nginx

Kao što vidite, Docker spremnik http_server1 trči.

$ docker ps

Za zaustavljanje spremnika Docker http_server1 koristeći Ansible stvorite novu knjigu s igrama stop_kontejner.yaml u igraonice / direktorij kako slijedi:

$ nano knjige / play_container.yaml

Zatim unesite sljedeće retke u stop_kontejner.yaml igraonica.

- domaćini: docker
korisnik: ansible
zadaci:
- ime: Zaustavite spremnik http_server1
docker_container:
ime: http_server1
stanje: zaustavljeno

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti stop_kontejner.yaml datoteka.

Evo, Ansible docker_container modul koristi se za zaustavljanje spremnika Docker http_server1.

Sada pokrenite stop_kontejner.yaml playbook sa sljedećom naredbom:

$ ansible-playbook playbooks / stop_container.yaml

Kao što vidite, Docker spremnik http_server1 se više ne izvodi na mom udaljenom Docker hostu.

$ docker ps

Možete navesti sve spremnike Dockera (pokrenuti, zaustavljeni, zaustavljeni) pomoću sljedeće naredbe:

$ docker ps --sve

Kao što vidite, zaustavljeni Docker spremnik http_server1 je naveden.

Zaustavljanje svih pokrenutih spremnika za dockere:

Ako želite zaustaviti sve spremnike Dockera koji se izvode na vašem Docker računalu pomoću programa Ansible, tada je ovo poglavlje za vas.

Prvo ću stvoriti 3 Docker spremnika (poslužitelj1, poslužitelj2, i poslužitelj3) kako bih ih sve kasnije mogao zaustaviti pomoću Ansiblea.

Za stvaranje poslužitelj1 Spremnik Docker, pokrenite sljedeću naredbu:

$ docker pokreni -p 8081: 80 -d --name server1 nginx

Za stvaranje poslužitelj2 Spremnik Docker, pokrenite sljedeću naredbu:

$ docker pokreni -p 8082: 80 -d --name server2 nginx

Za stvaranje poslužitelj3 Spremnik Docker, pokrenite sljedeću naredbu:

$ docker pokreni -p 8083: 80 -d --name server3 nginx

Kao što vidite, poslužitelj1, poslužitelj2, i poslužitelj3 Docker spremnici rade na mom udaljenom Docker hostu.

$ docker ps

Da biste zaustavili sve one Dockerove spremnike, izradite novu knjigu s igrama stop_all_container.yaml u vašem igraonice / direktorij kako slijedi:

$ nano playbooks / stop_all_container.yaml

Sada unesite sljedeće retke u stop_all_container.yaml datoteka playbooka.

- domaćini: docker
korisnik: ansible
zadaci:
- ime: Dohvatite popis svih tekućih spremnika
docker_host_info:
spremnici: Istina
registar: docker_info
- ime: Zaustavite sve pokrenute spremnike
docker_container:
ime: 'stavka.Imena [0] | regex_replace ("^ /", "") '
stanje: zaustavljeno
petlja: 'docker_info.spremnici '

Za spremanje stop_all_container.yaml datoteku, pritisnite + x nakon čega slijedi Y i .

Ovdje sam definirao 2 zadatka.

Prvi zadatak koristi Ansible docker_host_info modul da biste dobili popis svih pokrenutih Docker spremnika i pohranili ga u docker_info varijabilna.

Drugi zadatak petlja kroz docker_info.kontejneri polje pronalazi pokrenuta imena spremnika Docker i zaustavlja ih jedno po jedno.

Sada pokrenite stop_all_container.yaml playbook sa sljedećom naredbom:

$ ansible-playbook playbooks / stop_all_container.yaml

Playbook bi se trebao uspješno izvoditi, kao što vidite na snimci zaslona u nastavku.

Kao što vidite, na mom udaljenom Dockerovom hostu nema pokrenutih Dockerovih spremnika.

$ docker ps

Možete navesti sve spremnike Dockera (pokrenuti, zaustavljeni, zaustavljeni) pomoću sljedeće naredbe:

$ docker ps --sve

Kao što vidite, zaustavljeni Docker-ovi spremnici poslužitelj1, poslužitelj2, i poslužitelj3 su navedeni.

Zaustavi sve spremnike Dockera koji izvode određenu sliku:

Ako želite zaustaviti sve Dockerove spremnike koji izvode određenu Dockerovu sliku, onda je ovaj odjeljak za vas.

Prvo, kreirajmo neke glupe Dockerove spremnike.

Stvorit ću 2 Docker spremnika (nginx1 i nginx2) koristiti Nginx Slika Dockera i 2 spremnika Dockera (http1 i http2) koristiti httpd Dockerova slika za demonstraciju.

Za stvaranje nginx1 Docker spremnik pomoću Nginx Slika Dockera, pokrenite sljedeću naredbu:

$ docker pokreni -d -p 8081: 80 --ime nginx1 nginx

Za stvaranje nginx2 Docker spremnik pomoću Nginx Slika Dockera, pokrenite sljedeću naredbu:

$ docker pokreni -d -p 8082: 80 --ime nginx2 nginx

Za stvaranje http1 Docker spremnik pomoću httpd Slika Dockera, pokrenite sljedeću naredbu:

$ docker pokreni -d -p 8091: 80 --ime http1 httpd

Za stvaranje http2 Docker spremnik pomoću httpd Slika Dockera, pokrenite sljedeću naredbu:

$ docker pokreni -d -p 8092: 80 --ime http2 httpd

Kao što vidite, nginx1, nginx2, http1, i http2 Docker spremnici rade na mom udaljenom Docker hostu.

Da biste zaustavili sve Dockerove spremnike koji izvode određenu Dockerovu sliku (recimo, nginx), stvorite novu Docker knjigu priručnika stop_all_image_containers.yaml u igraonice / direktorij kako slijedi:

$ nano playbooks / stop_all_image_containers.yaml

Sada unesite sljedeće retke u stop_all_image_containers.yaml datoteka.

- domaćini: docker
korisnik: ansible
zadaci:
- ime: Dohvatite popis svih tekućih spremnika
docker_host_info:
spremnici: Istina
registar: docker_info
- ime: Zaustavite sve spremnike koji izvode nginx sliku
docker_container:
ime: 'stavka.Imena [0] | regex_replace ("^ /", "") '
stanje: zaustavljeno
kada: stavka.Slika == 'nginx'
petlja: 'docker_info.spremnici '

Kada završite, pritisnite + x nakon čega slijedi Y i spasiti stop_all_image_containers.yaml datoteka.

Evo, dodao sam 2 zadatka.

Prvi zadatak koristi Ansible docker_host_info modul da biste dobili popis svih pokrenutih Docker spremnika i pohranili ga u docker_info varijabilna.

Drugi zadatak petlja kroz docker_info.kontejneri polje pronalazi nazive spremnika Docker koji se izvode i pokreće docker_container modul za svaki tekući spremnik samo ako je ime slike spremnika Nginx. Zatim zaustavlja odgovarajuće Dockerove spremnike.

U drugom zadatku, sljedeći se redak koristi za provjeru radi li Docker spremnik Nginx slika. Ako ga želite, možete ga promijeniti u drugo ime Dockerove slike.

Sada pokrenite stop_all_image_containers.yaml playbook kako slijedi:

$ ansible-playbook playbooks / stop_all_image_containers.yaml

Kao što vidite, samo Nginx kontejneri (nginx1 i nginx2) su izmijenjeni (zaustavljeni). The httpd kontejneri (http1 i http2) preskaču se.

Kao što vidite, ne Nginx Docker spremnici rade na mom udaljenom Docker hostu. Samo httpd Docker spremnici (http1 i http2) trči.

$ docker ps

Možete navesti sve spremnike Dockera (pokrenuti, zaustavljeni, zaustavljeni) pomoću sljedeće naredbe:

$ docker ps --sve

Kao što vidite, zaustavljeni Docker-ovi spremnici nginx1 i nginx2 su navedeni.

Zaključak:

U ovom sam vam članku pokazao kako zaustaviti aktivni Docker spremnik, sve spremnike Dockera koji izvode određenu Dockerovu sliku i sve pokrenute spremnike Dockera na vašem Docker hostu. Da bih to učinio, koristio sam Ansible docker_container i docker_host_info moduli u ovom članku.

Da biste saznali više o ovim modulima, posjetite sljedeće stranice službene dokumentacije tvrtke Ansible.

[1] docker_container - Upravljanje spremnicima dockera
[2] docker_host_info - Dohvaća činjenice o hostu dockera i popise objekata usluga

OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...