Отговорни

Как да спрем всички контейнери на Docker, използвайки Ansible

Как да спрем всички контейнери на Docker, използвайки Ansible
Ansible има много модули за автоматизиране на вашия хост на Docker, контейнери, томове, мрежи и т.н. Ако искате да спрете вашите работещи контейнери на Docker, можете да направите и това.

В тази статия ще ви покажа как да спрете конкретен контейнер на Docker. Също така ще ви покажа как да спрете всички работещи контейнери на Docker или всички контейнери на Docker, изпълняващи конкретно изображение на Docker, използвайки Ansible. И така, нека започнем.

Предпоставки:

Ако искате да изпробвате примерите от тази статия,

1) Трябва да имате инсталиран Ansible на вашия компютър.
2) Трябва да имате Docker инсталиран на вашия компютър или отдалечен хост на Ubuntu.
3) Трябва да имате инсталирана библиотека Python Docker на вашия хост Docker.
4) Трябва да конфигурирате хоста на Docker за Ansible автоматизация.

ЗАБЕЛЕЖКА: Докер домакин е компютърът, на който имате инсталиран Docker.

Има много статии в LinuxHint, посветени на Инсталиране на Ansible и конфигуриране на хостове за Ansible автоматизация и инсталиране на Docker. Можете да ги проверите, ако е необходимо.

Създаване на директория на проекти:

За да поддържаме организирани всички файлове и директория, които ще създаваме в тази статия, е добра идея да създадете директория на проекта.

За да създадете директория на проекта докер1 / в текущата работна директория изпълнете следната команда:

$ mkdir -pv docker1 / playbooks

Сега отидете до докер1 / директория на проекта, както следва:

$ cd докер1 /

Конфигуриране на Ansible за отдалечена докер автоматизация на хоста:

Ако имате Docker инсталиран на отдалечен хост на Ubuntu, който искате да автоматизирате с помощта на Ansible, тогава този раздел е за вас.

Първо създайте файл с инвентаризация Ansible домакини със следната команда:

$ nano домакини

Сега добавете IP адреса или DNS името на вашия Docker хост в домакини инвентарен файл, както следва.

[докер]
vm4.нодеките.com

В моя случай DNS името на моя хост на Ubuntu Docker е vm4.нодеките.com. За вас ще е различно. Така че, не забравяйте да го замените, ако е необходимо.

След като приключите, натиснете + х следван от Y и за да запазите домакини файл.

Сега създайте конфигурационен файл Ansible ансибъл.cfg както следва:

$ nano ansible.cfg

Сега въведете следните редове в ансибъл.cfg конфигурационен файл.

[докер]
vm4.нодеките.com

След като приключите, натиснете + х следван от Y и за да запазите ансибъл.cfg файл.

Сега проверете дали можете да пингнете отдалечения хост на Docker от вашия компютър със следната команда:

$ ansible all -u ansible -m ping

Както можете да видите, мога да пинг на моя отдалечен хост на Docker.

Както можете да видите, имам Docker 19.03.11 инсталиран на моя отдалечен хост на Ubuntu Docker.

Сега трябва да имате инсталирана библиотека Python Docker на вашия отдалечен хост на Docker, за да работят модулите Ansible docker. В тази статия използвам Ubuntu. И така, това е, което ще разгледам.

За да инсталирате библиотека на Python Docker на вашия отдалечен хост на Docker (Ubuntu), създайте нова книга за игра Ansible install_docker_python_lib.ямъл в книги за игри / директория, както следва:

$ nano playbooks / install_docker_python_lib.ямъл

Сега въведете следните редове в install_docker_python_lib.ямъл файл.

- домакини: докер
потребител: ansible
стана: Вярно
задачи:
- име: Уверете се, че пакетът python3-docker е инсталиран
подходящ:
име: python3-docker
състояние: присъства
update_cache: Вярно

След като приключите, натиснете + х следван от Y и за да запазите install_docker_python_lib.ямъл файл.

