概述
每次 CI 都从头安装依赖,是因为缓存未持久化、分层顺序又让任何改动都使前层失效。把锁文件前置、用缓存挂载保存包管理器下载,并在 CI 导出导入缓存,可把大部分重复工作省去。
关键步骤
- 先复制锁文件并安装依赖,再复制源码。
- 为包管理器使用缓存挂载。
- 在 CI 中导出与导入构建缓存。
- 验证无改动时第二次构建复用缓存层。
验证
- 代码改动不使依赖层失效。
- 重建可复用远端缓存。
- 下载的包在构建间保留。
- 最终镜像体积由多阶段构建控制。
注意事项
- BuildKit 缓存并非所有后端都通用,且基础镜像变化会使其失效。
- 激进缓存可能掩盖过期依赖,发布前应干净重建一次。
适用范围
本条目围绕「用 BuildKit 缓存加速 Docker 构建」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
# syntax=docker/dockerfile:1.6
FROM node:22-slim AS deps
COPY package.json pnpm-lock.yaml ./
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
pnpm install --frozen-lockfile
FROM node:22-slim
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build