BuildKit 高级构建
约 706 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Docker › 最佳实践(在新窗口打开) › BuildKit 高级构建
BuildKit 是 Docker 的下一代构建引擎,自 Docker 18.06+ 集成,提供更快的构建速度、更好的缓存管理和高级功能。
启用 BuildKit
# 环境变量启用
export DOCKER_BUILDKIT=1
docker build -t myapp .
# 配置文件全局启用
# /etc/docker/daemon.json
# { "features": { "buildkit": true } }
# 也可以使用 docker buildx(BuildKit 的 CLI 前端)
docker buildx build -t myapp .并行构建
BuildKit 自动并行执行互不依赖的构建步骤:
FROM alpine AS base
RUN apk add --no-cache curl wget
# 这两个 COPY 在 BuildKit 下可并行执行
FROM base AS app1
COPY ./app1 /app
RUN echo "Built app1"
FROM base AS app2
COPY ./app2 /app
RUN echo "Built app2"缓存挂载(--mount=type=cache)
npm install / pip install 等步骤的包缓存可以在多次构建之间共享:
FROM node:20-alpine
WORKDIR /app
# 缓存 node_modules,避免每次重新下载
RUN --mount=type=cache,target=/app/node_modules \
npm install
COPY . .
# 缓存 ~/.npm 包缓存
RUN --mount=type=cache,target=/root/.npm \
npm ci --only=production# Python pip 缓存
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt绑定挂载(--mount=type=bind)
允许在构建时绑定宿主机文件而不 COPY:
# 构建时读取宿主机上的凭证,但不写入镜像层
RUN --mount=type=bind,from=node:20-alpine,source=/usr/local/bin/node,target=/node \
/node --version密钥挂载(--mount=type=secret)
将敏感信息在构建时传递,但不写入镜像层:
# 构建时访问私有 npm 仓库
RUN --mount=type=secret,id=npmrc \
cp /run/secrets/npmrc ~/.npmrc && \
npm ci# 构建时传入密钥
docker build --secret id=npmrc,src=$HOME/.npmrc -t myapp .SSH 挂载(--mount=type=ssh)
让构建过程使用宿主机的 SSH 代理访问私有 Git 仓库:
FROM node:20-alpine
RUN apk add --no-cache git openssh-client
# 构建时通过 SSH 拉取私有包
RUN --mount=type=ssh \
git clone git@github.com:myorg/private-pkg.gitdocker build --ssh default -t myapp .--output 直接导出
# 直接导出构建产物到宿主机,不生成镜像
docker build --output type=local,dest=./dist .
# 导出为 tar
docker build --output type=tar,dest=./out.tar .BuildKit 带来的改进
| 特性 | 传统 Builder | BuildKit |
|---|---|---|
| 并行构建 | 否 | ✅ |
| 缓存挂载 | 否 | ✅ |
| Secret 传递 | 不安全(写入镜像层) | ✅ 不写入镜像层 |
| SSH 代理 | 不支持 | ✅ |
| 输出格式 | 仅镜像 | 镜像/tar/本地 |
| 构建速度 | 一般 | 快(并行 + 缓存) |
小结
- BuildKit 是 Docker 新一代构建引擎,通过
DOCKER_BUILDKIT=1或docker buildx启用。 - 核心特性:并行构建、缓存挂载(
--mount=type=cache)、密钥挂载(--mount=type=secret)、SSH 代理(--mount=type=ssh)。 - 缓存挂载让
npm install在多次构建之间共享缓存,大幅加速。 - Secret 挂载确保敏感信息不写入镜像层,比
COPY/ENV安全。 --output直接导出构建产物到宿主机。
上一节:调试与排错 下一节:私有 Registry
