Ansible

Cómo detener todos los contenedores de Docker con Ansible

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

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

Requisitos previos:

Si quieres probar los ejemplos de este artículo,

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

NOTA: Host de Docker es la computadora donde tienes instalado Docker.

Hay muchos artículos sobre LinuxHint dedicados a la instalación de Ansible y la configuración de hosts para la automatización de Ansible y la instalación de Docker. Puede consultarlos si es necesario.

Crear un directorio de proyectos:

Para mantener organizados todos los archivos y directorios que crearemos en este artículo, 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, navega hasta el docker1 / directorio del proyecto de la siguiente manera:

$ cd docker1 /

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

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

Primero, cree un archivo de inventario de Ansible Hospedadores con el siguiente comando:

$ nano hosts

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.nodekite.com

En mi caso, el nombre DNS de mi host Ubuntu Docker es vm4.nodekite.com. Será diferente para ti. Por lo tanto, asegúrese de reemplazarlo según sea necesario.

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

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

$ nano ansible.cfg

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

[estibador]
vm4.nodekite.com

Una vez que haya terminado, presione + X seguido por Y y para salvar el ansible.cfg expediente.

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

$ ansible all -u ansible -m ping

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

Como puede ver, tengo Docker 19.03.11 instalado en mi host Ubuntu Docker remoto.

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

Para instalar la biblioteca de Python Docker en su host de Docker remoto (Ubuntu), cree un nuevo libro de jugadas de 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 expediente.

- hosts: docker
usuario: ansible
hecho realidad
Tareas:
- nombre: asegúrese de que el paquete python3-docker esté instalado
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 expediente.

Ahora, ejecute 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 debería ejecutarse correctamente e instalará la biblioteca de Docker de Python en su host de Docker remoto.

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

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

Primero, cree un nuevo libro de jugadas de 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 expediente.

- hosts: localhost
conexión: local
usuario: shovon
hecho realidad
Tareas:
- nombre: asegúrese de que el paquete python3-docker esté instalado
apto:
nombre: python3-docker
estado: presente
update_cache: Verdadero

Aquí, la línea usuario: shovon conjuntos shovon como el usuario que ejecutará las tareas. Será diferente para ti. Por lo tanto, 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 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 expediente.

Ahora, ejecute 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 pedirá la contraseña de inicio de sesión del usuario que haya 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 BECOME / sudo. Debe ser la misma contraseña que su contraseña de inicio de sesión. Así que déjalo vacío y presiona .

El libro de jugadas debería comenzar a ejecutarse. Puede que tarde un poco en completarse.

En este punto, el libro de jugadas debería tener éxito y la biblioteca de Python Docker debería estar instalada.

Hacer los ajustes necesarios a los libros de jugadas:

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

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

- hosts: docker
usuario: ansible
Tareas:

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

- hosts: localhost
conexión: local
usuario: shovon
hecho realidad
Tareas:

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

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

Puede ejecutar un libro de jugadas de Ansible localmente de la siguiente manera:

$ ansible-playbook --ask-pass --ask-Become-pass

Asegúrate de cambiar a la ruta del archivo YAML de su libro de jugadas de Ansible.

Detención de un contenedor Docker:

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

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

Primero, voy a crear un Nginx (nombre de la imagen) contenedor Docker http_server1 (nombre del contenedor) de la siguiente manera:

$ docker run -p 8080: 80 -d --name 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.

- hosts: docker
usuario: ansible
Tareas:
- nombre: Detenga 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 expediente.

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

Ahora, ejecute el stop_container.yaml libro de jugadas 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 Docker remoto.

$ docker ps

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

$ docker ps --todos

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

Detención de todos los contenedores Docker en ejecución:

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

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

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

$ docker run -p 8081: 80 -d --nombre servidor1 nginx

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

$ docker run -p 8082: 80 -d --nombre servidor2 nginx

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

$ docker ejecutar -p 8083: 80 -d --nombre servidor3 nginx

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

$ docker ps

Para detener todos esos contenedores de 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 de libro de jugadas.

- hosts: docker
usuario: ansible
Tareas:
- name: obtenga una lista de todos los contenedores en ejecución
docker_host_info:
contenedores: Verdadero
registrarse: docker_info
- nombre: detener todos los contenedores en ejecución
docker_container:
nombre: 'artículo.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 almacenarla en el docker_info variable.

La segunda tarea recorre el docker_info.contenedores array encuentra los nombres del contenedor Docker en ejecución y los detiene uno por uno.

Ahora, ejecute el stop_all_container.yaml libro de jugadas con el siguiente comando:

$ ansible-playbook playbooks / stop_all_container.yaml

El libro de jugadas debería ejecutarse correctamente, como puede ver en la captura de pantalla a continuación.

Como puede ver, no hay contenedores Docker en ejecución en mi host Docker remoto.

$ docker ps

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

$ docker ps --todos

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

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

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

Primero, creemos algunos contenedores Docker ficticios.

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

Para crear el nginx1 Contenedor de Docker con el Nginx Imagen de Docker, ejecute el siguiente comando:

$ docker ejecutar -d -p 8081: 80 --nombre nginx1 nginx

Para crear el nginx2 Contenedor de Docker con el Nginx Imagen de Docker, ejecute el siguiente comando:

$ docker ejecutar -d -p 8082: 80 --nombre nginx2 nginx

Para crear el http1 Contenedor de Docker con el httpd Imagen de Docker, ejecute el siguiente comando:

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

Para crear el http2 Contenedor de Docker con el httpd Imagen de Docker, ejecute el siguiente comando:

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

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

Para detener todos los contenedores de Docker que ejecutan una imagen de Docker específica (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 expediente.

- hosts: docker
usuario: ansible
Tareas:
- name: 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 la imagen nginx
docker_container:
nombre: 'artículo.Nombres [0] | regex_replace ("^ /", "") '
estado: detenido
cuando: 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 expediente.

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 almacenarla en el docker_info variable.

La segunda tarea recorre el docker_info.contenedores matriz busca 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 de Docker diferente si lo desea.

Ahora, ejecute 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 contenedoresnginx1 y nginx2) se modifican (se detienen). La httpd contenedoreshttp1 y http2) se omiten.

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

$ docker ps

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

$ docker ps --todos

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 de Docker en ejecución, todos los contenedores de Docker que ejecutan una imagen de Docker específica y todos los contenedores de Docker en ejecución 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 de Docker
[2] docker_host_info: recupera datos sobre el host de la ventana acoplable y listas de objetos de los servicios

El botón de clic izquierdo del mouse no funciona en Windows 10
Si está utilizando un mouse dedicado con su computadora portátil o computadora de escritorio, pero el el botón izquierdo del mouse no funciona en Wind...
El cursor salta o se mueve aleatoriamente mientras escribe en Windows 10
Si descubre que el cursor del mouse salta o se mueve por sí solo, automáticamente, de manera aleatoria mientras escribe en una computadora portátil o ...
Cómo invertir la dirección de desplazamiento del mouse y los paneles táctiles en Windows 10
Ratón y Panel táctils no solo facilitan la informática, sino que también hacen que sea más eficiente y requieran menos tiempo. No podemos imaginar una...