Como parar todos os recipientes do Docker usando Ansible

Como parar todos os recipientes do Docker usando Ansible
Ansible tem muitos módulos para automatizar seu host, recipientes, volumes, redes, etc. Se você quiser parar seus recipientes para o Docker em corrida, você também pode fazer isso.

Neste artigo, vou mostrar como parar um contêiner específico do Docker. Também vou mostrar como parar todos os contêineres do Docker em execução, ou todos os contêineres do Docker executando uma imagem específica do Docker usando Ansible. Então vamos começar.

Pré -requisitos:

Se você quiser experimentar os exemplos deste artigo,

1) Você deve ter o Ansible instalado em seu computador.
2) Você deve ter o Docker instalado no seu computador ou um host do Ubuntu remoto.
3) Você deve ter a biblioteca Python Docker instalada no seu host do Docker.
4) Você deve configurar o host do Docker para Ansible Automation.

OBSERVAÇÃO: Host Docker é o computador onde você instalou o Docker.

Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible e a configuração de hosts para Ansible Automation e Installing Docker. Você pode conferi -los se necessário.

Criando um diretório de projeto:

Para manter todos os arquivos e diretórios que criaremos neste artigo organizado, é uma boa ideia criar um diretório de projeto.

Para criar um diretório de projeto Docker1/ No seu diretório de trabalho atual, execute o seguinte comando:

$ mkdir -pv Docker1/Playbooks

Agora, navegue para o Docker1/ Diretório do projeto da seguinte forma:

$ CD Docker1/

Configurando Ansible para automação de host do Docker Remote:

Se você instalou o Docker em um host do Ubuntu remoto que deseja automatizar usando Ansible, esta seção é para você.

Primeiro, crie um arquivo de inventário Ansible anfitriões com o seguinte comando:

$ nano hosts

Agora, adicione o endereço IP ou o nome DNS do seu host do Docker no anfitriões arquivo de inventário da seguinte forma.

[Docker]
vm4.NodeKite.com

No meu caso, o nome do DNS do meu host do Ubuntu Docker é vm4.NodeKite.com. Vai ser diferente para você. Então, certifique -se de substituí -lo conforme necessário.

Depois de terminar, pressione+ X seguido pela Y e Para salvar o anfitriões arquivo.

Agora, crie um arquivo de configuração Ansible Ansible.cfg do seguinte modo:

$ Nano Ansible.cfg

Agora, digite as seguintes linhas no Ansible.cfg arquivo de configuração.

[Docker]
vm4.NodeKite.com

Depois de terminar, pressione+ X seguido pela Y e Para salvar o Ansible.cfg arquivo.

Agora, verifique se você pode fazer ping no host do Docker remoto do seu computador com o seguinte comando:

$ Ansible All -u Ansible -M Ping

Como você pode ver, eu posso fazer ping no meu host do Docker remoto.

Como você pode ver, eu tenho Docker 19.03.11 Instalado no meu host remoto do Ubuntu Docker.

Agora, você deve ter a biblioteca Python Docker instalada no seu host do Docker remoto para módulos Ansible Docker funcionar. Neste artigo, estou usando o Ubuntu. Então, é isso que vou abordar.

Para instalar o Python Docker Library no seu host do Docker Remote (Ubuntu), crie um novo manual Ansible install_docker_python_lib.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano playbooks/install_docker_python_lib.Yaml

Agora, digite as seguintes linhas no install_docker_python_lib.Yaml arquivo.

- Hosts: Docker
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Verifique se o pacote Python3-Docker está instalado
APT:
Nome: Python3-Docker
Estado: presente
update_cache: true

Depois de terminar, pressione+ X seguido pela Y e Para salvar o install_docker_python_lib.Yaml arquivo.

Agora, execute o install_docker_python_lib.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/install_docker_python_lib.Yaml

O manual deve ser executado com sucesso e instalará a biblioteca Python Docker no seu host remoto do Docker.

Configurando Ansible para a automação do host local do Docker:

Se você instalou o Docker no host em que você tem Ansible instalado e deseja automatizá -lo usando Ansible, então esta seção é para você.

Primeiro, crie um novo manual Ansible install_docker_python_lib.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano playbooks/install_docker_python_lib.Yaml

Agora, digite as seguintes linhas no install_docker_python_lib.Yaml arquivo.

- Anfitriões: localhost
Conexão: Local
Usuário: Shovon
tornar verdade
tarefas:
- Nome: Verifique se o pacote Python3-Docker está instalado
APT:
Nome: Python3-Docker
Estado: presente
update_cache: true

Aqui, a linha Usuário: Shovon conjuntos Shovon como o usuário que estará executando as tarefas. Vai ser diferente para você. Então, altere -o para o seu nome de usuário de login.

Você pode encontrar o nome de usuário de login do seu host do Docker com o seguinte comando:

$ whoami

Depois de terminar, pressione+ X seguido pela Y e Para salvar o install_docker_python_lib.Yaml arquivo.

