Notas do lab do 7º Docker
Aniversário do Docker
Este ano por conta da quarentena (COVID-19), não houve a comemoração presencial em muitos lugares, onde há palestras e bolo, afinal é um aniversário. No site comemorativo era possível fazer sete atividades em formato de lab para entender melhor a ferramenta Docker.
A seguir as notas sobre as atividades propostas nos hands-on labs.
Hands-on lab: de forma grosseira quando é oferecido uma ferramenta praticamente configurada sem precisar instalar o software no nosso computador, necessitando apenas do browser com acesso a Internet.
Formatação
Nos comandos do Docker, foi possível passar o parâmetro --format '{{json .}}' | jq
para conseguir exibir a saída da informação em formato JSON. O | jq
serve para embelezar a saída com novas linhas e tabulações.
Para ter uma noção do que passar para o parâmetro, use o modelo Golang de formatação (em inglês) como referência para montar a saída.
Alguns exemplos de formatação (são as respostas de algumas das atividades propostas no lab de aniversário):
Tabela:
'table {{.CPUPerc}}\t{{.MemPerc}}'
Uso de iteradores:
docker container inspect --format '{{range .Config.Env}}{{with split . "="}}{{if eq (index . 0)"PATH"}}{{with split ( index . 1 ) ":"}}{{range .}}{{printf "%s\n" .}}{{end}}{{end}}{{end}}{{end}}{{end}}' $(docker container ls -lq)
Quando utilizado iteradores, a quantidade de {{end}}
não agrada muito, mas funciona.
Criação de contexto
No Docker 18.09 é possível usar a variável de ambiente DOCKER_HOST
para conectar em uma instância docker por SSH (conexão tcp ou sock). Novas versões como a 19.03 suporta criação de contexto para poder configurar qual contexto será utilizado de forma simples.
Volume para dentro do container
Para persistir os dados são utilizados os volumes. Quando referimos a Linux, uma referência para arquivo pode ser qualquer coisa, como uma conexão para o Docker.
/var/run/docker.sock:/var/run/docker.sock
Existem outros exemplos que podem compartilhar som e a interface gráfica X11.
O exemplo acima para expor a conexão do Docker para dentro do container está relacionado ao Jenkins para não precisar criar um ambiente Docker on Docker.
Root
-
Não utilizar portas aleatoriamente, algumas tem regras, como no Linux portas menores que 1024 são reservadas ao sistema e o usuário root.
-
Para executar o container com o usuário root, após ter mudado o usuário padrão:
docker exec --user root
Rede
Quando iniciamos um container é possível anexar na mesma rede de outro container somente utilizando a referência do que está sendo executado, o comando a seguir inicia um alpine
na mesma rede do container container:broken
.
docker container run -it --network container:broken alpine
Copy-pasta dos hands-on labs
Segue o modo que foi criado os arquivos Dockerfile, copy-pasta na linha de comando pra não sofrer tentando fechar o vi:
cat >Dockerfile <<EOF
FROM foo
WORKDIR /bar
ENTRYPOINT ['./baz']
EOF