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
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
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: dockerusuá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
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: localhostconexã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 pá 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
Agora, execute o install_docker_python_lib.yaml manual da seguinte forma:
$ ansible-playbook --ask-pass --ask-Become-passplaybooks / 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: dockerusuá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: localhostconexão: local
usuário: shovon
tornar verdade
tarefas:
Então, substitua
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
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: dockerusuário: ansible
tarefas:
- nome: Pare o contêiner http_server1
docker_container:
nome: http_server1
estado: parado
Assim que terminar, pressione
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 --allComo 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: dockerusuá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
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 --allComo 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: dockerusuá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
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 --allComo 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