Agora, execute o install_docker_python_lib.Yaml Manual da seguinte maneira:

$ Ansible-Playbook --k-pass-pas-become-pass
playbooks/install_docker_python_lib.Yaml

Ansible solicitará a senha de login do usuário que você especificou no manual. Digite a senha de login e pressione .

Ansible solicitará a senha se tornar/sudo também. Deve ser a mesma senha que sua senha de login. Então, deixe -o vazio e pressione .

O manual deve começar a correr. Pode demorar um pouco para completar.

Neste ponto, o manual deve ser bem -sucedido e a biblioteca Python Docker deve ser instalada.

Fazendo o ajuste necessário para os manuais:

Dependendo de você estar gerenciando os contêineres do Docker no host local do Docker ou em um host do Docker remoto, você precisa ajustar seus manuais de acordo.

Nas próximas seções deste artigo, estarei executando os manuais de exemplo em um host do Docker remoto. Então, todos os manuais começarão com as seguintes linhas:

- Hosts: Docker
Usuário: Ansible
tarefas:

Se você quiser executar os manuais do seu host local do Docker, verifique se os manuais começam com as seguintes linhas.

- Anfitriões: localhost
Conexão: Local
Usuário: Shovon
tornar verdade
tarefas:

Em seguida, substitua com as tarefas que você deseja executar e salvar o manual pressionando + X seguido pela Y e .

Você também tem que executar os manuais Ansible um pouco diferente se você vai gerenciar um host do Docker localmente usando Ansible.

Você pode executar um manual Ansible localmente da seguinte maneira:

$ Ansible-Playbook --k-pass-pas-become-pass

Certifique -se de mudar para o caminho do seu arquivo YAML de manual Ansible.

Parando um recipiente do docker:

Se você tem um contêiner em execução e conhece o ID ou o nome do contêiner do Docker, você pode facilmente parar o contêiner do Docker usando Ansible.

Nesta seção, vou mostrar como fazer isso.

Primeiro, vou criar um Nginx (Nome da imagem) Docker Container http_server1 (Nome do contêiner) da seguinte forma:

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

Como você pode ver, o contêiner do Docker http_server1 está correndo.

$ docker ps

Para parar o recipiente do Docker http_server1 Usando Ansible, crie um novo manual Stop_container.Yaml no Playbooks/ diretório da seguinte maneira:

$ Nano Playbooks/Stop_container.Yaml

Em seguida, digite as seguintes linhas no Stop_container.Yaml livro de cantadas.

- Hosts: Docker
Usuário: Ansible
tarefas:
- Nome: Pare o contêiner http_server1
Docker_container:
Nome: http_server1
Estado: parou

Depois de terminar, pressione + X seguido pela Y e Para salvar o Stop_container.Yaml arquivo.

Aqui, o Ansible Docker_Container O módulo é usado para interromper o recipiente do Docker http_server1.

Agora, execute o Stop_container.Yaml Manual com o seguinte comando:

$ Ansible-playbook playbooks/stop_container.Yaml

Como você pode ver, o contêiner do Docker http_server1 não está mais funcionando no meu host do Docker remoto.

$ docker ps

Você pode listar todos os contêineres do Docker (em execução, pausaram, pararam) com o seguinte comando:

$ docker ps -tudo

Como você pode ver, o recipiente parado do Docker http_server1 está listado.

Interrompendo todos os recipientes para o Docker em execução:

Se você quiser parar todos os recipientes do Docker em execução no seu host do Docker usando Ansible, esta seção é para você.

Primeiro, vou criar 3 recipientes do Docker (servidor1, Server2, e Server3) para que eu possa impedi -los todos usando Ansible mais tarde.

Para criar o servidor1 Docker Container, execute o seguinte comando:

$ Docker Run -P 8081: 80 -D -Nome Server1 nginx

Para criar o Server2 Docker Container, execute o seguinte comando:

$ Docker Run -P 8082: 80 -D -Nome Server2 nginx

Para criar o Server3 Docker Container, execute o seguinte comando:

$ Docker Run -P 8083: 80 -D -Nome Server3 nginx

Como você pode ver, o servidor1, Server2, e Server3 Os contêineres do Docker estão em execução no meu host do Docker remoto.

$ docker ps

Para parar todos esses recipientes do Docker, crie um novo manual Stop_all_Container.Yaml na tua Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/stop_all_container.Yaml

Agora, digite as seguintes linhas no Stop_all_Container.Yaml Arquivo de Playbook.

- Hosts: Docker
Usuário: Ansible
tarefas:
- Nome: Obtenha uma lista de todos os contêineres em execução
Docker_Host_info:
Contêineres: Verdadeiro
Registro: Docker_info
- Nome: Pare de todos os contêineres em execução
Docker_container:
Nome: 'item.Nomes [0] | regex_replace ("^/", "") '
Estado: parou
Loop: 'Docker_info.containers '

Para salvar o Stop_all_Container.Yaml Arquivo, pressione + X seguido pela Y e .

Aqui, eu defini 2 tarefas.

