Voltar

Docker é estranho: o que há por trás de um container runtime

Aprofundamento CEVIU

Aprofundamento

O texto parte de um experimento: o autor está escrevendo o próprio container runtime e conta o que descobriu sobre o Docker. A tese central é que container não é um recurso único do Linux. Segundo ele, são 5 recursos do kernel combinados. Namespaces escondem o que host e container enxergam, cgroups limitam o uso de recursos, e há uma camada de rede para isolar o container. O processo continua rodando no kernel do host e dá para encontrá-lo em /proc, o que difere de uma VM.

As imagens, na descrição dele, são pastas que o Docker usa como novo diretório raiz do processo, via chroot (ou pivot_root). O ponto mais técnico é o runc, escrito em Go. O runtime multithread do Go complica syscalls que precisam de ambiente single-thread, então o runc tem um módulo em C que roda antes da inicialização do runtime do Go. Go também não tem fork, e o runc contorna isso executando /proc/self/exe com um argumento especial que marca o processo como filho. Por fim, muitas APIs do kernel exigiam root, por isso o daemon costuma rodar como root. Em runtimes rootless, a rede parece exigir reimplementar a pilha em userspace.

O que mudou

A cobertura anterior toca o mesmo tema, mas sem um fato novo que evolua. Em 9 de março de 2026, o CEVIU noticiou "Uma Década de Contêineres Docker", citando namespaces Linux e imagens em camadas como base do Docker. Em 8 de maio de 2026, em "O Que É um Container Padrão: Aprofundando na Especificação de Runtime da OCI", o foco foi a padronização do runtime. O texto de agora desce um nível e mostra como esses conceitos aparecem na prática ao implementar um runtime.

Por que isso importa

Para quem usa Docker no dia a dia, a leitura é que entender o que está embaixo ajuda a depurar. Saber que container é processo com restrições explica por que ele aparece no host e por que segurança depende do daemon e de privilégios. Para quem pensa em rootless, vale esperar trabalho extra na rede.

Linha do tempo

  1. CEVIU noticia "Uma Década de Contêineres Docker", sobre namespaces e imagens em camadas.

  2. CEVIU publica sobre a especificação de runtime da OCI.

  3. Texto desmonta o Docker ao construir um container runtime do zero, com foco em runc, Go e rede rootless.

Perguntas frequentes

Container é uma máquina virtual?

Não. Segundo o texto, containers são processos comuns com restrições especiais. O kernel do host continua executando esse processo, e é possível encontrá-lo em /proc.

Quais recursos do Linux formam um container?

O autor fala em 5 recursos do kernel combinados. Entre eles estão namespaces, que limitam o que se enxerga, e cgroups, que limitam recursos. Há ainda mecanismos de isolamento de rede e de filesystem, via chroot ou pivot_root.

Por que o runc usa um módulo em C?

Muitas syscalls que o runtime precisa fazer exigem ambiente single-thread, e o runtime do Go é multithread. Por isso o runc tem um módulo em C que roda antes da inicialização do runtime do Go.

Por que a rede é difícil em containers rootless?

Segundo o autor, um runtime rootless parece precisar reimplementar toda a pilha de rede em userspace para oferecer os mesmos recursos. Isso é o que torna a rede a grande exceção na melhora recente sobre privilégios.

Fontes

Avalie este artigo:
Categoria
CEVIU Web Dev
Publicado
23 de outubro de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser