V tomto článku vám ukážu, jak zastavit konkrétní kontejner Dockeru. Také vám ukážu, jak zastavit všechny spuštěné kontejnery Dockeru nebo všechny kontejnery Dockeru s konkrétním obrázkem Dockeru pomocí Ansible. Pojďme tedy začít.
Předpoklady:
Chcete-li vyzkoušet příklady tohoto článku,
1) Musíte mít ve svém počítači nainstalovanou aplikaci Ansible.
2) Musíte mít v počítači nainstalovaný Docker nebo vzdáleného hostitele Ubuntu.
3) Na hostiteli Docker musíte mít nainstalovanou knihovnu Python Docker.
4) Musíte nakonfigurovat hostitele Dockeru pro automatizaci Ansible.
POZNÁMKA: Hostitel Docker je počítač, ve kterém máte nainstalovaný Docker.
Existuje mnoho článků o LinuxHint věnovaných instalaci Ansible a konfiguraci hostitelů pro automatizaci Ansible a instalaci Dockeru. V případě potřeby je můžete zkontrolovat.
Vytvoření adresáře projektu:
Aby byly všechny soubory a adresáře, které v tomto článku vytváříme, uspořádané, je dobré vytvořit adresář projektu.
Chcete-li vytvořit adresář projektu docker1 / ve svém aktuálním pracovním adresáři spusťte následující příkaz:
$ mkdir -pv docker1 / příručky
Nyní přejděte na docker1 / adresář projektu takto:
$ cd docker1 /
Konfigurace Ansible pro vzdálenou automatizaci hostitele Docker:
Pokud máte Docker nainstalovaný na vzdáleném hostiteli Ubuntu, kterého chcete automatizovat pomocí Ansible, pak je tato část pro vás.
Nejprve vytvořte Ansible inventární soubor hostitelé s následujícím příkazem:
$ nano hostitelé
Nyní přidejte adresu IP nebo název DNS vašeho hostitele Docker do hostitelé soubor inventáře následujícím způsobem.
[přístavní dělník]vm4.nodekite.com
V mém případě je název DNS mého hostitele Ubuntu Docker vm4.nodekite.com. Bude to pro vás jiné. Nezapomeňte jej tedy podle potřeby vyměnit.
Až budete hotovi, stiskněte
Nyní vytvořte konfigurační soubor Ansible zodpovědný.srov jak následuje:
$ nanoodpovědný.srov
Nyní zadejte následující řádky do pole zodpovědný.srov konfigurační soubor.
[přístavní dělník]vm4.nodekite.com
Až budete hotovi, stiskněte
Nyní zkontrolujte, zda můžete pomocí vzdáleného hostitele Dockeru ze svého počítače provést ping pomocí následujícího příkazu:
$ ansible vše -u ansible -m ping
Jak vidíte, můžu provést ping na vzdáleného hostitele Dockeru.
Jak vidíte, mám Docker 19.03.11 nainstalován na mém vzdáleném hostiteli Ubuntu Docker.
Nyní musíte mít na svém vzdáleném hostiteli Dockeru nainstalovanou knihovnu Dockeru Pythonu, aby moduly Docker docker fungovaly. V tomto článku používám Ubuntu. To je tedy to, o čem pojednám.
Chcete-li nainstalovat knihovnu Python Docker na vzdáleného hostitele Docker (Ubuntu), vytvořte novou příručku Ansible install_docker_python_lib.yaml v knihy o hře / adresář takto:
$ nano playbooks / install_docker_python_lib.yaml
Nyní zadejte následující řádky do pole install_docker_python_lib.yaml soubor.
- hostitelé: ukotvitelný paneluživatel: odpovědný
stát se: Pravda
úkoly:
- name: Ujistěte se, že je nainstalován balíček python3-docker
výstižný:
název: python3-docker
stav: přítomen
update_cache: Pravda
Až budete hotovi, stiskněte
Nyní spusťte install_docker_python_lib.yaml playbook takto:
$ ansible-playbook playbooks / install_docker_python_lib.yaml
Příručka by se měla úspěšně spustit a nainstaluje knihovnu Python Docker na vzdáleného hostitele Docker.
Konfigurace Ansible pro automatizaci místního hostitele Docker:
Pokud máte Docker nainstalovaný na hostiteli, kde máte nainstalovaný Ansible, a chcete jej automatizovat pomocí Ansible, pak je tato část pro vás.
Nejprve vytvořte nový scénář hry Ansible install_docker_python_lib.yaml v knihy o hře / adresář takto:
$ nano playbooks / install_docker_python_lib.yaml
Nyní zadejte následující řádky do pole install_docker_python_lib.yaml soubor.
- hostitelé: localhostpřipojení: místní
uživatel: shovon
stát se: Pravda
úkoly:
- name: Ujistěte se, že je nainstalován balíček python3-docker
výstižný:
název: python3-docker
stav: přítomen
update_cache: Pravda
Tady linka uživatel: shovon sady šovon jako uživatel, který bude úkoly provádět. Bude to pro vás jiné. Nezapomeňte tedy změnit své přihlašovací uživatelské jméno.
Přihlašovací uživatelské jméno hostitele Dockeru najdete pomocí následujícího příkazu:
$ whoami
Až budete hotovi, stiskněte
Nyní spusťte install_docker_python_lib.yaml playbook takto:
$ ansible-playbook --ask-pass --ask-become-passplaybooks / install_docker_python_lib.yaml
Ansible vás požádá o přihlašovací heslo uživatele, kterého jste uvedli v příručce. Zadejte přihlašovací heslo a stiskněte
Ansible vás požádá také o heslo BECOME / sudo. Mělo by to být stejné heslo jako vaše přihlašovací heslo. Takže nechte prázdné a stiskněte
Playbook by se měl spustit. Dokončení může chvíli trvat.
V tomto okamžiku by hrací kniha měla být úspěšná a měla by být nainstalována knihovna Python Docker.
Nezbytné úpravy příruček:
V závislosti na tom, zda spravujete kontejnery Dockeru na místním hostiteli Dockeru nebo vzdáleném hostiteli Dockeru, musíte odpovídajícím způsobem upravit své příručky.
V dalších částech tohoto článku spustím ukázkové příručky na vzdáleném hostiteli Docker. Všechny příručky tedy budou začínat následujícími řádky:
- hostitelé: ukotvitelný paneluživatel: odpovědný
úkoly:
Pokud chcete spouštět příručky na místním hostiteli Docker, ujistěte se, že příručky místo toho začínají následujícími řádky.
- hostitelé: localhostpřipojení: místní
uživatel: shovon
stát se: Pravda
úkoly:
Poté vyměňte
Pokud se chystáte lokálně spravovat hostitele Dockeru pomocí Ansible, musíte spustit Anbook playbooky trochu jinak.
Playbook Ansible můžete spustit místně následujícím způsobem:
$ ansible-playbook --ask-pass --ask-become-pass
Nezapomeňte se změnit
Zastavení kontejneru Docker:
Pokud máte spuštěný kontejner Docker a znáte ID nebo název kontejneru Docker, můžete tento kontejner Docker snadno zastavit pomocí Ansible.
V této části vám ukážu, jak to udělat.
Nejprve vytvořím Nginx (název obrázku) Docker kontejner http_server1 (název kontejneru) takto:
$ docker run -p 8080: 80 -d --name http_server1 nginx
Jak vidíte, kontejner Docker http_server1 běží.
$ docker ps
Chcete-li zastavit Docker kontejner http_server1 pomocí Ansible vytvořte nový scénář stop_container.yaml v knihy o hře / adresář takto:
$ nano playbooks / stop_container.yaml
Poté zadejte následující řádky do pole stop_container.yaml hrací kniha.
- hostitelé: ukotvitelný paneluživatel: odpovědný
úkoly:
- name: Zastavte kontejner http_server1
docker_container:
název: http_server1
stav: zastaveno
Až budete hotovi, stiskněte
Tady, možné docker_container modul slouží k zastavení kontejneru Docker http_server1.
Nyní spusťte stop_container.yaml playbook s následujícím příkazem:
$ ansible-playbook playbooks / stop_container.yaml
Jak vidíte, kontejner Docker http_server1 již na mém vzdáleném hostiteli Docker nefunguje.
$ docker ps
Všechny kontejnery Dockeru (spuštěné, pozastavené, zastavené) můžete zobrazit pomocí následujícího příkazu:
$ docker ps - všeJak vidíte, zastavený Docker kontejner http_server1 je uveden.
Zastavení všech spuštěných kontejnerů Docker:
Pokud chcete zastavit všechny Docker kontejnery spuštěné na hostiteli Docker pomocí Ansible, pak je tato část pro vás.
Nejprve vytvořím 3 Docker kontejnery (server1, server2, a server3), abych je všechny mohl pomocí Ansible zastavit později.
Chcete-li vytvořit server1 Docker kontejner, spusťte následující příkaz:
$ docker run -p 8081: 80 -d --name server1 nginx
Chcete-li vytvořit server2 Docker kontejner, spusťte následující příkaz:
$ docker run -p 8082: 80 -d --name server2 nginx
Chcete-li vytvořit server3 Docker kontejner, spusťte následující příkaz:
$ docker run -p 8083: 80 -d --name server3 nginx
Jak vidíte, server1, server2, a server3 Na mém vzdáleném hostiteli Docker běží kontejnery Docker.
$ docker ps
Chcete-li zastavit všechny tyto Docker kontejnery, vytvořte nový playbook stop_all_container.yaml ve vašem knihy o hře / adresář takto:
$ nano playbooks / stop_all_container.yaml
Nyní zadejte následující řádky do pole stop_all_container.yaml soubor playbooku.
- hostitelé: ukotvitelný paneluživatel: odpovědný
úkoly:
- name: Získejte seznam všech běžících kontejnerů
docker_host_info:
kontejnery: Pravda
registrovat: docker_info
- name: Zastavit všechny spuštěné kontejnery
docker_container:
name: 'položka.Názvy [0] | regex_replace ("^ /", "") '
stav: zastaveno
smyčka: 'docker_info.kontejnery '
Chcete-li uložit stop_all_container.yaml soubor, stiskněte
Zde jsem definoval 2 úkoly.
První úkol používá Ansible docker_host_info modul a získáte seznam všech spuštěných kontejnerů Docker a uloží jej do docker_info proměnná.
Druhý úkol prochází skrz docker_info.kontejnery array najde běžící názvy kontejnerů Docker a zastaví je jeden po druhém.
Nyní spusťte stop_all_container.yaml playbook s následujícím příkazem:
$ ansible-playbook playbooks / stop_all_container.yaml
Playbook by měl běžet úspěšně, jak vidíte na následujícím obrázku obrazovky.
Jak vidíte, na mém vzdáleném hostiteli Docker nejsou spuštěny žádné Docker kontejnery.
$ docker ps
Všechny kontejnery Dockeru (spuštěné, pozastavené, zastavené) můžete zobrazit pomocí následujícího příkazu:
$ docker ps - všeJak vidíte, zastavené Docker kontejnery server1, server2, a server3 jsou uvedeny.
Zastavit, aby všechny kontejnery Dockeru spouštěly konkrétní obrázek:
Pokud chcete zastavit, aby všechny kontejnery Dockeru spouštěly konkrétní image Dockeru, pak je tato část pro vás.
Nejprve vytvořme nějaké fiktivní kontejnery Dockeru.
Vytvořím 2 Docker kontejnery (nginx1 a nginx2) za použití Nginx Docker image a 2 Docker kontejnery (http1 a http2) za použití httpd Docker obrázek pro demonstraci.
Chcete-li vytvořit nginx1 Docker kontejner pomocí Nginx Docker image, spusťte následující příkaz:
$ docker run -d -p 8081: 80 - název nginx1 nginx
Chcete-li vytvořit nginx2 Docker kontejner pomocí Nginx Docker image, spusťte následující příkaz:
$ docker run -d -p 8082: 80 - název nginx2 nginx
Chcete-li vytvořit http1 Docker kontejner pomocí httpd Docker image, spusťte následující příkaz:
$ docker run -d -p 8091: 80 --name http1 httpd
Chcete-li vytvořit http2 Docker kontejner pomocí httpd Docker image, spusťte následující příkaz:
$ docker run -d -p 8092: 80 --name http2 httpd
Jak vidíte, nginx1, nginx2, http1, a http2 Na mém vzdáleném hostiteli Docker běží kontejnery Docker.
Chcete-li zastavit, aby všechny kontejnery Dockeru spouštěly konkrétní obrázek Dockeru (řekněme, nginx), vytvořte nový Docker playbook stop_all_image_containers.yaml v knihy o hře / adresář takto:
$ nano playbooks / stop_all_image_containers.yaml
Nyní zadejte následující řádky do pole stop_all_image_containers.yaml soubor.
- hostitelé: ukotvitelný paneluživatel: odpovědný
úkoly:
- name: Získejte seznam všech běžících kontejnerů
docker_host_info:
kontejnery: Pravda
registrovat: docker_info
- name: Zastavte spuštění všech kontejnerů s obrázkem nginx
docker_container:
name: 'položka.Názvy [0] | regex_replace ("^ /", "") '
stav: zastaveno
kdy: položka.Obrázek == 'nginx'
smyčka: 'docker_info.kontejnery '
Až budete hotovi, stiskněte
Zde jsem přidal 2 úkoly.
První úkol používá Ansible docker_host_info modul a získáte seznam všech spuštěných kontejnerů Docker a uloží jej do docker_info proměnná.
Druhý úkol prochází skrz docker_info.kontejnery array najde spuštěné názvy kontejnerů Docker a spustí docker_container modul pro každý spuštěný kontejner, pouze pokud je název obrázku kontejneru Nginx. Potom zastaví uzavřené kontejnery Dockeru.
Ve druhém úkolu se pomocí následujícího řádku zkontroluje, zda je v kontejneru Docker spuštěn Nginx obraz. Pokud chcete, můžete jej změnit na jiný název obrázku Dockeru.
Nyní spusťte stop_all_image_containers.yaml playbook takto:
$ ansible-playbook playbooks / stop_all_image_containers.yaml
Jak vidíte, pouze Nginx kontejnery (nginx1 a nginx2) jsou upraveny (zastaveny). The httpd kontejnery (http1 a http2) jsou přeskočeny.
Jak vidíte, ne Nginx Na mém vzdáleném hostiteli Docker běží kontejnery Docker. Pouze httpd Docker kontejnery (http1 a http2) běží.
$ docker ps
Všechny kontejnery Dockeru (spuštěné, pozastavené, zastavené) můžete zobrazit pomocí následujícího příkazu:
$ docker ps - všeJak vidíte, zastavené Docker kontejnery nginx1 a nginx2 jsou uvedeny.
Závěr:
V tomto článku jsem vám ukázal, jak zastavit běžící kontejner Dockeru, všechny kontejnery Dockeru s konkrétním obrázkem Dockeru a všechny běžící kontejnery Dockeru vašeho hostitele Dockeru. K tomu jsem použil Ansible docker_container a docker_host_info moduly v tomto článku.
Další informace o těchto modulech najdete na následujících oficiálních stránkách dokumentace Ansible.
[1] docker_container - Správa kontejnerů docker
[2] docker_host_info - Načte fakta o hostiteli ukotvitelného panelu a seznamy objektů služeb