Arquitetura do Docker
Conversando com o daemon
~15 minComprovar que o CLI é apenas um cliente da REST API e enxergar a cadeia dockerd → containerd → shim → processo.
Informações do daemon:
terminaldocker info --format 'Server {{.ServerVersion}} | Storage {{.Driver}} | Cgroup v{{.CgroupVersion}} | Logging {{.LoggingDriver}}'Uso de disco por tipo de objeto:
terminaldocker system dfChame a REST API diretamente pelo socket, sem o CLI:
terminalcurl -s --unix-socket /var/run/docker.sock http://localhost/version | python3 -m json.tool | head -12Agora a lista de imagens:
terminalcurl -s --unix-socket /var/run/docker.sock http://localhost/images/json | python3 -m json.tool | grep -m5 RepoTags -A1Acompanhe os eventos que o daemon emite enquanto um container nasce e morre. Primeiro, dispare o escutador de eventos em segundo plano:
terminaltimeout 8 docker events --format '{{.Type}} {{.Action}} {{.Actor.Attributes.name}}' &Depois, num mesmo terminal, dispare o evento e aguarde o escutador terminar:
terminalsleep 1; docker run --rm --name evento alpine:3.22 echo "olá"; waitSuba um container de teste que fica rodando em segundo plano:
terminaldocker run -d --name arq alpine:3.22 sleep 3600Veja a cadeia de processos no host onde o Docker roda. O comando abre um container que enxerga os processos do host (
--pid=host) e mostra a árvore com opsdo Linux, então funciona igual no Codespaces, no Linux e no Docker Desktop (Mac/Windows):terminaldocker run --rm --pid=host alpine:3.22 sh -c "apk add -q procps && ps -e -o pid,ppid,args --forest" | grep -E 'dockerd|containerd|shim|sleep 3600' | grep -v grepPor que não direto no terminal do Mac?O
psdo macOS não tem a opção--foreste, no Docker Desktop, o dockerd roda dentro de uma VM Linux, invisível para o macOS. No Codespaces (Linux) também dá para rodar direto:ps -ef --forest | grep -E 'dockerd|containerd|shim|sleep 3600' | grep -v grep.Remova o container de teste:
terminaldocker rm -f arq
Logging json-file: o driver de log padrão (visto no tópico 2.5).- A API responde JSON com a mesma versão do
docker version. - Os eventos mostram
container create,start,dieedestroy. - O
ps --forestmostracontainerd-shim-runc-v2como pai dosleep.
- O
dockeré só um cliente da REST API do daemon: dá para falar com o socket direto. - Por baixo, a cadeia é dockerd → containerd → shim → processo do container.
- Os eventos (
create,start,die,destroy) mostram o ciclo de vida que as ferramentas de monitoramento consomem.