Cómo detener todos los contenedores de Docker usando Ansible

Cómo detener todos los contenedores de Docker usando Ansible
Ansible tiene muchos módulos para automatizar su host de Docker, contenedores, volúmenes, redes, etc. Si desea detener sus contenedores Docker en ejecución, también puede hacerlo.

En este artículo, les mostraré cómo detener un contenedor de Docker específico. También voy a mostrarle cómo detener todos los contenedores Docker en ejecución, o todos los contenedores Docker que ejecutan una imagen específica de Docker usando Ansible. Entonces empecemos.

Prerrequisitos:

Si quieres probar los ejemplos de este artículo,

1) Debe tener Ansible instalado en su computadora.
2) Debe tener Docker instalado en su computadora o en un host Ubuntu remoto.
3) Debe tener instalada la Biblioteca Python Docker en su host de Docker.
4) Debe configurar el host de Docker para la automatización Ansible.

NOTA: Anfitrión de Docker es la computadora donde tienes Docker instalado.

Hay muchos artículos sobre Linuxhint dedicados a instalar Ansible y configurar hosts para la automatización de Ansible e instalar Docker. Puede consultarlos si es necesario.

Creación de un directorio de proyecto:

Para mantener todos los archivos y directorio que creamos en este artículo organizado, es una buena idea crear un directorio de proyecto.

Para crear un directorio de proyecto Docker1/ En su directorio de trabajo actual, ejecute el siguiente comando:

$ Mkdir -PV Docker1/Playbooks

Ahora, navegue al Docker1/ Directorio de proyectos de la siguiente manera:

$ CD Docker1/

Configuración de Ansible para la automatización remota de host de Docker:

Si tiene Docker instalado en un host Ubuntu remoto que desea automatizar usando Ansible, entonces esta sección es para usted.

Primero, cree un archivo de inventario ansible Hospedadores Con el siguiente comando:

$ nano anfitriones

Ahora, agregue la dirección IP o el nombre DNS de su host Docker en el Hospedadores' archivo de inventario de la siguiente manera.

[estibador]
VM4.notekita.comunicarse

En mi caso, el nombre DNS de mi anfitrión de Ubuntu Docker es VM4.notekita.comunicarse. Será diferente para ti. Entonces, asegúrese de reemplazarlo según sea necesario.

Una vez que haya terminado, presione+ X seguido por Y y Para salvar el Hospedadores archivo.

Ahora, cree un archivo de configuración ansible ansible.CFG como sigue:

$ nano ansible.CFG

Ahora, escriba las siguientes líneas en el ansible.CFG archivo de configuración.

[estibador]
VM4.notekita.comunicarse

Una vez que haya terminado, presione+ X seguido por Y y Para salvar el ansible.CFG archivo.

Ahora, verifique si puede hacer ping el host de Docker remoto desde su computadora con el siguiente comando:

$ ansible all -u ansible -m ping

Como puede ver, puedo hacer ping a mi host de Docker remoto.

Como puedes ver, tengo Docker 19.03.11 Instalado en mi host remoto de Ubuntu Docker.

Ahora, debe tener instalada la Biblioteca Python Docker en su host de Docker remoto para que funcione los módulos Docker Ansible. En este artículo, estoy usando ubuntu. Entonces, esto es lo que cubriré.

Para instalar Python Docker Library en su host de Docker remoto (Ubuntu), cree un nuevo libro de jugadas Ansible install_docker_python_lib.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/install_docker_python_lib.yaml

Ahora, escriba las siguientes líneas en el install_docker_python_lib.yaml archivo.

- Anfitriones: Docker
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Asegúrese de que esté instalado el paquete Python3-Docker
apto:
Nombre: Python3-Docker
Estado: presente
update_cache: verdadero

Una vez que haya terminado, presione+ X seguido por Y y Para salvar el install_docker_python_lib.yaml archivo.

Ahora, corre el install_docker_python_lib.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/install_docker_python_lib.yaml

El libro de jugadas debe ejecutarse con éxito e instalará la biblioteca Python Docker en su host de Docker remoto.

Configuración de Ansible para la automatización local de host de Docker:

Si tiene Docker instalado en el host donde tiene Ansible instalado y desea automatizarlo usando Ansible, entonces esta sección es para usted.

Primero, cree un nuevo libro de jugadas Ansible install_docker_python_lib.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/install_docker_python_lib.yaml

Ahora, escriba las siguientes líneas en el install_docker_python_lib.yaml archivo.

- Anfitriones: localhost
Conexión: local
Usuario: Shovon
hecho realidad
tareas:
- Nombre: Asegúrese de que esté instalado el paquete Python3-Docker
apto:
Nombre: Python3-Docker
Estado: presente
update_cache: verdadero

Aquí, la línea Usuario: Shovon sets pala Como el usuario que ejecutará las tareas. Será diferente para ti. Entonces, asegúrese de cambiarlo a su nombre de usuario de inicio de sesión.

Puede encontrar el nombre de usuario de inicio de sesión de su host de Docker con el siguiente comando:

$ whoami

