BuildKit
BuildKit — движок сборки образов. Замена старому docker build. Встроен в Docker Desktop и docker buildx. Параллельная сборка, кеш через registry, работает без docker-daemon.
Ключевые фичи
- Параллельные слои
- Кеш через registry — CI-раннеры делятся кешем
- Frontends — не только Dockerfile, но HCL, Buildpacks, Cargo
- Secrets, SSH — mount без записи в слой
- Multi-arch из коробки (через QEMU)
- Rootless
Активация
# Docker 23+ — дефолт
docker build .
# явно
DOCKER_BUILDKIT=1 docker build .
# buildx (мультиплатформа)
docker buildx build --platform linux/amd64,linux/arm64 -t img .
Кеш-mount
# syntax=docker/dockerfile:1
FROM golang:1.22 AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg/mod \
go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
go build -o /app/bin
Кеш модулей живёт МЕЖДУ сборками, но не попадает в образ.
Secrets
RUN --mount=type=secret,id=github_token \
curl -H "Authorization: token $(cat /run/secrets/github_token)" ...
docker build --secret id=github_token,src=./token.txt .
SSH forwarding
RUN --mount=type=ssh git clone git@github.com:private/repo
docker build --ssh default .
Registry-cache
docker buildx build \
--cache-from=type=registry,ref=myreg/app:cache \
--cache-to=type=registry,ref=myreg/app:cache,mode=max \
-t myreg/app:latest .
Multi-arch без эмуляции
QEMU медленный. Для скорости — native builders: buildx-node на ARM плюс x86, buildx распределит.