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:
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 :
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core - Macoratti
https://www.udemy.com/docker-essencial-para-a-plataforma-net/
Docker Essencial para a plataforma .NET - Macoratti.net
Docker - Uma introdução básica - Macoratti
ASP .NET Core - Acesso ao MySQL c/ EF Core usando o Docker
Docker Essencial para a plataforma .NET - YouTube