名称: dockerfile-optimise 描述: 来自官方Docker文档的Dockerfile优化指南。当编写、审查或重构Dockerfile时,应使用此技能,以确保最佳构建时间、镜像大小、安全性和鲁棒性。在涉及Dockerfile创建、Docker镜像构建、容器优化、多阶段构建、构建缓存或Docker安全加固的任务时触发。
Dockerfile优化最佳实践
完全源自官方Docker文档的综合Dockerfile优化指南。包含8个类别中的48条规则,按影响优先级排序,以指导自动化重构和代码生成。
何时应用
在以下情况下参考这些指南:
- 编写新的Dockerfile或修改现有的
- 优化Docker构建时间(层缓存、缓存挂载、上下文管理)
- 减少Docker镜像大小(多阶段构建、最小基础镜像)
- 加固容器安全(秘密挂载、非root用户、证明)
- 设置带有Docker构建的CI/CD管道
- 审查Dockerfile的反模式
按优先级分类的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 层缓存与排序 | 关键 | cache- |
| 2 | 多阶段构建 | 关键 | stage- |
| 3 | 基础镜像选择 | 高 | base- |
| 4 | 构建上下文管理 | 高 | ctx- |
| 5 | 安全与秘密 | 高 | sec- |
| 6 | 依赖管理 | 中高 | dep- |
| 7 | 指令模式 | 中 | inst- |
| 8 | 质量与验证 | 中 | lint- |
快速参考
1. 层缓存与排序(关键)
cache-layer-order- 按变更频率排序层cache-copy-deps-first- 在源代码之前复制依赖文件cache-copy-link- 使用COPY --link进行缓存高效层复制cache-mount-package- 使用缓存挂载进行包管理器cache-apt-combine- 将apt-get update与install结合cache-external- 为CI/CD构建使用外部缓存cache-invalidation- 避免不必要的缓存失效cache-minimize-layers- 整合相关的RUN指令
2. 多阶段构建(关键)
stage-separate-build-runtime- 分离构建和运行时阶段stage-named-stages- 使用命名构建阶段stage-parallel-branches- 利用并行阶段执行stage-target-builds- 使用目标构建进行开发/生产stage-copy-artifacts-only- 仅在阶段之间复制最终工件stage-reusable-base- 创建可重用的基础阶段
3. 基础镜像选择(高)
base-minimal-image- 使用最小基础镜像base-official-images- 使用Docker官方镜像base-pin-versions- 使用摘要固定基础镜像版本base-arg-version- 在FROM之前使用ARG参数化基础镜像base-rebuild-regularly- 定期使用–pull重建镜像base-distroless- 为生产使用distroless或scratch镜像
4. 构建上下文管理(高)
ctx-dockerignore- 使用.dockerignore排除不必要文件ctx-bind-mounts- 使用绑定挂载代替COPY用于仅构建文件ctx-minimize-context- 保持构建上下文小ctx-syntax-directive- 使用语法指令获取最新BuildKit功能(缓存挂载、秘密挂载、heredocs、COPY --link的前提)
5. 安全与秘密(高)
sec-secret-mounts- 使用秘密挂载处理敏感数据sec-non-root-user- 以非root用户运行sec-no-secrets-in-args- 永不通过ARG或ENV传递秘密sec-ssh-mounts- 使用SSH挂载访问私有仓库sec-attestations- 启用SBOM和来源证明sec-no-unnecessary-packages- 避免安装不必要包sec-ephemeral-containers- 设计临时、无状态容器
6. 依赖管理(中高)
dep-cache-mount-apt- 使用缓存挂载进行apt包管理器dep-cache-mount-npm- 使用缓存挂载进行npm、yarn和pnpmdep-cache-mount-pip- 使用缓存挂载进行pipdep-version-pin- 固定包版本以确保可重复性dep-cleanup-caches- 在同一层清理包管理器缓存
7. 指令模式(中)
inst-json-cmd- 为CMD和ENTRYPOINT使用JSON形式inst-healthcheck- 为容器编排定义HEALTHCHECKinst-heredoc-scripts- 使用heredocs处理多行脚本inst-entrypoint-exec- 在入口点脚本中使用execinst-workdir-absolute- 使用绝对路径与WORKDIRinst-copy-over-add- 优先使用COPY而不是ADD
8. 质量与验证(中)
lint-build-checks- 启用Docker构建检查lint-pipefail- 为管道RUN命令使用pipefaillint-labels- 使用标准标签进行镜像元数据lint-sort-arguments- 按字母顺序排序多行参数lint-single-concern- 每个容器一个关注点
如何使用
阅读个别参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |