Buildah vs Kaniko: builds de imagem sem daemon
Escolha o Kaniko para construir imagens dentro de um container Kubernetes/CI sem um daemon Docker, otimizado para pipelines de cluster; escolha o Buildah para builds de imagem flexíveis, scriptáveis e rootless em hosts, com ou sem um Dockerfile.
Buildah e Kaniko constroem imagens OCI/Docker sem um daemon Docker, o que importa no CI e no Kubernetes, onde rodar um daemon privilegiado é indesejável. O Kaniko (do Google) foi feito para rodar como um container em um cluster e executar um Dockerfile para dar push em uma imagem. O Buildah (do projeto Podman/containers) é uma ferramenta de nível de host que constrói imagens a partir de um Dockerfile ou via comandos scriptáveis passo a passo, e suporta modo rootless.
| Buildah | Kaniko | |
|---|---|---|
| Ambiente principal | Hosts e CI (capaz de rootless) | Containers in-cluster / CI |
| Daemon | Nenhum | Nenhum |
| Entrada de build | Dockerfile ou comandos scriptados | Dockerfile |
| Rootless | Sim (bem suportado) | Roda como container, sem daemon |
| Cache | Cache de camadas, caches de mount | Cache remoto de camadas (registry) |
| Ecossistema | Ferramentas Podman / containers | Pipelines nativos do Kubernetes |
Onde cada um realmente se destaca
O Kaniko vence para CI baseado em Kubernetes: ele roda como um pod/container, não precisa de daemon nem de host privilegiado, e dá push no resultado, o que se encaixa no GitLab CI e no Tekton em um cluster. O Buildah vence em flexibilidade e builds rootless de host: você pode construir a partir de um Dockerfile ou montar uma imagem comando a comando em um script, o que é poderoso para imagens customizadas ou mínimas, e ele combina naturalmente com o Podman.
No CI
Ambos evitam o custo de segurança e setup de um daemon Docker-in-Docker. O Kaniko cacheia camadas em um registry para que builds subsequentes possam reutilizá-las entre runners. O Buildah suporta caches de camadas e de mount e execução rootless, o que é atraente em runners compartilhados. Qualquer que seja a escolha, fixe os digests das imagens base para que os builds do CI sejam reproduzíveis.
Ressalvas honestas
O Kaniko executa o Dockerfile em espaço de usuário e historicamente teve casos extremos com alguns recursos de Dockerfile e com invalidação de cache, então teste seus builds. O Buildah é focado em Linux e mais polido no ecossistema Podman; em CI não-Linux você normalmente o roda dentro de um container Linux de qualquer forma.
O veredito
Escolha o Kaniko quando você constrói imagens dentro do Kubernetes ou de CI baseado em containers e quer um construtor de Dockerfile drop-in. Escolha o Buildah para builds de host flexíveis, scriptáveis e rootless, especialmente junto do Podman.