Что такое BuildKit?

«Что такое BuildKit?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

BuildKit — это современный, высокопроизводительный бэкенд для сборки Docker-образов, который заменил старый «legacy builder». Он включен по умолчанию в Docker Engine начиная с версии 23.0.

Ключевые преимущества для DevOps-инженеров:

  • Параллельная сборка: Независимые инструкции RUN и этапы (stage) выполняются параллельно, что значительно ускоряет сборку.
  • Улучшенное кэширование: Кэш работает на уровне графа зависимостей (LLB), а не просто по хешу строки инструкции. Это позволяет переиспользовать кэш даже при изменении порядка команд или промежуточных файлов.
  • Секреты (Secrets): Безопасная передача секретов (пароли, токены) во время сборки без сохранения их в финальном образе или истории слоев.
    # syntax=docker/dockerfile:1
    FROM alpine
    RUN --mount=type=secret,id=mysecret,target=/run/secrets/mysecret 
        export API_KEY=$(cat /run/secrets/mysecret) && 
        ./configure-script.sh
  • Монтирование контекста (Mount): Позволяет монтировать каталоги (например, кэш пакетов) только на этап сборки, не увеличивая размер образа.
    RUN --mount=type=cache,target=/root/.cache/pip 
        pip install -r requirements.txt
  • Расширяемость: Поддержка внешних frontend-ов (например, для сборки из файлов docker-compose.yml).

Активация и использование:

# Убедиться, что BuildKit включен (по умолчанию в новых версиях)
export DOCKER_BUILDKIT=1
# Сборка с использованием новых функций
docker build --secret id=mysecret,src=./api_key.txt -t myapp:latest .
# Просмотр деталей сборки в формате
docker build --progress=plain .

BuildKit — это стандарт для эффективной и безопасной сборки образов в современных CI/CD-пайплайнах.