用途:当 Docker 构建因重复安装包而变慢、每次改代码都重装全部依赖、镜像过大或 CI/CD 构建成为瓶颈时,用于优化现有 Dockerfile 的层缓存与构建效率。
主要能力:按变更频率排序镜像层(基础镜像、系统依赖、依赖文件、源码依次排列);将依赖安装与源码复制分离,仅在锁文件变化时重装,如 R 用 COPY renv.lock renv.lock 后 RUN R -e "renv::restore()",Node.js 用 COPY package.json package-lock.json ./ 后 RUN npm ci;使用多阶段构建分离构建与运行时依赖;合并 RUN 指令并在 apt-get 后执行 rm -rf /var/lib/apt/lists/*;通过 .dockerignore 排除 .git、node_modules、renv/library、.env 等;启用 BuildKit 以支持并行阶段构建、更好的缓存管理与缓存挂载。
使用方式:以 DOCKER_BUILDKIT=1 docker build -t myimage . 启用 BuildKit;缓存挂载示例为 RUN --mount=type=cache,target=/root/.npm npm ci;CI 中可用 --cache-to type=registry,ref=<registry>/<cache-image>,mode=max 导出缓存,并用 --cache-from type=registry,ref=<registry>/<cache-image> 导入,需先用 docker buildx create --driver docker-container --use 创建专用构建器。
适用场景:R、Node.js 等项目的 Dockerfile 优化,以及容器化 CI 流程。
限制与注意事项:缓存层与平台相关,CI 临时运行器默认无本地缓存,每次从零重建;type=registry 需启用 containerd 镜像存储,type=gha 亦需额外配置;--mount=type=cache 需 BuildKit(Docker Engine 18.09+)。具体目标构建时间与镜像体积改善数据暂未提供。