Сега стартирайте install_docker_python_lib.ямъл playbook, както следва:

$ ansible-playbook playbooks / install_docker_python_lib.ямъл

Книгата за игри трябва да работи успешно и тя ще инсталира библиотеката на Python Docker на вашия отдалечен хост на Docker.

Конфигуриране на Ansible за локална Docker Host Automation:

Ако имате инсталиран Docker на хоста, където сте инсталирали Ansible и искате да го автоматизирате с помощта на Ansible, тогава този раздел е за вас.

Първо, създайте нова книга за игра Ansible install_docker_python_lib.ямъл в книги за игри / директория, както следва:

$ nano playbooks / install_docker_python_lib.ямъл

Сега въведете следните редове в install_docker_python_lib.ямъл файл.

- домакини: localhost
връзка: местна
потребител: shovon
стана: Вярно
задачи:
- име: Уверете се, че пакетът python3-docker е инсталиран
подходящ:
име: python3-docker
състояние: присъства
update_cache: Вярно

Ето, линията потребител: shovon комплекти шовон като потребител, който ще изпълнява задачите. За вас ще е различно. Така че, не забравяйте да го промените на вашето потребителско име.

Можете да намерите потребителското име за вход на вашия хост на Docker със следната команда:

$ whoami

След като приключите, натиснете + х следван от Y и за да запазите install_docker_python_lib.ямъл файл.

Сега стартирайте install_docker_python_lib.ямъл playbook, както следва:

$ ansible-playbook --ask-pass --ask-become-pass
playbooks / install_docker_python_lib.ямъл

Ansible ще ви поиска паролата за вход на потребителя, който сте посочили в книгата за игра. Въведете паролата за влизане и натиснете .

Ansible също ще поиска от вас СТАВАТЕ / sudo парола. Трябва да е същата парола като вашата парола за вход. Така че, оставете го празно и натиснете .

Книгата за игри трябва да започне да работи. Попълването може да отнеме известно време.

В този момент книгата за игри трябва да е успешна и библиотеката Python Docker трябва да бъде инсталирана.

Извършване на необходимите корекции в Playbooks:

В зависимост от това дали управлявате контейнери на Docker на вашия локален хост на Docker или отдалечен хост на Docker, трябва да настроите съответно своите книги за игра.

От следващите раздели на тази статия ще стартирам примерните книги за игри на отдалечен хост на Docker. И така, всички книги за игри ще започват със следните редове:

- домакини: докер
потребител: ansible
задачи:

Ако искате да стартирате книгите за игри на вашия локален хост на Docker, уверете се, че книгите за игри започват със следните редове вместо това.

- домакини: localhost
връзка: местна
потребител: shovon
стана: Вярно
задачи:

След това сменете със задачите, които искате да стартирате и запазете книгата за игра, като натиснете + х следван от Y и .

Също така трябва да стартирате книгите за игра Ansible малко по-различно, ако ще управлявате локално Docker хост, използвайки Ansible.

Можете да стартирате Ansible playbook локално, както следва:

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

Не забравяйте да промените до пътя на вашия YAML файл на Ansible playbook.

Спиране на контейнер за докер:

Ако имате работещ контейнер на Docker и знаете идентификатора или името на контейнера на Docker, можете лесно да спрете този контейнер на Docker с помощта на Ansible.

В този раздел ще ви покажа как да направите това.

Първо ще създам Nginx (име на изображение) Контейнер на Docker http_server1 (име на контейнера), както следва:

$ docker стартира -p 8080: 80 -d --name http_server1 nginx

Както можете да видите, контейнерът на Docker http_server1 бяга.

$ docker ps

За да спрете контейнера на Docker http_server1 използвайки Ansible, създайте нова книга за игри стоп_контейнер.ямъл в книги за игри / директория, както следва:

$ nano playbooks / stop_container.ямъл

След това въведете следните редове в стоп_контейнер.ямъл книга за игри.