Una vez que haya terminado, presione+ X seguido por Y y Para salvar el install_docker_python_lib.yaml archivo.

Ahora, corre el install_docker_python_lib.yaml Libro de jugadas de la siguiente manera:

$ Ansible-playbook --ask-pass --ask-become-pass
Playbooks/install_docker_python_lib.yaml

Ansible le solicitará la contraseña de inicio de sesión del usuario que ha especificado en el libro de jugadas. Escriba la contraseña de inicio de sesión y presione .

Ansible también le pedirá la contraseña de convertirse/sudo. Debe ser la misma contraseña que su contraseña de inicio de sesión. Entonces, déjalo vacío y presiona .

El libro de jugadas debería comenzar a correr. Puede tomar un tiempo completar.

En este punto, el libro de jugadas debe tener éxito y la Biblioteca Python Docker debe instalarse.

Hacer el ajuste necesario a los libros de jugadas:

Dependiendo de si está administrando contenedores Docker en su host local de Docker o en un host de Docker remoto, debe ajustar sus libros de jugadas en consecuencia.

De las siguientes secciones de este artículo, ejecutaré los libros de jugadas de ejemplo en un host de Docker remoto. Entonces, todos los libros de jugadas comenzarán con las siguientes líneas:

- Anfitriones: Docker
Usuario: Ansible
tareas:

Si desea ejecutar los libros de jugadas en su anfitrión local de Docker, asegúrese de que los libros de jugadas comiencen con las siguientes líneas en su lugar.

- Anfitriones: localhost
Conexión: local
Usuario: Shovon
hecho realidad
tareas:

Entonces, reemplace con las tareas que desea ejecutar y guardar el libro de jugadas presionando + X seguido por Y y .

También debe ejecutar los libros de jugadas Ansible de manera un poco diferente si va a administrar un host de Docker localmente usando Ansible.

Puedes ejecutar un libro de jugadas ansible localmente de la siguiente manera:

$ Ansible-playbook --ask-pass --ask-become-pass

Asegúrese de cambiar A la ruta de su archivo de Playbook Ansible Yaml.

Detener un contenedor Docker:

Si tiene un contenedor Docker en ejecución y conoce la identificación o el nombre del contenedor Docker, puede detener fácilmente ese contenedor Docker usando Ansible.

En esta sección, te mostraré cómo hacer eso.

Primero, voy a crear un Nginx (Nombre de la imagen) Container Docker http_server1 (Nombre del contenedor) como sigue:

$ Docker Run -P 8080: 80 -D -Nombre http_server1 nginx

Como puede ver, el contenedor Docker http_server1 Esta corriendo.

$ Docker PS

Para detener el contenedor de Docker http_server1 Usando Ansible, cree un nuevo libro de jugadas stop_container.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/stop_container.yaml

Luego, escriba las siguientes líneas en el stop_container.yaml libro de jugadas.

- Anfitriones: Docker
Usuario: Ansible
tareas:
- Nombre: Detente el contenedor http_server1
docker_container:
Nombre: http_server1
Estado: detenido

Una vez que haya terminado, presione + X seguido por Y y Para salvar el stop_container.yaml archivo.

Aquí, el Ansible docker_container El módulo se usa para detener el contenedor Docker http_server1.

Ahora, corre el stop_container.yaml Playbook con el siguiente comando:

$ Ansible-Playbook Playbooks/stop_container.yaml

Como puede ver, el contenedor Docker http_server1 ya no se está ejecutando en mi host de Docker remoto.

$ Docker PS

Puede enumerar todos los contenedores Docker (en ejecución, pausa, detenido) con el siguiente comando:

$ Docker PS -todo

Como puede ver, el contenedor Docker detenido http_server1 está listado.

Detener todos los contenedores de Docker:

Si desea detener todos los contenedores Docker que se ejecutan en su host de Docker usando Ansible, entonces esta sección es para usted.

Primero, voy a crear 3 contenedores Docker (servidor 1, servidor2, y servidor3) para que pueda detenerlos a todos usando Ansible más tarde.

Para crear el servidor 1 Container Docker, ejecute el siguiente comando:

$ Docker Run -P 8081: 80 -d -Name Server1 Nginx

Para crear el servidor2 Container Docker, ejecute el siguiente comando:

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

Para crear el servidor3 Container Docker, ejecute el siguiente comando:

$ docker run -p 8083: 80 -d --name Server3 nginx

Como puedes ver, el servidor 1, servidor2, y servidor3 Los contenedores Docker se están ejecutando en mi host de Docker remoto.

$ Docker PS

Para detener todos esos contenedores Docker, cree un nuevo libro de jugadas stop_all_container.yaml en tus Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/stop_all_container.yaml

Ahora, escriba las siguientes líneas en el stop_all_container.yaml archivo del libro de jugadas.

- Anfitriones: Docker
Usuario: Ansible
tareas:
- Nombre: Obtenga una lista de todos los contenedores en ejecución
docker_host_info:
contenedores: verdadero
Registrarse: Docker_info
- Nombre: Detente todos los contenedores en ejecución
docker_container:
Nombre: 'elemento.Nombres [0] | regex_replace ("^/", "") '
Estado: detenido
bucle: 'docker_info.contenedores '

