Skip to content
Latchkey

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.

BuildahKaniko
Ambiente principalHosts e CI (capaz de rootless)Containers in-cluster / CI
DaemonNenhumNenhum
Entrada de buildDockerfile ou comandos scriptadosDockerfile
RootlessSim (bem suportado)Roda como container, sem daemon
CacheCache de camadas, caches de mountCache remoto de camadas (registry)
EcossistemaFerramentas Podman / containersPipelines 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.

Guias relacionados