Ansible

Como parar todos os contêineres do Docker usando o Ansible

Como parar todos os contêineres do Docker usando o Ansible
Ansible tem muitos módulos para automatizar seu host Docker, contêineres, volumes, redes, etc. Se quiser interromper a execução de contêineres do Docker, você também pode fazer isso.

Neste artigo, vou mostrar como parar um contêiner Docker específico. Também vou mostrar como parar todos os contêineres do Docker em execução ou todos os contêineres do Docker que executam uma imagem específica do Docker usando o 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 Docker instalado em seu computador ou um host Ubuntu remoto.
3) Você deve ter a biblioteca Docker Python instalada em seu host Docker.
4) Você deve configurar o host Docker para automação Ansible.

NOTA: Host Docker é o computador onde você instalou o Docker.

Existem muitos artigos no LinuxHint dedicados à instalação do Ansible e configuração de hosts para automação do Ansible e instalação do Docker. Você pode verificá-los se necessário.

Criando um diretório de projeto:

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

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

$ mkdir -pv docker1 / playbooks

Agora, navegue até o docker1 / diretório do projeto da seguinte forma:

$ cd docker1 /

Configurando o Ansible para automação de host Docker remoto:

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

Primeiro, crie um arquivo de inventário Ansible hospedeiros com o seguinte comando:

hosts $ nano

Agora, adicione o endereço IP ou nome DNS do seu host Docker no hospedeiros arquivo de inventário como segue.

[docker]
vm4.nodekite.com

No meu caso, o nome DNS do meu host Ubuntu Docker é vm4.nodekite.com. Será diferente para você. Portanto, certifique-se de substituí-lo conforme necessário.

Assim que terminar, pressione + X seguido pela Y e para salvar o hospedeiros 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

Assim que terminar, pressione + X seguido pela Y e para salvar o ansible.cfg Arquivo.

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

$ ansible all -u ansible -m ping

Como você pode ver, posso executar ping no meu host Docker remoto.

Como você pode ver, tenho o Docker 19.03.11 instalado em meu host Ubuntu Docker remoto.

Agora, você deve ter a biblioteca Docker Python instalada em seu host Docker remoto para que os módulos docker Ansible funcionem. Neste artigo, estou usando o Ubuntu. Então, isso é o que vou cobrir.

Para instalar a biblioteca Docker do Python em seu host Docker remoto (Ubuntu), crie um novo manual do Ansible install_docker_python_lib.yaml no manuais / diretório da seguinte forma:

$ 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: Certifique-se de que o pacote python3-docker esteja instalado
apt:
nome: python3-docker
estado: presente
update_cache: True

Assim que 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 forma:

$ ansible-playbook playbooks / install_docker_python_lib.yaml

O manual deve ser executado com êxito e instalará a biblioteca Python Docker em seu host Docker remoto.

Configurando Ansible para automação de host Docker local:

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

Primeiro, crie um novo manual do Ansible install_docker_python_lib.yaml no manuais / diretório da seguinte forma:

$ nano playbooks / install_docker_python_lib.yaml

Agora, digite as seguintes linhas no install_docker_python_lib.yaml Arquivo.

- hosts: localhost
conexão: local
usuário: shovon
tornar verdade
tarefas:
- nome: Certifique-se de que o pacote python3-docker esteja instalado
apt:
nome: python3-docker
estado: presente
update_cache: True

Aqui a linha usuário: shovon conjuntos como o usuário que executará as tarefas. Será diferente para você. Portanto, certifique-se de alterá-lo para o seu nome de usuário de login.

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

$ whoami

Assim que 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 forma:

$ ansible-playbook --ask-pass --ask-Become-pass
playbooks / install_docker_python_lib.yaml

Ansible irá pedir-lhe a senha de login do usuário que você especificou no manual. Digite a senha de login e pressione .

O Ansible também pedirá a senha BECOME / sudo. Deve ser a mesma senha da sua senha de login. Então, deixe em branco e pressione .

O manual deve começar a funcionar. Pode demorar um pouco para ser concluído.

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

Fazendo os ajustes necessários nos manuais:

Dependendo se você está gerenciando contêineres Docker em seu host Docker local ou em um host Docker remoto, você precisa ajustar seus playbooks de acordo.

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

- hosts: docker
usuário: ansible
tarefas:

Se você deseja executar os manuais em seu host Docker local, certifique-se de que os manuais comecem com as seguintes linhas.

- hosts: localhost
conexão: local
usuário: shovon
tornar verdade
tarefas:

Então, substitua com as tarefas que você deseja executar e salve o manual pressionando + X seguido pela Y e .

Você também precisa executar os manuais do Ansible de maneira um pouco diferente se for gerenciar um host Docker localmente usando o Ansible.

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

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

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

