31.01.2026

kaniko: сборка Docker-образов без Docker в Kubernetes и CI/CD

kaniko — утилита, которая собирает контейнерные образы по Dockerfile, не подключаясь к Docker Engine.Он работает внутри контейнера или Kubernetes-кластера и особенно полезен в средах, где запуск Docker небезопасен, невозможен или нежелателен.

Проект поддерживается сообществом и развивается как официальный форк после архивации оригинального репозитория Google. Актуальная версия поддерживается в репозитории Chainguard.

Зачем нужен kaniko

Классическая сборка Docker-образов предполагает доступ к Docker-демону (dockerd). Это создаёт ряд проблем:

kaniko решает эти проблемы, так как:

По сути, kaniko читает Dockerfile, пошагово выполняет инструкции и напрямую пушит готовый образ в registry.

Где и как используют kaniko

1. CI/CD пайплайны

kaniko часто используют в:

Он отлично подходит для сборки образов в shared-раннерах без privileged-режима.

2. Kubernetes-кластеры

kaniko можно запускать как:

Это удобно, если весь процесс деплоя уже живёт в Kubernetes.

3. Повышенные требования к безопасности

В средах с жёсткими security-политиками (банки, enterprise-проекты) kaniko позволяет собирать образы без доступа к хост-системе.

Как работает kaniko

Упрощённо процесс выглядит так:

  1. kaniko запускается в контейнере
  2. Читает Dockerfile
  3. Выполняет инструкции (FROM, RUN, COPY и т.д.)
  4. Создаёт слои образа во временной файловой системе
  5. Пушит результат в container registry

Docker-демон на этом этапе не используется вообще.

Установка и запуск kaniko

Базовый запуск через 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

Здесь:

Запуск kaniko в Kubernetes

Пример Job:

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

Часто используемые параметры

Параметр Описание
–dockerfile Путь к Dockerfile, который используется для сборки образа.
–context Контекст сборки: локальная директория или Git-репозиторий.
–destination Адрес container registry и тег итогового образа.
–no-push Собирает образ без отправки (push) в registry.
–cache Включает кэширование слоёв для ускорения повторных сборок.
–cache-repo Registry, в котором хранятся закэшированные слои образов.
–snapshotMode Режим создания слоёв файловой системы (например, time или redo).
–verbosity Уровень логирования kaniko (debug, info, warn).
–build-arg Передача build-аргументов в Dockerfile.

Кэширование сборок

kaniko поддерживает layer-cache, что ускоряет повторные сборки:

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

Важно: кэш хранится в registry, а не локально.

Ограничения kaniko

Стоит учитывать:

FAQ

Вывод

kaniko — это практичный и безопасный инструмент для сборки container-образов в современных инфраструктурах. Он особенно хорошо подходит для Kubernetes-кластеров и CI/CD-пайплайнов, где использование Docker-демона либо запрещено, либо нежелательно.

Если вам требуется собирать контейнерные образы:

kaniko — один из самых надёжных вариантов на сегодня.