DOCKER SERIES: LAB … Comandos ( exec )
Baixado, criado, executado, parado e reexecutado … Já sabe do que estou falando? Sim, correto! Esses são os estados/operações possíveis em um container, e que até então vimos nos outros posts dessa série. Mas peraí Victor … Não está faltando nada? Acertou de novo! Eu diria que ainda resta mais um: o “famigerado” modificado/salvo
Caso queira interagir, ao mesmo tempo que passa vários comandos à nível de terminal, você pode escolher qualquer uma das seguintes opções:
docker exec -it < id_name > /bin/bash
ou
docker exec -it < id_name > bash
TODAVIA, recém-chegados (turistas) (paraquedistas) … Atenção!!! Por favor, peço que executem conforme logo abaixo:
docker run -it --rm alpine /bin/sh

E antes de explicar as novas flags (-it --rm
) cabem aqui algumas observações. Acho que a primeira delas trata do questionamento “O que é alpine?” … Bem, Alpine é uma distribuição Linux bastante sólida, enxuta e simples. A mesma utiliza as tecnologias musl, BusyBox e OpenRC … O que a torna um pouco “diferente” das demais distros que usam recursos mais tradicionais como systemd, glibc e coreutils A segunda ilustra majestosamente a principal vantagem do Docker, que é compartilhar o mesmo Kernel entre o sistema hospedeiro e eventuais “outros” containers. Se você reparou atentamente na figura anterior, viu que estou utilizando o Ubuntu com o Linux 5.19.0-23, sendo que o segundo é exatamente o mesmo quando listado pelo container alpine. Terceira (e última), apesar de enxergarmos um só kernel isso não significa que todo o resto também é homogêneo. Falo principalmente dos usuários e sistemas de arquivos. Por exemplo, no primeiro (host) temos o meu usuário padrão chamado vicrlda, enquanto no segundo (container) temos o usuário root. Outro fato interessante é que no anfitrião estamos na pasta HOME, verificado através do comando pwd. Já no convidado nos encontramos na raiz, identificada por meio do barra ( / ).
Certo, e as flags -it e –rm ??? Bom, a letra “i” refere-se ao modo interativo. Ou seja, mantém a entrada padrão (o nome técnico é STDIN) aberta mesmo se não houver dados. A letra “t” faz alusão a um pseudo-terminal, ou pseudo-TTY. Por fim, as letras “r” e “m” significam limpar absolutamente tudo. Tanto o container quanto seu filesystem serão excluídos após a execução ou parada. Para comprovar o que estou falando você pode rodar o comando docker ps
ou docker ps -a
Caso essa seja a sua primeira vez, o esperado é que não apareça nada!

Ok Victor. E o EXEC lá do início? Para que serve? Bom, o mesmo serve para acessar o terminal de containers em estado UP … Ou seja, que estão executando. Vamos a outro exemplo. Para isso antes é precisamos criar um novo.
Baixe/atualize a imagem do Alpine Linux:
docker pull alpine

Simule uma pausa na sessão do mesmo por dez minutos:
docker run alpine sleep 10m

Abra um novo terminal, mas não feche o anterior, e execute o seguinte:
docker ps

docker exec -it 59444e7e9581 sh

Curtiu? Salva e compartilha com os amigos 😉
REFERÊNCIAS:
https://stackoverflow.com/questions/35689628/starting-a-shell-in-the-docker-alpine-container
https://www.freecodecamp.org/news/docker-101-fundamentals-and-practice-edb047b71a51/