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
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
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: dockerkorisnik: 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
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: localhostveza: 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
Sada pokrenite install_docker_python_lib.yaml playbook kako slijedi:
$ ansible-playbook --ask-pass --ask-become-passplaybooks / 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: dockerkorisnik: 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: localhostveza: lokalna
korisnik: shovon
postati: Istina
zadaci:
Zatim zamijenite
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
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: dockerkorisnik: ansible
zadaci:
- ime: Zaustavite spremnik http_server1
docker_container:
ime: http_server1
stanje: zaustavljeno
Kada završite, pritisnite
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 --sveKao š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: dockerkorisnik: 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
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 --sveKao š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: dockerkorisnik: 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
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 --sveKao š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