В этой статье я покажу вам, как остановить конкретный контейнер Docker. Я также собираюсь показать вам, как остановить все запущенные контейнеры Docker или все контейнеры Docker, на которых запущен определенный образ Docker, с помощью Ansible. Итак, приступим.
Предпосылки:
Если вы хотите попробовать примеры из этой статьи,
1) На вашем компьютере должен быть установлен Ansible.
2) У вас должен быть установлен Docker на вашем компьютере или удаленном хосте Ubuntu.
3) У вас должна быть установлена библиотека Python Docker на вашем хосте Docker.
4) Вы должны настроить хост Docker для автоматизации Ansible.
ПРИМЕЧАНИЕ: Хост Docker это компьютер, на котором установлен Docker.
На LinuxHint есть много статей, посвященных установке Ansible и настройке хостов для автоматизации Ansible и установке Docker. Вы можете проверить их при необходимости.
Создание каталога проекта:
Чтобы упорядочить все файлы и каталоги, которые мы будем создавать в этой статье, рекомендуется создать каталог проекта.
Чтобы создать каталог проекта docker1 / в вашем текущем рабочем каталоге выполните следующую команду:
$ mkdir -pv docker1 / плейбуки
Теперь перейдите к docker1 / каталог проекта следующим образом:
$ cd docker1 /
Настройка Ansible для автоматизации удаленного хоста Docker:
Если у вас установлен Docker на удаленном хосте Ubuntu, который вы хотите автоматизировать с помощью Ansible, то этот раздел для вас.
Сначала создайте файл инвентаризации Ansible хозяева с помощью следующей команды:
$ nano хосты
Теперь добавьте IP-адрес или DNS-имя вашего хоста Docker в хозяева инвентарный файл следующим образом.
[докер]vm4.нодекит.ком
В моем случае DNS-имя моего хоста Ubuntu Docker vm4.нодекит.ком. Для тебя будет иначе. Поэтому не забудьте заменить его при необходимости.
Когда вы закончите, нажмите
Теперь создайте файл конфигурации Ansible анзибль.cfg следующим образом:
$ нано доступный.cfg
Теперь введите следующие строки в анзибль.cfg конфигурационный файл.
[докер]vm4.нодекит.ком
Когда вы закончите, нажмите
Теперь проверьте, можете ли вы пропинговать удаленный хост Docker со своего компьютера с помощью следующей команды:
$ ansible all -u ansible -m пинг
Как видите, я могу проверить связь со своим удаленным хостом Docker.
Как видите, у меня Docker 19.03.11 установлен на моем удаленном хосте Ubuntu Docker.
Теперь у вас должна быть установлена библиотека Python Docker на удаленном хосте Docker, чтобы модули докеров Ansible работали. В этой статье я использую Ubuntu. Итак, вот что я расскажу.
Чтобы установить библиотеку Python Docker на удаленный хост Docker (Ubuntu), создайте новую книгу воспроизведения Ansible install_docker_python_lib.ямл в пьесы / каталог следующим образом:
$ nano playbooks / install_docker_python_lib.ямл
Теперь введите следующие строки в install_docker_python_lib.ямл файл.
- хосты: докерпользователь: ansible
становятся истинными
задачи:
- name: убедитесь, что установлен пакет python3-docker
apt:
имя: python3-docker
состояние: настоящее
update_cache: Истина
Когда вы закончите, нажмите
Теперь запустите install_docker_python_lib.ямл playbook следующим образом:
плейбуки $ ansible-playbook / install_docker_python_lib.ямл
Плейбук должен работать успешно, и он установит библиотеку Python Docker на ваш удаленный хост Docker.
Настройка Ansible для автоматизации локального хоста Docker:
Если у вас установлен Docker на хосте, на котором установлен Ansible, и вы хотите автоматизировать его с помощью Ansible, то этот раздел для вас.
Сначала создайте новую пьесу Ansible install_docker_python_lib.ямл в пьесы / каталог следующим образом:
$ nano playbooks / install_docker_python_lib.ямл
Теперь введите следующие строки в install_docker_python_lib.ямл файл.
- хосты: localhostподключение: местное
пользователь: shovon
становятся истинными
задачи:
- name: убедитесь, что установлен пакет python3-docker
apt:
имя: python3-docker
состояние: настоящее
update_cache: Истина
Здесь строка пользователь: shovon наборы Шовон как пользователь, который будет выполнять задачи. Для тебя будет иначе. Итак, не забудьте изменить его на свое имя пользователя для входа.
Вы можете найти имя пользователя вашего хоста Docker с помощью следующей команды:
$ whoami
Когда вы закончите, нажмите
Теперь запустите install_docker_python_lib.ямл playbook следующим образом:
$ ansible-playbook --ask-pass --ask-стать-пройтиplaybooks / install_docker_python_lib.ямл
Ansible запросит у вас пароль для входа в систему пользователя, которого вы указали в playbook. Введите пароль для входа и нажмите
Ansible также попросит вас ввести пароль BECOME / sudo. Это должен быть тот же пароль, что и ваш пароль для входа. Итак, оставьте его пустым и нажмите
Плейбук должен начать работать. Это может занять некоторое время.
На этом этапе playbook должен быть успешным и должна быть установлена библиотека Python Docker.
Внесение необходимых корректировок в учебники:
В зависимости от того, управляете ли вы контейнерами Docker на локальном хосте Docker или на удаленном хосте Docker, вам необходимо соответствующим образом настроить свои плейбуки.
В следующих разделах этой статьи я буду запускать примеры playbook на удаленном хосте Docker. Итак, все пьесы будут начинаться со следующих строк:
- хосты: докерпользователь: ansible
задачи:
Если вы хотите запустить плейбуки на локальном хосте Docker, убедитесь, что плейбуки начинаются со следующих строк.
- хосты: localhostподключение: местное
пользователь: shovon
становятся истинными
задачи:
Затем замените
Вам также нужно запускать сценарии Ansible немного по-другому, если вы собираетесь управлять хостом Docker локально с помощью Ansible.
Вы можете запустить Ansible playbook локально следующим образом:
$ ansible-playbook --ask-pass --ask-стать-пройти
Обязательно измените
Остановка контейнера Docker:
Если у вас запущен контейнер Docker и вы знаете идентификатор или имя контейнера Docker, вы можете легко остановить этот контейнер Docker с помощью Ansible.
В этом разделе я покажу вам, как это сделать.
Сначала я собираюсь создать Nginx (имя образа) Контейнер Docker http_server1 (название контейнера) следующим образом:
$ docker run -p 8080: 80 -d - имя http_server1 nginx
Как видите, контейнер Docker http_server1 это работает.
$ docker ps
Чтобы остановить контейнер Docker http_server1 используя Ansible, создайте новую пьесу stop_container.ямл в пьесы / каталог следующим образом:
$ nano playbooks / stop_container.ямл
Затем введите следующие строки в stop_container.ямл учебник.
- хосты: докерпользователь: ansible
задачи:
- name: остановить контейнер http_server1
docker_container:
имя: http_server1
состояние: остановлено
Когда вы закончите, нажмите
Здесь Ансибл docker_container модуль используется для остановки контейнера Docker http_server1.
Теперь запустите stop_container.ямл playbook с помощью следующей команды:
плейбуки $ ansible-playbook / stop_container.ямл
Как видите, контейнер Docker http_server1 больше не работает на моем удаленном хосте Docker.
$ docker ps
Вы можете перечислить все контейнеры Docker (запущенные, приостановленные, остановленные) с помощью следующей команды:
$ docker ps - всеКак видите, остановленный контейнер Docker http_server1 перечислен.
Остановка всех запущенных контейнеров Docker:
Если вы хотите остановить все контейнеры Docker, работающие на вашем хосте Docker, с помощью Ansible, тогда этот раздел для вас.
Сначала я собираюсь создать 3 контейнера Docker (server1, server2, а также server3), чтобы я мог остановить их всех, используя Ansible позже.
Для создания server1 Контейнер Docker, выполните следующую команду:
$ docker run -p 8081: 80 -d --name server1 nginx
Для создания server2 Контейнер Docker, выполните следующую команду:
$ docker run -p 8082: 80 -d --name server2 nginx
Для создания server3 Контейнер Docker, выполните следующую команду:
$ docker run -p 8083: 80 -d --name server3 nginx
Как видите, server1, server2, а также server3 Контейнеры Docker работают на моем удаленном хосте Docker.
$ docker ps
Чтобы остановить все эти контейнеры Docker, создайте новую книгу stop_all_container.ямл в твоей пьесы / каталог следующим образом:
$ nano playbooks / stop_all_container.ямл
Теперь введите следующие строки в stop_all_container.ямл файл playbook.
- хосты: докерпользователь: ansible
задачи:
- name: получить список всех запущенных контейнеров
docker_host_info:
контейнеры: True
зарегистрироваться: docker_info
- имя: Остановить все запущенные контейнеры
docker_container:
name: 'item.Имена [0] | regex_replace ("^ /", "") '
состояние: остановлено
цикл: 'docker_info.контейнеры '
Чтобы спасти stop_all_container.ямл файл, нажмите
Здесь я определил 2 задачи.
Первая задача использует Ansible docker_host_info модуль, чтобы получить список всех запущенных контейнеров Docker и сохранить его в docker_info Переменная.
Вторая задача проходит через docker_info.контейнеры array находит имена запущенных контейнеров Docker и останавливает их одно за другим.
Теперь запустите stop_all_container.ямл playbook с помощью следующей команды:
плейбуки $ ansible-playbook / stop_all_container.ямл
Плейбук должен успешно работать, как вы можете видеть на скриншоте ниже.
Как видите, на моем удаленном хосте Docker нет запущенных контейнеров Docker.
$ docker ps
Вы можете перечислить все контейнеры Docker (запущенные, приостановленные, остановленные) с помощью следующей команды:
$ docker ps - всеКак видите, остановленные контейнеры Docker server1, server2, и server3 перечислены.
Остановить все контейнеры Docker, запускающие определенный образ:
Если вы хотите остановить все контейнеры Docker, на которых запущен определенный образ Docker, то этот раздел для вас.
Во-первых, давайте создадим несколько фиктивных контейнеров Docker.
Я создам 2 контейнера Docker (nginx1 а также nginx2) с помощью Nginx Образ Docker и 2 контейнера Docker (http1 а также http2) с помощью httpd Образ Docker для демонстрации.
Для создания nginx1 Контейнер Docker, использующий Nginx Образ Docker, выполните следующую команду:
$ docker run -d -p 8081: 80 --name nginx1 nginx
Для создания nginx2 Контейнер Docker, использующий Nginx Образ Docker, выполните следующую команду:
$ docker run -d -p 8082: 80 --name nginx2 nginx
Для создания http1 Контейнер Docker, использующий httpd Образ Docker, выполните следующую команду:
$ docker run -d -p 8091: 80 --name http1 httpd
Для создания http2 Контейнер Docker, использующий 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:
контейнеры: True
зарегистрироваться: docker_info
- name: Остановить все контейнеры, в которых запущен образ nginx
docker_container:
name: 'item.Имена [0] | regex_replace ("^ /", "") '
состояние: остановлено
когда: элемент.Изображение == 'nginx'
цикл: 'docker_info.контейнеры '
Когда вы закончите, нажмите
Здесь я добавил 2 задачи.
Первая задача использует Ansible docker_host_info модуль, чтобы получить список всех запущенных контейнеров Docker и сохранить его в docker_info Переменная.
Вторая задача проходит через docker_info.контейнеры массив находит имена запущенных контейнеров Docker и запускает docker_container модуль для каждого запущенного контейнера, только если имя образа контейнера Nginx. Затем он останавливает соответствующие контейнеры Docker.
Во второй задаче следующая строка используется для проверки того, работает ли в контейнере Docker Nginx изображение. Вы можете изменить его на другое имя образа Docker, если хотите.
Теперь запустите stop_all_image_containers.ямл playbook следующим образом:
плейбуки $ ansible-playbook / stop_all_image_containers.ямл
Как видите, только Nginx контейнеры (nginx1 а также nginx2) изменены (остановлены). В httpd контейнеры (http1 а также http2) пропускаются.
Как видите, нет Nginx Контейнеры Docker работают на моем удаленном хосте Docker. Только httpd Контейнеры Docker (http1 а также http2) это работает.
$ docker ps
Вы можете перечислить все контейнеры Docker (запущенные, приостановленные, остановленные) с помощью следующей команды:
$ docker ps - всеКак видите, остановленные контейнеры Docker nginx1 и nginx2 перечислены.
Заключение:
В этой статье я показал вам, как остановить работающий контейнер Docker, все контейнеры Docker, на которых запущен определенный образ Docker, и все запущенные контейнеры Docker вашего хоста Docker. Для этого я использовал Ansible docker_container а также docker_host_info модули в этой статье.
Чтобы узнать больше об этих модулях, посетите следующие страницы официальной документации Ansible.
[1] docker_container - Управление контейнерами докеров
[2] docker_host_info - Извлекает факты о хосте докеров и списки объектов сервисов