Para salvar el stop_all_container.yaml archivo, presione + X seguido por Y y .

Aquí, he definido 2 tareas.

La primera tarea usa el ansible docker_host_info módulo para obtener una lista de todos los contenedores Docker en ejecución y lo almacena en el docker_info variable.

La segunda tarea boops a través del docker_info.contenedores Array encuentra los nombres de contenedores Docker en ejecución y los detiene uno por uno.

Ahora, corre el stop_all_container.yaml Playbook con el siguiente comando:

$ Ansible-Playbook Playbooks/stop_all_container.yaml

El libro de jugadas debe funcionar con éxito como puede ver en la captura de pantalla a continuación.

Como puede ver, no hay contenedores Docker en mi host de Docker remoto.

$ Docker PS

Puede enumerar todos los contenedores Docker (en ejecución, pausa, detenido) con el siguiente comando:

$ Docker PS -todo

Como puede ver, los contenedores Docker detenidos servidor 1, servidor2, y servidor3 están listados.

Detenga todos los contenedores Docker que ejecuta una imagen específica:

Si desea detener todos los contenedores Docker que ejecutan una imagen específica de Docker, entonces esta sección es para usted.

Primero, creemos algunos contenedores Dummy Docker.

Crearé 2 contenedores Docker (nginx1 y nginx2) utilizando el Nginx Imagen de Docker y 2 contenedores Docker (http1 y http2) utilizando el httpd Imagen de Docker para la demostración.

Para crear el nginx1 Container Docker usando el Nginx Imagen de Docker, ejecute el siguiente comando:

$ Docker Run -d -P 8081: 80 -Nombre nginx1 nginx

Para crear el nginx2 Container Docker usando el Nginx Imagen de Docker, ejecute el siguiente comando:

$ docker run -d -p 8082: 80 –Name nginx2 nginx

Para crear el http1 Container Docker usando el httpd Imagen de Docker, ejecute el siguiente comando:

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

Para crear el http2 Container Docker usando el httpd Imagen de Docker, ejecute el siguiente comando:

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

Como puedes ver, el nginx1, nginx2, http1, y http2 Los contenedores Docker se están ejecutando en mi host de Docker remoto.

Para detener todos los contenedores Docker que ejecuta una imagen específica de Docker (digamos, nginx), crea un nuevo libro de jugadas de Docker stop_all_image_containers.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/stop_all_image_containers.yaml

Ahora, escriba las siguientes líneas en el stop_all_image_containers.yaml archivo.

- Anfitriones: Docker
Usuario: Ansible
tareas:
- Nombre: Obtenga una lista de todos los contenedores en ejecución
docker_host_info:
contenedores: verdadero
Registrarse: Docker_info
- Nombre: Detenga todos los contenedores que ejecutan imagen Nginx
docker_container:
Nombre: 'elemento.Nombres [0] | regex_replace ("^/", "") '
Estado: detenido
Cuándo: artículo.Imagen == 'Nginx'
bucle: 'docker_info.contenedores '

Una vez que haya terminado, presione + X seguido por Y y Para salvar el stop_all_image_containers.yaml archivo.

Aquí, he agregado 2 tareas.

La primera tarea usa el ansible docker_host_info módulo para obtener una lista de todos los contenedores Docker en ejecución y lo almacena en el docker_info variable.

La segunda tarea boops a través del docker_info.contenedores Array encuentra los nombres de contenedores de Docker en ejecución y ejecuta el docker_container módulo para cada contenedor en ejecución solo si el nombre de la imagen del contenedor es Nginx. Luego, detiene los contenedores Docker coincidentes.

En la segunda tarea, la siguiente línea se usa para verificar si el contenedor Docker está ejecutando el Nginx imagen. Puede cambiarlo a un nombre de imagen Docker diferente si lo desea.

Ahora, corre el stop_all_image_containers.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/stop_all_image_containers.yaml

Como puede ver, solo el Nginx contenedores (nginx1 y nginx2) se modifican (detenido). El httpd contenedores (http1 y http2) son omitidos.

Como puedes ver, no Nginx Los contenedores Docker se están ejecutando en mi host de Docker remoto. Solo el httpd Contenedores Docker (http1 y http2) Esta corriendo.

$ Docker PS

Puede enumerar todos los contenedores Docker (en ejecución, pausa, detenido) con el siguiente comando:

$ Docker PS -todo

Como puede ver, los contenedores Docker detenidos nginx1 y nginx2 están listados.

Conclusión:

En este artículo, le he mostrado cómo detener un contenedor Docker en ejecución, todos los contenedores Docker que ejecutan una imagen de Docker específica y todos los contenedores Docker de su host de Docker. Para hacer eso, he usado el Ansible docker_container y docker_host_info Módulos en este artículo.

Para obtener más información sobre estos módulos, visite las siguientes páginas de documentación oficial de Ansible.

[1] Docker_Container - Administrar contenedores Docker
[2] docker_host_info: recupera hechos sobre el host de Docker y las listas de objetos de los servicios