O Que É uma Imagem Distroless? Containers Sem um SO
Uma imagem distroless entrega apenas sua aplicação e suas dependências de runtime - sem shell, sem gerenciador de pacotes, sem userland de SO de propósito geral.
A maioria das base images inclui um userland Linux completo: um shell, um gerenciador de pacotes, coreutils. Uma imagem distroless joga tudo isso fora e mantém apenas o que sua aplicação precisa para rodar. O retorno é uma imagem menor e mais segura; o custo é que você perde as ferramentas de debugging familiares dentro do container.
O que é removido
- Sem shell (
/bin/sh,bash). - Sem gerenciador de pacotes (
apt,apk). - Sem coreutils ou binários de propósito geral.
- Apenas sua aplicação, seu runtime e bibliotecas de suporte mínimas.
Por que é mais segura
Uma imagem menor tem menos pacotes e, portanto, menos CVEs. E sem shell, um passo comum de pós-exploração - abrir um shell dentro do container - simplesmente não tem com o que trabalhar.
O trade-off do debugging
Você não pode fazer docker exec em um container distroless e vasculhar por aí, porque não há shell. Em vez disso, você debuga com logs, um container de debug efêmero, ou variantes distroless :debug que re-adicionam um shell apenas quando necessário.
Combina naturalmente com multi-stage builds
Distroless brilha como o stage final de um multi-stage build: compile em um stage de toolchain completo, depois faça COPY --from do binário para um stage final distroless.
Distroless em CI/CD
Pipelines de CI constroem imagens distroless para entregar artifacts enxutos e limpos em scan para produção. Como a imagem final é minúscula, ela faz push e pull rápido - e em runners gerenciados o pesado stage builder permanece cacheado entre builds.
Principais conclusões
- Imagens distroless contêm apenas sua aplicação e runtime - sem shell ou gerenciador de pacotes.
- Menos pacotes significam menos vulnerabilidades e uma superfície de ataque menor.
- Você troca o debugging dentro do container por segurança; combine com multi-stage builds.