Docker - Obtendo o Shell (bash) do contêiner


 Neste artigo veremos como podemos obter o Shell(bash) de um contêiner 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.

Você sabe o que Shell (bash) ?

O intérprete de comandos é a interface entre o usuário e o sistema operacional e é por esta razão que seu nome em inglês é shell (concha):

Existem vários tipos de Shell, sendo os mais comuns o sh (chamado Bourne shell), o bash (Bourne again shell), o csh (C Shell), o Tcsh (Tenex C shell), o ksh (Korn shell) e o zsh (Zero shell).

Nota: O bash é um interpretador de comandos, um entre os diversos tradutores entre o usuário e o sistema operacional conhecidos como shell.

Outro conceito importante são as entradas e saídas padrão.

Durante a execução de um comando, é criado um processo que abrirá três fluxos:

  1. stdin  - entrada padrão - o stdin se refere ao teclado e é identificado pelo número 0;
  2. stdout - saída padrão - o stdout se refere à tela e é identificado pelo número 1;
  3. stderr - erro padrão - o stderr se refere à tela e é identificado pelo número 2:

Com isso posto, vamos ao que interessa

Recursos usados:

Obtendo o Shell(bash) do Contêiner

Podemos obter o shell na criação do contêiner usando as opções -i e -t  onde:

Como exemplo vou criar um contêiner usando a imagem oficial do alpine obtida a partir do docker hub e entrar no modo Shell diretamente quando o contêiner for criado usando as opções -it.

docker container run --name alp1 -it alpine

O comando docker container run criar o contêiner chamado alp1 usando a imagem do alpine e entra no modo iterativo via acessando o bash do alpine.

Para provar isso emitimos um comando ls -g e a seguir para sair do contêiner digitamos exit.

Mas e se o contêiner ja foi criado e não esta em execução, como entrar no contêiner e acessar o bash para emitir comandos ?

Para fazer isso primeiro temos que iniciar o contêiner usando o comando docker container start e a seguir temos duas opções :

  1. Usar o comando docker container attach
  2. Usar o comando docker container exec

Vejamos cada uma delas...

1- Usando o comando docker container attach

Este comando anexa os fluxos de entrada(stdin), saida(stdout) e erro(stderr) padrão locais a um contêiner em execução usando o nome ou o ID do contâiner.

Enquanto um cliente está conectado ao stdio do contêiner usando o comando docker container attach, o Docker usa um buffer de memória de mais o menos 1 MB para maximizar a taxa de transferência do aplicativo. Se esse buffer for preenchido, a velocidade da conexão da API começará a afetar a velocidade de gravação da saída do processo.

No exemplo anterior criamos o contêiner alp1 usando a imagem do alpine. Vamos usar este contêiner.

Nota: Para esta imagem do Alpine o bash é definido por : /bin/sh

Primeiro vamos verificar qual o status do contêiner.

Para isso digite o comando:  docker container ps -a

Vemos que o contêiner não esta em execução pois em STATUS temos a mensagem : Exited(0) 10 minutes ago

Outra informação importante é qual o comando que foi executado na criação do contêiner. Para o nosso contêiner o comando executado foi : /bin/sh

Para poder usar o comando docker container attach primeiro temos que iniciar o contêiner usando o comando docker container start alp1

No exemplo acima temos que :

2- Usando o comando docker container exec

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 usar o mesmo contêiner criado neste artigo usando a imagem do alpine.

Estando o contêiner em execução podemos digita o seguinte comando:

docker container exec -it alp1 /bin/sh

Primeiro iniciamos o contêiner e a seguir emitimos o comando para executar o /bin/sh no modo iterativo.

Assim entramos no contêiner usando o bash e emitimos os comandos: ls , touch teste.txt e ls

A seguir saímos do contêiner usando o comando exit.

Vimos assim duas maneiras de obter o shell do contêiner estando ele em execução.

Aguarde mais artigos sobre Docker.

E a paz de Deus, que excede todo o entendimento, guardará os vossos corações e os vossos pensamentos em Cristo Jesus. Filipenses 4:7

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 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti