31.01.2026

kaniko: compilação de imagens Docker sem Docker no Kubernetes e CI/CD

kaniko é uma ferramenta que constrói imagens de contêiner a partir de um Dockerfile sem se conectar ao Docker Engine. Ela é executada dentro de um contêiner ou de um cluster Kubernetes e é especialmente útil em ambientes onde a execução do Docker é insegura, impossível ou indesejada.

O projeto é mantido pela comunidade e evolui como um fork oficial após o arquivamento do repositório original do Google. A versão atual é mantida no repositório da Chainguard.

Para que serve o kaniko

A construção tradicional de imagens Docker pressupõe acesso ao daemon Docker (dockerd). Isso gera uma série de problemas:

O kaniko resolve esses problemas, pois:

Na prática, o kaniko lê o Dockerfile, executa as instruções passo a passo e envia a imagem final diretamente para o registry.

Onde e como o kaniko é utilizado

1. Pipelines de CI/CD

O kaniko é frequentemente utilizado em:

Ele é ideal para a construção de imagens em runners compartilhados sem a necessidade de modo privilegiado.

2. Clusters Kubernetes

O kaniko pode ser executado como:

Isso é conveniente quando todo o processo de deploy já acontece no Kubernetes.

3. Requisitos elevados de segurança

Em ambientes com políticas de segurança rigorosas (bancos, projetos enterprise), o kaniko permite construir imagens sem acesso ao sistema host.

Como o kaniko funciona

De forma simplificada, o processo é o seguinte:

  1. o kaniko é iniciado dentro de um contêiner
  2. lê o Dockerfile
  3. executa as instruções (FROM, RUN, COPY, etc.)
  4. cria as camadas da imagem em um sistema de arquivos temporário
  5. envia o resultado para um container registry

O daemon Docker não é utilizado em nenhum momento.

Instalação e execução do kaniko

Execução básica via Docker

docker run \
-v $(pwd):/workspace \
-v ~/.docker/config.json:/kaniko/.docker/config.json:ro \
gcr.io/kaniko-project/executor:latest \
--dockerfile=Dockerfile \
--context=/workspace \
--destination=registry.example.com/my-image:latest

Execução do kaniko no Kubernetes

apiVersion: batch/v1
kind: Job
metadata:
name: build-image-kaniko
labels:
app: kaniko-builder
spec:
backoffLimit: 1
template:
metadata:
labels:
app: kaniko-builder
spec:
restartPolicy: Never
containers:
- name: executor
image: gcr.io/kaniko-project/executor:latest
args:
- "--dockerfile=/workspace/Dockerfile"
- "--context=git://github.com/example-org/sample-app.git#refs/heads/main"
- "--destination=registry.example.com/sample-app:1.0.0"
- "--cache=true"
- "--cache-repo=registry.example.com/kaniko-cache"
volumeMounts:
- name: docker-auth
mountPath: /kaniko/.docker
volumes:
- name: docker-auth
secret:
secretName: registry-docker-config

Parâmetros mais utilizados

Parâmetro Descrição
--dockerfile Caminho para o Dockerfile utilizado na construção da imagem.
--context Contexto de build: diretório local ou repositório Git.
--destination Endereço do container registry e a tag da imagem final.
--no-push Constrói a imagem sem enviá-la (push) para o registry.
--cache Ativa o cache de camadas para acelerar builds repetidos.
--cache-repo Registry onde as camadas em cache são armazenadas.
--snapshotMode Modo de criação das camadas do sistema de arquivos (por exemplo, time ou redo).
--verbosity Nível de log do kaniko (debug, info, warn).
--build-arg Passagem de argumentos de build para o Dockerfile.

Cache de builds

O kaniko oferece suporte a cache de camadas, o que acelera builds subsequentes:

--cache=true \ --cache-repo=registry.example.com/kaniko-cache

Importante: o cache é armazenado no registry, e não localmente.

Limitações do kaniko

É importante considerar:

FAQ

Conclusão

kaniko é uma ferramenta prática e segura para a construção de imagens de contêiner em infraestruturas modernas. Ela é especialmente adequada para clusters Kubernetes e pipelines de CI/CD onde o uso do daemon Docker é proibido ou indesejado.

Se você precisa construir imagens de contêiner:

o kaniko é uma das opções mais confiáveis disponíveis atualmente.