Dev (Back & Front)ARTIGO

Docker: conectando a um container em execução

Neste artigo, Renato Groffe traz uma dica rápida sobre Docker, mostrando como como efetuar a conexão a um container que já está em execução.

Docker: conectando a um container em execução
Imagem: Renato Groffe

Embora muitos desconheçam essa possibilidade, o Docker oferece a função de se conectar a um container ativo via linha de comando para a execução de instruções.

Esse tipo de prática permite a realização de tarefas úteis, como monitoramento, verificação de problemas e até mesmo debugging a partir de um container.

Neste artigo, mostro como efetuar a conexão a um container que já esteja executando, fazendo uso, para isso dos seguintes itens:

  • Imagem renatogroffe/apicontagem-sdk-2–2
  • API REST criada com ASP.NET Core, disponível no meu Docker Hub
  • Ambiente de testes oferecido gratuitamente pelo site Play with Docker, o qual servirá de base para a condução dos diferentes testes descritos neste artigo.

O site Play with Docker exigirá uma conta Docker para liberação do acesso. Assim que acontecer o login, aparecerá a seguinte tela (com um período disponível para testes de 4 horas):

Ao acionar a opção + ADD NEW INSTANCE, um terminal será exibido e estará disponível para utilização:

O container empregado nos testes será criado através do seguinte comando:

bash
docker run --name testeapi -p 4444:80 -d renatogroffe/apicontagem-sdk-2–2

Com a instrução docker ps teremos a confirmação de que o container correspondente à API REST se encontra em execução:

A instrução a seguir enviará quatro requisições HTTP à API REST, com o resultado de cada solicitação aparecendo na sequência:

A conexão ao container será feita por meio do comando docker exec -it, seguido pelo ID do container (obtido via docker ps) e por uma instrução para que o bash seja carregado (ou outra ferramenta, eventualmente):

bash
docker exec -it <CONTAINER> <COMANDO ADICIONAL>

Ao chegarmos a este ponto, um alerta importante precisa ser feito: o uso indiscriminado de docker exec pode induzir muitos profissionais a proceder com instalações em um container como se estivessem em uma VM.

Isso representa uma péssima prática, uma vez que ajustes desse tipo (instalações) precisariam estar indicados no arquivo Dockerfile (a fim de serem executados durante o build de uma imagem).

A seguir, temos um exemplo deste procedimento:

Parte do ID do container (os três primeiros caracteres, por exemplo) pode ser indicada para a conexão também:

Ou ainda, o próprio nome do container:

Uma vez conectados ao container a partir do bash, poderemos executar instruções como o comando ls ou curl (enviando requisições à API REST. Neste último caso, será usada a porta 80, empregada internamente no container para a execução da aplicação Web que integra o mesmo):

Com o comando exit, encerraremos a conexão, retornando assim ao shell do host Docker:

Referências

Atua como consultor em atividades voltadas ao desenvolvimento de sistemas há mais de 15 anos. Microsoft MVP (Most Valuable Professional) e participante do programa MTAC (Multi-Plataform Technical Audience Contributor). Bacharel em Sistemas de Informação, com Especialização em Engenharia de Software e MBA em Business Intelligence. Também é palestrante e autor técnico em portais e revistas especializadas, com foco em tecnologias Microsoft e boas práticas na área de software.

Ver perfil