Back-End

14 mai, 2019

Docker: conectando a um container em execução

Publicidade

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:

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):

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