A primeira tarefa usa o Ansible Docker_Host_info módulo para obter uma lista de todos os recipientes do Docker em execução e o armazena no Docker_info variável.

A segunda tarefa faz um loop através do Docker_info.containers Array encontra os nomes de contêineres do Docker em execução e os impede um por um.

Agora, execute o Stop_all_Container.Yaml Manual com o seguinte comando:

$ ANSIBLE-PLAYBOOK Playbooks/Stop_all_container.Yaml

O manual deve funcionar com sucesso, como você pode ver na captura de tela abaixo.

Como você pode ver, não há recipientes de docker em execução no meu host do Docker remoto.

$ docker ps

Você pode listar todos os contêineres do Docker (em execução, pausaram, pararam) com o seguinte comando:

$ docker ps -tudo

Como você pode ver, os contêineres do Docker parado servidor1, Server2, e servidor3 estão listadas.

Pare todos os recipientes do Docker executando uma imagem específica:

Se você quiser parar todos os recipientes do Docker executando uma imagem específica do Docker, esta seção é para você.

Primeiro, vamos criar alguns contêineres dummy Docker.

Vou criar 2 contêineres do Docker (nginx1 e nginx2) usando o Nginx Imagem do docker e 2 recipientes do Docker (http1 e http2) usando o httpd Imagem do Docker para a demonstração.

Para criar o nginx1 Contêiner do Docker usando o Nginx Imagem do Docker, execute o seguinte comando:

$ docker run -d -p 8081: 80 -Nginx1 nginx

Para criar o nginx2 Contêiner do Docker usando o Nginx Imagem do Docker, execute o seguinte comando:

$ Docker Run -d -p 8082: 80 -Nginx2 nginx Nginx

Para criar o http1 Contêiner do Docker usando o httpd Imagem do Docker, execute o seguinte comando:

$ Docker Run -d -p 8091: 80 -Nome http1 httpd

Para criar o http2 Contêiner do Docker usando o httpd Imagem do Docker, execute o seguinte comando:

$ Docker Run -d -p 8092: 80 -Nome Http2 Httpd

Como você pode ver, o nginx1, nginx2, http1, e http2 Os contêineres do Docker estão em execução no meu host do Docker remoto.

Para parar todos os recipientes do Docker, executando uma imagem específica do Docker (vamos dizer, nginx), crie um novo manual do Docker Stop_all_Image_Containers.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/stop_all_image_containers.Yaml

Agora, digite as seguintes linhas no Stop_all_Image_Containers.Yaml arquivo.

- Hosts: Docker
Usuário: Ansible
tarefas:
- Nome: Obtenha uma lista de todos os contêineres em execução
Docker_Host_info:
Contêineres: Verdadeiro
Registro: Docker_info
- Nome: Pare todos os recipientes que executam a imagem nginx
Docker_container:
Nome: 'item.Nomes [0] | regex_replace ("^/", "") '
Estado: parou
Quando: item.Imagem == 'nginx'
Loop: 'Docker_info.containers '

Depois de terminar, pressione + X seguido pela Y e Para salvar o Stop_all_Image_Containers.Yaml arquivo.

Aqui, eu adicionei 2 tarefas.

A primeira tarefa usa o Ansible Docker_Host_info módulo para obter uma lista de todos os recipientes do Docker em execução e o armazena no Docker_info variável.

A segunda tarefa faz um loop através do Docker_info.containers Array encontra os nomes de contêineres do Docker em execução e executa o Docker_Container módulo para cada contêiner em execução somente se o nome da imagem do contêiner for Nginx. Em seguida, ele para os recipientes de docker correspondentes.

Na segunda tarefa, a linha a seguir é usada para verificar se o contêiner do docker está executando o Nginx imagem. Você pode alterá -lo para um nome de imagem do Docker diferente se quiser.

Agora, execute o Stop_all_Image_Containers.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/stop_all_image_containers.Yaml

Como você pode ver, apenas o Nginx containers (nginx1 e nginx2) são modificados (parados). O httpd containers (http1 e http2) são ignorados.

Como você pode ver, não Nginx Os contêineres do Docker estão em execução no meu host do Docker remoto. Apenas o httpd Docker Rececters (http1 e http2) está correndo.

$ docker ps

Você pode listar todos os contêineres do Docker (em execução, pausaram, pararam) com o seguinte comando:

$ docker ps -tudo

Como você pode ver, os contêineres do Docker parado nginx1 e nginx2 estão listadas.

Conclusão:

Neste artigo, mostrei como parar um contêiner em execução, todos os recipientes do Docker executando uma imagem específica do Docker e todos os recipientes do Docker em execução do seu host Docker. Para fazer isso, eu usei o Ansible Docker_Container e Docker_Host_info módulos neste artigo.

Para saber mais sobre esses módulos, visite as seguintes páginas de documentação oficial Ansible.

[1] Docker_Container - Gerenciar recipientes do docker
[2] Docker_Host_info - Recupera fatos sobre o host do Docker e listas de objetos dos serviços