Docker - Executando comandos em um contêiner em execução


 Neste artigo veremos como podemos executar comandos em contêineres em execução.

Para este artigo eu estou usando o seguinte ambiente:

Você também pode acompanhar o artigo usando o Docker instalado no Windows 10.

Se você ainda não conhece o Docker veja a série de artigos : Docker uma introdução básica

Neste artigo vamos usar o modo cliente do Docker emitindo os comandos a partir de um terminal que serão executados pelo Docker Daemon.

Vamos lá...

Recursos usados:

Executando comandos em Contêineres em execução

A partir do Docker Engine 1.3 (2014) foi introduzido o comando  docker exec que permite executar comandos em um contêiner em execução.

Assim o primeiro requisito para usar este recurso é que o contêiner tem que estar em execução. Dessa forma se o contêiner estiver parado ou pausado o comando docker exec vai falhar.

Vamos iniciar criando um contêiner a partir de uma imagem existente que será obtida a partir do Docker Hub

Vamos usar a imagem oficial do alpine  que é uma imagem Docker mínima do Alpine Linux com somente 5 MB de tamanho.

docker container run --name alp1 -it -d alpine /bin/sh

Criamos um contêiner a partir da imagem alpine com o nome alp1 executado sem segundo plano e iniciamos uma sessão bash usando o comando /bin/sh.

A seguir emitimos o comando docker container ps para exibir os contêineres em execução. Vemos que o container alp1 criado esta em execução.

Vamos então executar alguns comandos neste contêiner:

1- Listando as pastas do contêiner

docker container exec alp1 ls -g

2- Criando uma pasta dentro do contêiner

docker container exec alp1 mkdir /tmp/macoratti

Após criar a pasta emitimos o comando ls -g e vemos a pasta tmp criada.

3- Criando um arquivo em uma pasta dentro do contêiner

Vamos criar um arquivo teste.txt dentro da pasta /tmp/macoratti criada

docker container exec alp1 touch /tmp/macoratti/teste.txt

Após criar o arquivo emitimos o comando para listar os arquivos da pasta e vemos que o arquivo teste.txt é exibido.

Podemos inclusive executar mais de um comando. Para isso temos que executar o comando sh (no caso do Apline) com a flag -c e usar o operador && para concatenar os comandos que devem estar entre aspas.

Como exemplo vamos executar os comandos para entrar na pasta /tmp/macoratti e listar o seu conteúdo. Vamos emitir dois comandos:

  1. cd /tmp/macoratti
  2. ls -g

Para isso emitimos o comando:  

docker container exec alp1 sh -c 'cd /tmp/macoratti && ls -g'

Vamos agora pausar o contêiner e tentar executar um comando.

docker container pause alp1

Após pausar o contêiner emitimos um comando docker container ps e vemos o status (Paused).

Ao tentar executar um comando no contêiner obtemos a mensagem que o contêiner esta pausado.

Se você parar o contêiner usando o comando docker container stop alp1 também vai receber uma mensagem que o contêiner não esta em execução.

Para voltar a poder executar comandos no contêiner ele deve ser iniciado : docker container start alp1

Aguarde mais artigos sobre Docker.

Ó Senhor, Senhor nosso, quão admirável é o teu nome em toda a terra, pois puseste a tua glória sobre os céus!
Salmos 8:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti