SuperAPI AI 工具集

dockerfile-optimise

部署与运维

查看项目

更新于 10-15 12:36

技能介绍

用途

Dockerfile 优化最佳实践(Dockerfile Optimization Best Practices)。该技能是一份全面的 Dockerfile 优化指南,内容完全取自 Docker 官方文档,包含 48 条规则,分布在 8 个类别中,并按影响程度排序,用于指导自动重构和代码生成。

适用时机

在以下情况可参考这些指南:

  • 编写新的 Dockerfile 或修改现有 Dockerfile
  • 优化 Docker 构建时间(层缓存、缓存挂载、上下文管理)
  • 减小 Docker 镜像大小(多阶段构建、最小化基础镜像)
  • 强化容器安全(密钥挂载、非 root 用户、证明)
  • 搭建带 Docker 构建的 CI/CD 流水线
  • 审查 Dockerfile 中的反模式

规则类别与优先级

优先级 类别 影响 前缀
1 Layer Caching & Ordering CRITICAL cache-
2 Multi-Stage Builds CRITICAL stage-
3 Base Image Selection HIGH base-
4 Build Context Management HIGH ctx-
5 Security & Secrets HIGH sec-
6 Dependency Management MEDIUM-HIGH dep-
7 Instruction Patterns MEDIUM inst-
8 Quality & Validation MEDIUM lint-

1. 层缓存与顺序(CRITICAL)

  • 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. 多阶段构建(CRITICAL)

  • stage-separate-build-runtime — 分离构建阶段与运行阶段
  • stage-named-stages — 使用命名的构建阶段
  • stage-parallel-branches — 利用阶段的并行执行
  • stage-target-builds — 使用 target 构建区分开发/生产
  • stage-copy-artifacts-only — 仅在阶段之间复制最终产物
  • stage-reusable-base — 创建可复用的基础阶段

3. 基础镜像选择(HIGH)

  • base-minimal-image — 使用最小化基础镜像
  • base-official-images — 使用 Docker 官方镜像
  • base-pin-versions — 使用摘要(digest)固定基础镜像版本
  • base-arg-version — 在 FROM 之前使用 ARG 参数化基础镜像
  • base-rebuild-regularly — 定期使用 --pull 重新构建镜像
  • base-distroless — 生产环境使用 distroless 或 scratch 镜像

4. 构建上下文管理(HIGH)

  • ctx-dockerignore — 使用 .dockerignore 排除不必要的文件
  • ctx-bind-mounts — 对仅构建期使用的文件使用绑定挂载而非 COPY
  • ctx-minimize-context — 保持构建上下文尽可能小
  • ctx-syntax-directive — 使用 syntax 指令以启用最新 BuildKit 特性(缓存挂载、密钥挂载、heredocs、COPY --link 的前提条件)

5. 安全与密钥(HIGH)

  • sec-secret-mounts — 对敏感数据使用密钥挂载
  • sec-non-root-user — 以非 root 用户运行
  • sec-no-secrets-in-args — 绝不通过 ARG 或 ENV 传递密钥
  • sec-ssh-mounts — 访问私有仓库时使用 SSH 挂载
  • sec-attestations — 启用 SBOM 与来源(provenance)证明
  • sec-no-unnecessary-packages — 避免安装不必要的软件包
  • sec-ephemeral-containers — 设计临时、无状态的容器

6. 依赖管理(MEDIUM-HIGH)

  • dep-cache-mount-apt — 为 apt 包管理器使用缓存挂载
  • dep-cache-mount-npm — 为 npm、yarn 和 pnpm 使用缓存挂载
  • dep-cache-mount-pip — 为 pip 使用缓存挂载
  • dep-version-pin — 固定软件包版本以保证可复现性
  • dep-cleanup-caches — 在同一层中清理包管理器缓存

7. 指令模式(MEDIUM)

  • inst-json-cmd — CMD 与 ENTRYPOINT 使用 JSON 形式
  • inst-healthcheck — 为容器编排定义 HEALTHCHECK
  • inst-heredoc-scripts — 使用 heredoc 编写多行脚本
  • inst-entrypoint-exec — 在入口脚本中使用 exec
  • inst-workdir-absolute — WORKDIR 使用绝对路径
  • inst-copy-over-add — 优先使用 COPY 而非 ADD

8. 质量与校验(MEDIUM)

  • lint-build-checks — 启用 Docker 构建检查
  • lint-pipefail — 对管道连接的 RUN 命令使用 pipefail
  • lint-labels — 使用标准标签记录镜像元数据
  • lint-sort-arguments — 多行参数按字母顺序排序
  • lint-single-concern — 每个容器只负责一件事

使用方式

阅读各个参考文件以获取详细说明和代码示例:

  • 章节定义 — 类别结构与影响级别
  • 规则模板 — 添加新规则的模板

参考文件:

文件 说明
references/_sections.md 类别定义与顺序
assets/templates/_template.md 新规则模板
metadata.json 版本与参考信息