Parando um contêiner do Docker:

Se você tiver um contêiner do Docker em execução e souber a ID ou o nome do contêiner do Docker, poderá facilmente interromper esse contêiner do Docker usando o Ansible.

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

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

$ docker run -p 8080: 80 -d --name http_server1 nginx

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

$ docker ps

Para parar o contêiner do Docker http_server1 usando o Ansible, crie um novo manual stop_container.yaml no manuais / diretório da seguinte forma:

$ 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: parado

Assim que terminar, pressione + X seguido pela Y e para salvar o stop_container.yaml Arquivo.

Aqui, o Ansible docker_container módulo é usado para parar o contêiner 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 em execução no meu host Docker remoto.

$ docker ps

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

$ docker ps --all

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

Interrompendo todos os contêineres do Docker em execução:

Se você deseja interromper todos os contêineres Docker em execução em seu host Docker usando Ansible, esta seção é para você.

Primeiro, vou criar 3 contêineres Docker (servidor1, servidor2, e server3) para que eu possa impedi-los usando o Ansible mais tarde.

Para criar o servidor1 Contêiner do Docker, execute o seguinte comando:

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

Para criar o servidor2 Contêiner do Docker, execute o seguinte comando:

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

Para criar o server3 Contêiner do Docker, execute o seguinte comando:

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

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

$ docker ps

Para interromper todos os contêineres do Docker, crie um novo manual stop_all_container.yaml na tua manuais / diretório da seguinte forma:

$ nano playbooks / stop_all_container.yaml

Agora, digite as seguintes linhas no stop_all_container.yaml arquivo de manual.

- hosts: docker
usuário: ansible
tarefas:
- nome: obtenha uma lista de todos os contêineres em execução
docker_host_info:
recipientes: Verdadeiro
registrar: docker_info
- nome: para todos os contêineres em execução
docker_container:
nome: 'item.Nomes [0] | regex_replace ("^ /", "") '
estado: parado
loop: 'docker_info.recipientes '

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 contêineres do Docker em execução e armazená-la no docker_info variável.

A segunda tarefa percorre o docker_info.recipientes array encontra os nomes dos contêineres do Docker em execução e os interrompe 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 ser executado com sucesso, como você pode ver na imagem abaixo.

Como você pode ver, não há contêineres Docker em execução no meu host Docker remoto.

$ docker ps

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

$ docker ps --all

Como você pode ver, os contêineres Docker parados servidor1, servidor2, e servidor3 estão listadas.

Interrompa todos os contêineres do Docker que executam uma imagem específica:

Se você deseja interromper todos os contêineres do Docker que executam uma imagem específica do Docker, esta seção é para você.

Primeiro, vamos criar alguns contêineres Docker fictícios.

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

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

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

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

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

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

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

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

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

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

Para parar todos os contêineres Docker executando uma imagem Docker específica (digamos, nginx), crie um novo manual do Docker stop_all_image_containers.yaml no manuais / diretório da seguinte forma:

$ 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:
recipientes: Verdadeiro
registrar: docker_info
- nome: interrompe todos os contêineres que executam imagem nginx
docker_container:
nome: 'item.Nomes [0] | regex_replace ("^ /", "") '
estado: parado
quando: item.Imagem == 'nginx'
loop: 'docker_info.recipientes '

Assim que terminar, pressione + X seguido pela Y e para salvar o stop_all_image_containers.yaml Arquivo.

Aqui, adicionei 2 tarefas.

A primeira tarefa usa o Ansible docker_host_info módulo para obter uma lista de todos os contêineres do Docker em execução e armazená-la no docker_info variável.

A segunda tarefa percorre o docker_info.recipientes array encontra os nomes dos contêineres do Docker em execução e executa o docker_container módulo para cada contêiner em execução apenas se o nome da imagem do contêiner for Nginx. Em seguida, ele interrompe os contêineres Docker correspondentes.

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

Agora, execute o stop_all_image_containers.yaml manual da seguinte forma:

$ ansible-playbook playbooks / stop_all_image_containers.yaml

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

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

$ docker ps

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

$ docker ps --all

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

Conclusão:

Neste artigo, mostrei como parar um contêiner Docker em execução, todos os contêineres Docker executando uma imagem Docker específica e todos os contêineres Docker em execução de seu host Docker. Para fazer isso, 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 da Ansible.

[1] docker_container - Gerenciar contêineres docker
[2] docker_host_info - Recupera fatos sobre o docker host e listas de objetos dos serviços

O botão do meio do mouse não funciona no Windows 10
O botão do meio do mouse ajuda você a percorrer longas páginas da web e telas com muitos dados. Se isso parar, você vai acabar usando o teclado para r...
Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...
Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...