V tomto článku vám ukážem, ako zastaviť konkrétny kontajner Docker. Tiež ti ukážem, ako zastaviť všetky bežiace Dockerove kontajnery alebo všetky Dockerove kontajnery, ktoré používajú konkrétny Docker obrázok pomocou Ansible. Takže poďme na to.
Predpoklady:
Ak si chcete vyskúšať príklady tohto článku,
1) Musíte mať v počítači nainštalovaný program Ansible.
2) Musíte mať v počítači nainštalovaný Docker alebo vzdialeného hostiteľa Ubuntu.
3) Vo svojom hostiteľovi Docker musíte mať nainštalovanú knižnicu Python Docker.
4) Musíte nakonfigurovať hostiteľa Dockeru pre automatizáciu Ansible.
POZNÁMKA: Hostiteľ Docker je počítač, na ktorom máte nainštalovaný Docker.
Existuje veľa článkov o LinuxHint venovaných inštalácii Ansible a konfigurácii hostiteľov pre automatizáciu Ansible a inštalácii Dockeru. V prípade potreby ich môžete skontrolovať.
Vytvorenie adresára projektu:
Aby boli všetky súbory a adresáre, ktoré v tomto článku vytvoríme, usporiadané, je dobré vytvoriť adresár projektu.
Vytvorenie adresára projektu docker1 / v aktuálnom pracovnom adresári spustite nasledujúci príkaz:
$ mkdir -pv docker1 / príručky
Teraz prejdite na ikonu docker1 / adresár projektu nasledovne:
$ cd docker1 /
Konfigurácia možnosti vzdialenej automatizácie hostiteľa Docker:
Ak máte Docker nainštalovaný na vzdialenom hostiteľovi Ubuntu, ktorého chcete automatizovať pomocou Ansible, potom je táto časť určená pre vás.
Najskôr vytvorte Ansible inventárny súbor hostitelia nasledujúcim príkazom:
$ nano hostitelia
Teraz pridajte adresu IP alebo DNS názov vášho hostiteľa Docker do priečinka hostitelia inventarizačný súbor nasledovne.
[ukotviteľný panel]vm4.nodekite.com
V mojom prípade je názov DNS môjho hostiteľa Ubuntu Docker vm4.nodekite.com. U teba to bude iné. Nezabudnite ho teda podľa potreby vymeniť.
Po dokončení stlačte
Teraz vytvorte konfiguračný súbor Ansible zodpovedné.porov nasledovne:
$ nano zodpovedné.porov
Teraz zadajte nasledujúce riadky do súboru zodpovedné.porov konfiguračný súbor.
[ukotviteľný panel]vm4.nodekite.com
Po dokončení stlačte
Teraz skontrolujte, či pomocou príkazu môžete pomocou príkazu ping na vzdialeného hostiteľa Dockeru z počítača:
$ ansible všetko -u ansible -m ping
Ako vidíte, môžem spustiť príkaz ping na môjho vzdialeného hostiteľa Dockeru.
Ako vidíte, mám Docker 19.03.11 nainštalovaný na mojom vzdialenom hostiteľovi Ubuntu Docker.
Teraz musíte mať na svojom vzdialenom hostiteľovi Dockeru nainštalovanú knižnicu Python Docker, aby mohli docker moduly Ansible fungovať. V tomto článku používam Ubuntu. Týmto sa teda budem zaoberať.
Ak chcete nainštalovať knižnicu Python Docker na vzdialeného hostiteľa Dockeru (Ubuntu), vytvorte nový playbook Ansible install_docker_python_lib.yaml v knihy o hre / adresár takto:
$ nano playbooks / install_docker_python_lib.yaml
Teraz zadajte nasledujúce riadky do súboru install_docker_python_lib.yaml spis.
- hostitelia: ukotviteľný panelužívateľ: zodpovedný
stať sa: Pravda
úlohy:
- name: Zaistite, aby bol nainštalovaný balík python3-docker
výstižný:
názov: python3-docker
stav: prítomný
update_cache: Pravda
Po dokončení stlačte
Teraz spustite install_docker_python_lib.yaml príručka takto:
$ ansible-playbook playbooks / install_docker_python_lib.yaml
Playbook by sa mal úspešne spustiť a nainštaluje knižnicu Python Docker na vášho vzdialeného hostiteľa Docker.
Konfigurácia možnosti pre miestnu automatizáciu hostiteľa Docker:
Ak máte Docker nainštalovaný na hostiteľovi, kde máte nainštalovaný Ansible, a chcete ho automatizovať pomocou Ansible, potom je táto časť určená pre vás.
Najskôr si vytvorte nový playbook Ansible install_docker_python_lib.yaml v knihy o hre / adresár takto:
$ nano playbooks / install_docker_python_lib.yaml
Teraz zadajte nasledujúce riadky do súboru install_docker_python_lib.yaml spis.
- hostitelia: localhostpripojenie: miestne
užívateľ: shovon
stať sa: Pravda
úlohy:
- name: Zaistite, aby bol nainštalovaný balík python3-docker
výstižný:
názov: python3-docker
stav: prítomný
update_cache: Pravda
Tu čiara užívateľ: shovon sady šovon ako užívateľ, ktorý bude vykonávať úlohy. U teba to bude iné. Nezabudnite ho preto zmeniť na svoje prihlasovacie meno.
Prihlasovacie používateľské meno hostiteľa Dockeru nájdete pomocou nasledujúceho príkazu:
$ whoami
Po dokončení stlačte
Teraz spustite install_docker_python_lib.yaml príručka takto:
$ ansible-playbook --ask-pass --ask-become-passplaybooks / install_docker_python_lib.yaml
Ansible vás požiada o prihlasovacie heslo používateľa, ktorého ste zadali v príručke. Zadajte prihlasovacie heslo a stlačte
Ansible od vás tiež požiada o BECOME / sudo heslo. Malo by to byť rovnaké heslo ako vaše prihlasovacie heslo. Nechajte ho teda prázdne a stlačte
Playbook by sa mal spustiť. Dokončenie môže chvíľu trvať.
V tomto okamihu by mala byť príručka úspešná a mala by byť nainštalovaná knižnica Python Docker.
Nevyhnutné úpravy v príručkách:
V závislosti na tom, či spravujete kontajnery Dockeru na miestnom hostiteľovi Dockeru alebo vzdialenom hostiteľovi Dockeru, musíte zodpovedajúcim spôsobom upraviť svoje príručky na čítanie.
V ďalších častiach tohto článku spustím ukážkové príručky na vzdialenom hostiteľovi Dockeru. Všetky príručky teda budú začínať nasledujúcimi riadkami:
- hostitelia: ukotviteľný panelužívateľ: zodpovedný
úlohy:
Ak chcete prevádzkovať príručky na vašom miestnom hostiteľovi Dockeru, skontrolujte, či sa príručky namiesto nich začínajú nasledujúcimi riadkami.
- hostitelia: localhostpripojenie: miestne
užívateľ: shovon
stať sa: Pravda
úlohy:
Potom vymeňte
Ak sa chystáte lokálne spravovať hostiteľa Dockeru pomocou programu Ansible, musíte prevádzkovať príručky Ansible trochu inak.
Playbook Ansible môžete lokálne spustiť nasledovne:
$ ansible-playbook --ask-pass --ask-become-pass
Nezabudnite to zmeniť
Zastavenie kontajnera Docker:
Ak máte spustený kontajner Docker a poznáte ID alebo názov kontajnera Docker, môžete ho ľahko zastaviť pomocou nástroja Ansible.
V tejto časti vám ukážem, ako na to.
Najskôr vytvorím Nginx (názov obrázka) Docker container http_server1 (názov kontajnera) takto:
$ docker run -p 8080: 80 -d --name http_server1 nginx
Ako vidíte, kontajner Docker http_server1 beží.
$ docker ps
Na zastavenie kontajnera Docker http_server1 pomocou Ansible vytvorte nový playbook stop_container.yaml v knihy o hre / adresár takto:
$ nano playbooks / stop_container.yaml
Potom zadajte nasledujúce riadky do súboru stop_container.yaml hracia kniha.
- hostitelia: ukotviteľný panelužívateľ: zodpovedný
úlohy:
- name: Zastavte kontajner http_server1
docker_container:
meno: http_server1
stav: zastavený
Po dokončení stlačte
Tu je možné docker_container modul slúži na zastavenie Docker kontajnera http_server1.
Teraz spustite stop_container.yaml príručka s nasledujúcim príkazom:
$ ansible-playbook playbooks / stop_container.yaml
Ako vidíte, kontajner Docker http_server1 už na mojom vzdialenom hostiteľovi Docker nefunguje.
$ docker ps
Všetky zoznamy kontajnerov Docker (spustené, pozastavené, zastavené) môžete zobraziť pomocou nasledujúceho príkazu:
$ docker ps - všetkoAko vidíte, zastavený Dockerov kontajner http_server1 je uvedený.
Zastavenie všetkých spustených kontajnerov Docker:
Ak chcete zastaviť všetky kontajnery Docker bežiace na vašom hostiteľovi Docker pomocou programu Ansible, potom je táto časť určená pre vás.
Najskôr vytvorím 3 Dockerove kontajnery (server1, server2, a server3), aby som ich všetkých mohol prestať používať pomocou aplikácie Ansible neskôr.
Ak chcete vytvoriť server1 Kontajner Docker, spustite nasledujúci príkaz:
$ docker run -p 8081: 80 -d --name server1 nginx
Ak chcete vytvoriť server2 Kontajner Docker, spustite nasledujúci príkaz:
$ docker run -p 8082: 80 -d --name server2 nginx
Ak chcete vytvoriť server3 Kontajner Docker, spustite nasledujúci príkaz:
$ docker run -p 8083: 80 -d --name server3 nginx
Ako vidíte, server1, server2, a server3 Na mojom vzdialenom hostiteľovi Docker bežia Dockerove kontajnery.
$ docker ps
Ak chcete zastaviť všetky tieto Dockerove kontajnery, vytvorte nový playbook stop_all_container.yaml vo vašom knihy o hre / adresár takto:
$ nano playbooks / stop_all_container.yaml
Teraz zadajte nasledujúce riadky do súboru stop_all_container.yaml súbor playbooku.
- hostitelia: ukotviteľný panelužívateľ: zodpovedný
úlohy:
- name: Získajte zoznam všetkých spustených kontajnerov
docker_host_info:
kontajnery: Pravda
registrovať: docker_info
- name: Zastaviť všetky spustené kontajnery
docker_container:
meno: 'položka.Mená [0] | regex_replace ("^ /", "") '
stav: zastavený
slučka: 'docker_info.kontajnery '
Ak chcete uložiť stop_all_container.yaml súbor, stlačte
Tu som definoval 2 úlohy.
Prvá úloha používa Ansible docker_host_info modul získate zoznam všetkých spustených kontajnerov Docker a uložíte ich do priečinka docker_info premenná.
Druhá úloha prechádza slučkou docker_info.nádob pole nájde spustené názvy kontajnerov Docker a zastaví ich jeden po druhom.
Teraz spustite stop_all_container.yaml príručka s nasledujúcim príkazom:
$ ansible-playbook playbooks / stop_all_container.yaml
Príručka by sa mala úspešne spustiť, ako vidíte na snímke obrazovky nižšie.
Ako vidíte, na mojom vzdialenom hostiteľovi Docker nie sú spustené žiadne Dockerove kontajnery.
$ docker ps
Všetky zoznamy kontajnerov Docker (spustené, pozastavené, zastavené) môžete zobraziť pomocou nasledujúceho príkazu:
$ docker ps - všetkoAko vidíte, zastavené Dockerove kontajnery server1, server2, a server3 sú uvedené.
Zastavenie spustenia konkrétneho obrázka v všetkých kontajneroch dockeru:
Ak chcete zastaviť spustenie všetkých Dockerových kontajnerov na konkrétnom obrázku Dockeru, potom je táto časť určená pre vás.
Najskôr si vytvorme fiktívne kontajnery Dockeru.
Vytvorím 2 Dockerove kontajnery (nginx1 a nginx2) pomocou Nginx Docker image a 2 Dockerove kontajnery (http1 a http2) pomocou httpd Dockerov obrázok pre demonštráciu.
Ak chcete vytvoriť nginx1 Kontajner Docker pomocou Nginx Docker image, spustite nasledujúci príkaz:
$ docker run -d -p 8081: 80 - meno nginx1 nginx
Ak chcete vytvoriť nginx2 Kontajner Docker pomocou Nginx Docker image, spustite nasledujúci príkaz:
$ docker run -d -p 8082: 80 - meno nginx2 nginx
Ak chcete vytvoriť http1 Kontajner Docker pomocou httpd Docker image, spustite nasledujúci príkaz:
$ docker run -d -p 8091: 80 - názov http1 httpd
Ak chcete vytvoriť http2 Kontajner Docker pomocou httpd Docker image, spustite nasledujúci príkaz:
$ docker run -d -p 8092: 80 - názov http2 httpd
Ako vidíte, nginx1, nginx2, http1, a http2 Na mojom vzdialenom hostiteľovi Docker bežia Dockerove kontajnery.
Ak chcete zastaviť spustenie všetkých Dockerových kontajnerov s konkrétnym obrázkom Dockeru (povedzme, nginx), vytvorte nový playbook Dockeru stop_all_image_containers.yaml v knihy o hre / adresár takto:
$ nano playbooks / stop_all_image_containers.yaml
Teraz zadajte nasledujúce riadky do súboru stop_all_image_containers.yaml spis.
- hostitelia: ukotviteľný panelužívateľ: zodpovedný
úlohy:
- name: Získajte zoznam všetkých spustených kontajnerov
docker_host_info:
kontajnery: Pravda
registrovať: docker_info
- name: Zastaviť vo všetkých kontajneroch spustený obrázok nginx
docker_container:
meno: 'položka.Mená [0] | regex_replace ("^ /", "") '
stav: zastavený
kedy: položka.Obrázok == 'nginx'
slučka: 'docker_info.kontajnery '
Po dokončení stlačte
Tu som pridal 2 úlohy.
Prvá úloha používa Ansible docker_host_info modul získate zoznam všetkých spustených kontajnerov Docker a uložíte ich do priečinka docker_info premenná.
Druhá úloha prechádza slučkou docker_info.nádob pole nájde spustené názvy kontajnerov Docker a spustí súbor docker_container modul pre každý bežiaci kontajner, iba ak je názov obrázka kontajnera Nginx. Potom zastaví zhodné kontajnery Dockeru.
V druhej úlohe sa v nasledujúcom riadku kontroluje, či je v kontajneri Docker spustený server Nginx obrázok. Ak chcete, môžete ho zmeniť na iný názov obrázka Docker.
Teraz spustite stop_all_image_containers.yaml príručka takto:
$ ansible-playbook playbooks / stop_all_image_containers.yaml
Ako vidíte, iba Nginx nádoby (nginx1 a nginx2) sú upravené (zastavené). The httpd nádoby (http1 a http2) sú preskočené.
Ako vidíte, nie Nginx Na mojom vzdialenom hostiteľovi Docker bežia Dockerove kontajnery. Len httpd Kontajnerov Docker (http1 a http2) beží.
$ docker ps
Všetky zoznamy kontajnerov Docker (spustené, pozastavené, zastavené) môžete zobraziť pomocou nasledujúceho príkazu:
$ docker ps - všetkoAko vidíte, zastavené Dockerove kontajnery nginx1 a nginx2 sú uvedené.
Záver:
V tomto článku som vám ukázal, ako zastaviť bežiaci kontajner Docker, všetky kontajnery Docker, na ktorých je spustený konkrétny obrázok Docker, a všetky bežiace Docker kontajnery vášho hostiteľa Docker. K tomu som použil Ansible docker_container a docker_host_info modulov v tomto článku.
Viac informácií o týchto moduloch nájdete na nasledujúcich stránkach oficiálnej dokumentácie Ansible.
[1] docker_container - Správa kontajnerov docker
[2] docker_host_info - Načíta fakty o hostiteľovi ukotvenia a zoznamy objektov služieb