- домакини: докер
потребител: ansible
задачи:
- име: Спрете контейнера http_server1
docker_container:
име: http_server1
състояние: спряно

След като приключите, натиснете + х следван от Y и за да запазите стоп_контейнер.ямъл файл.

Ето, Ansible docker_container модул се използва за спиране на контейнера на Docker http_server1.

Сега стартирайте стоп_контейнер.ямъл playbook със следната команда:

$ ansible-playbook playbooks / stop_container.ямъл

Както можете да видите, контейнерът на Docker http_server1 вече не работи на моя отдалечен хост на Docker.

$ docker ps

Можете да изброите всички контейнери на Docker (работещи, на пауза, спрени) със следната команда:

$ docker ps --all

Както можете да видите, спряният контейнер на Docker http_server1 е в списъка.

Спиране на всички работещи контейнери на Docker:

Ако искате да спрете всички контейнери на Docker, работещи на вашия хост на Docker, използвайки Ansible, тогава този раздел е за вас.

Първо ще създам 3 контейнера на Docker (сървър1, сървър2, и сървър3), за да мога да ги спра по-късно с помощта на Ansible.

За да създадете сървър1 Docker контейнер, изпълнете следната команда:

$ docker стартира -p 8081: 80 -d --name server1 nginx

За да създадете сървър2 Docker контейнер, изпълнете следната команда:

$ docker стартира -p 8082: 80 -d --name server2 nginx

За да създадете сървър3 Docker контейнер, изпълнете следната команда:

$ docker стартира -p 8083: 80 -d --name server3 nginx

Както можете да видите, сървър1, сървър2, и сървър3 Контейнерите на Docker се изпълняват на моя отдалечен хост на Docker.

$ docker ps

За да спрете всички тези контейнери на Docker, създайте нова книга за игри stop_all_container.ямъл във вашия книги за игри / директория, както следва:

$ nano playbooks / stop_all_container.ямъл

Сега въведете следните редове в stop_all_container.ямъл файл на playbook.

- домакини: докер
потребител: ansible
задачи:
- name: Получете списък с всички работещи контейнери
docker_host_info:
контейнери: Вярно
регистър: docker_info
- name: Спиране на всички работещи контейнери
docker_container:
name: 'артикул.Имена [0] | regex_replace ("^ /", "") '
състояние: спряно
цикъл: 'docker_info.контейнери '

За да запазите stop_all_container.ямъл файл, натиснете + х следван от Y и .

Тук съм дефинирал 2 задачи.

Първата задача използва Ansible docker_host_info модул, за да получите списък с всички работещи контейнери на Docker и да го съхранява в docker_info променлива.

Втората задача завърта през docker_info.контейнери array намира текущите имена на контейнери на Docker и ги спира едно по едно.

Сега стартирайте stop_all_container.ямъл playbook със следната команда:

$ ansible-playbook playbooks / stop_all_container.ямъл

Книгата за игри трябва да работи успешно, както можете да видите на екранната снимка по-долу.

Както можете да видите, на моя отдалечен хост на Docker няма работещи контейнери на Docker.

$ docker ps

Можете да изброите всички контейнери на Docker (работещи, на пауза, спрени) със следната команда:

$ docker ps --all

Както можете да видите, спрените контейнери на Docker сървър1, сървър2, и сървър3 са изброени.

Спрете всички контейнери на Docker с конкретно изображение:

Ако искате да спрете всички контейнери на Docker, работещи с конкретно изображение на Docker, тогава този раздел е за вас.

Първо, нека създадем няколко фиктивни контейнера на Docker.

Ще създам 2 контейнера на Docker (nginx1 и nginx2) използвайки Nginx Изображение на Docker и 2 контейнера на Docker (http1 и http2) използвайки httpd Docker изображение за демонстрацията.

За да създадете nginx1 Докер контейнер с помощта на Nginx Docker изображение, изпълнете следната команда:

$ docker run -d -p 8081: 80 --name nginx1 nginx

За да създадете nginx2 Докер контейнер с помощта на Nginx Docker изображение, изпълнете следната команда:

$ docker run -d -p 8082: 80 --name nginx2 nginx

За да създадете http1 Докер контейнер с помощта на httpd Docker изображение, изпълнете следната команда:

$ docker run -d -p 8091: 80 --name http1 httpd

За да създадете http2 Докер контейнер с помощта на httpd Docker изображение, изпълнете следната команда:

$ docker run -d -p 8092: 80 --name http2 httpd

Както можете да видите, nginx1, nginx2, http1, и http2 Контейнерите на Docker се изпълняват на моя отдалечен хост на Docker.

За да спрете всички контейнери на Docker, изпълняващи конкретно изображение на Docker (да кажем, nginx), създайте нова книга за игра на Docker stop_all_image_containers.ямъл в книги за игри / директория, както следва:

$ nano playbooks / stop_all_image_containers.ямъл

Сега въведете следните редове в stop_all_image_containers.ямъл файл.

- домакини: докер
потребител: ansible
задачи:
- name: Получете списък на всички работещи контейнери
docker_host_info:
контейнери: Вярно
регистър: docker_info
- име: Спрете всички контейнери, работещи с изображение на nginx
docker_container:
name: 'артикул.Имена [0] | regex_replace ("^ /", "") '
състояние: спряно
кога: т.Изображение == 'nginx'
цикъл: 'docker_info.контейнери '

След като приключите, натиснете + х следван от Y и за да запазите stop_all_image_containers.ямъл файл.

Тук добавих 2 задачи.

Първата задача използва Ansible docker_host_info модул, за да получите списък с всички работещи контейнери на Docker и да го съхранява в docker_info променлива.

Втората задача завърта през docker_info.контейнери array намира текущите имена на контейнери на Docker и изпълнява docker_container модул за всеки работещ контейнер само ако името на изображението на контейнера е Nginx. След това спира съответстващите контейнери на Docker.

Във втората задача се използва следният ред, за да се провери дали контейнерът на Docker изпълнява Nginx изображение. Можете да го промените на друго име на изображение на Docker, ако искате.

Сега стартирайте stop_all_image_containers.ямъл playbook, както следва:

$ ansible-playbook playbooks / stop_all_image_containers.ямъл

Както можете да видите, само Nginx контейнери (nginx1 и nginx2) са модифицирани (спрени). The httpd контейнери (http1 и http2) се пропускат.

Както можете да видите, не Nginx Контейнерите на Docker се изпълняват на моя отдалечен хост на Docker. Само httpd Докер контейнери (http1 и http2) бяга.

$ docker ps

Можете да изброите всички контейнери на Docker (работещи, на пауза, спрени) със следната команда:

$ docker ps --all

Както можете да видите, спрените контейнери на Docker nginx1 и nginx2 са изброени.

Заключение:

В тази статия ви показах как да спрете работещ контейнер на Docker, всички контейнери на Docker, работещи с конкретно изображение на Docker, и всички работещи контейнери на Docker на вашия хост на Docker. За целта използвах Ansible docker_container и docker_host_info модули в тази статия.

За да научите повече за тези модули, посетете следните страници за официална документация на Ansible.

[1] docker_container - Управление на докер контейнери
[2] docker_host_info - извлича факти за хоста на докер и списъци с обекти на услугите

Урок за битка за Уеснот
Битката за Уеснот е една от най-популярните стратегически игри с отворен код, които можете да играете по това време. Тази игра не само се разработва о...
0 А.д. Урок
От многото стратегически игри, 0 A.д. успява да се открои като изчерпателно заглавие и много дълбока, тактическа игра, въпреки че е с отворен код. Раз...
Урок за Unity3D
Въведение в Unity 3D Unity 3D е мощен двигател за разработка на игри. Това е кръстосана платформа, която ви позволява да създавате игри за мобилни уст...