SuperAPI AI 工具集

dockerfile-generator

部署与运维

查看项目

更新于 10-14 19:10

技能介绍

用途

Dockerfile Generator 是一个用于生成生产级 Dockerfile 的技能,覆盖安全、优化与最佳实践。它适用于从零创建 Dockerfile、容器化应用(Node.js、Python、Go、Java 或其他语言)、实现多阶段构建以优化体积、将现有 Dockerfile 转换为最佳实践、生成生产级容器配置,以及为安全与性能优化 Docker 构建。当用户请求“创建”“生成”“构建”或“编写”Dockerfile 时,或需要为微服务实现容器化、为 CI/CD 流水线设置容器构建时,可调用此技能。

不适用场景:验证现有 Dockerfile(应使用 dockerfile-validator)、构建或运行容器(使用 docker build/run 命令)、调试运行中的容器(使用 docker logs、docker exec)、管理 Docker 镜像或仓库。

主要能力

  • 多阶段构建,优化镜像体积(减少 50-85%)
  • 安全加固(非 root 用户、最小基础镜像、无密钥泄露)
  • 层缓存优化,加快构建速度
  • 语言专属模板(Node.js、Python、Go、Java)
  • 自动生成 .dockerignore
  • 与 dockerfile-validator 集成进行验证
  • 迭代验证与错误修复(发现错误时至少迭代 1 次)
  • 本地参考文件加文档查询回退链,用于框架专属模式

使用方式

该技能采用确定性执行模型,按顺序运行以下阶段,除非在最终输出中报告跳过原因,否则不得跳过任何阶段:

  1. 收集需求(语言、运行时版本、入口点、暴露端口、包管理器、健康检查端点)。
  2. 加载参考文件(优先本地参考文件;仅在本地参考不足时查阅外部文档)。
  3. 生成 Dockerfile 和 .dockerignore。
  4. 使用 dockerfile-validator 或回退本地工具进行验证。
  5. 迭代修复,直到满足停止条件。
  6. 发布最终产物及验证/审计报告。

第 5 阶段的停止条件:当验证错误为零且无未批准的警告时停止;最多迭代 3 次后停止,并针对未解决问题输出有意偏差报告。

参考路径映射:

  • references/security_best_practices.md:非 root 用户、密钥处理、基础镜像加固、漏洞扫描。
  • references/optimization_patterns.md:多阶段策略、缓存优化、层缩减、BuildKit 缓存挂载。
  • references/language_specific_guides.md:语言/框架运行时与包管理器模式。
  • references/multistage_builds.md:高级阶段拆分与产物复制模式。

生成工作流:

阶段 1:收集需求。了解需要容器化的内容并收集必要信息,包括应用详情(语言与版本、应用类型、框架、入口点)、依赖(包管理器、系统依赖、构建时与运行时依赖)、应用配置(端口、环境变量、配置文件、健康检查端点、卷挂载)、构建要求(构建命令、测试命令、编译需求、静态资源生成)、生产要求(镜像体积约束、安全要求、扩展需求、资源约束)。信息缺失或不明确时使用 AskUserQuestion 提问。

阶段 2:框架/库文档查询(如需要)。当用户提及特定框架、应用有复杂构建要求或需要框架专属优化指导时执行。研究过程遵循严格回退链:先读取本地参考文件(必需);本地参考不足时使用 Context7 文档查询(首选外部来源);Context7 不可用或缺少所需细节时使用网络搜索;外部查询不可用(离线/工具限制)时继续使用本地参考和语言模板,并在输出中明确说明假设,在最终报告中标记查询限制。仅提取可操作数据:推荐基础镜像与版本策略、构建优化技术、必需运行时环境变量、生产与开发差异、框架专属安全要求。

阶段 3:生成 Dockerfile。核心原则:多阶段构建(编译型语言必需,所有场景推荐);安全加固(必需,使用具体版本标签、非 root 用户、最小基础镜像、无硬编码密钥、扫描基础镜像漏洞);层优化(必需,按变更频率从低到高排序指令、先复制依赖文件再复制应用代码、用 && 合并相关 RUN 命令、同层清理包管理器缓存、有效利用构建缓存);生产就绪(必需,为服务添加 HEALTHCHECK、ENTRYPOINT/CMD 使用 exec 形式、WORKDIR 使用绝对路径、用 EXPOSE 记录端口)。

语言专属模板:提供 Node.js、Python、Go、Java 的多阶段 Dockerfile 示例。选择逻辑:Node.js 用于 JavaScript/TypeScript 应用;Python 用于 Python 应用(Web、API、脚本);Go 用于 Go 应用(适合最小镜像);Java 用于 Spring Boot、Quarkus 或其他 Java 框架;其他语言创建自定义 Dockerfile。始终包含:语法指令 # syntax=docker/dockerfile:1、多阶段构建、非 root 用户创建与使用、服务的 HEALTHCHECK(如适用)、正确的 WORKDIR 设置、EXPOSE 记录端口、清理包管理器缓存、CMD/ENTRYPOINT 使用 exec 形式。

阶段 4:生成 .dockerignore。始终随生成的 Dockerfile 一起创建 .dockerignore,以减少构建上下文并防止密钥泄露。提供标准模板,涵盖 Git、CI/CD、文档、Docker、环境变量、日志、依赖、IDE、测试、构建产物等类别,并根据语言定制(Node.js 添加 node_modules/ 等;Python 添加 pycache/ 等;Go 添加 vendor/ 等;Java 添加 target/ 等)。

阶段 5:使用 dockerfile-validator 验证。生成后必须始终运行验证。首选路径:调用 dockerfile-validator,按严重程度(error、warning、info)捕获发现,优先处理安全与可复现性问题。回退路径:尝试本地验证脚本 bash ../dockerfile-validator/scripts/dockerfile-validate.sh Dockerfile;若不可用,直接运行 hadolint Dockerfile 和 checkov -f Dockerfile --framework dockerfile;若一个或多个工具不可用,继续生成并在最终报告中报告每个跳过的检查。预期验证阶段:[1/4] 语法验证(hadolint)、[2/4] 安全扫描(Checkov)、[3/4] 最佳实践验证、[4/4] 优化分析。

阶段 6:验证-迭代循环。循环规则:至少运行一次验证;若存在任何错误,应用修复并重新运行验证;持续直到无错误残留或迭代次数达到 3;对于警告,要么修复,要么标记为有意偏差并说明理由;绝不静默抑制发现。迭代日志格式需记录迭代次数、使用的命令/路径、错误数、警告数、应用的修复、结果。常见修复包括:为基础镜像添加版本标签、在 CMD/ENTRYPOINT 前添加 USER 指令、为服务添加 HEALTHCHECK、在安全的情况下合并 RUN 命令、同层清理包缓存、将 ADD 替换为 COPY。

适用场景

  • 从零创建 Dockerfile
  • 容器化 Node.js、Python、Go、Java 或其他语言应用
  • 实现多阶段构建以优化体积
  • 将现有 Dockerfile 转换为最佳实践
  • 生成生产级容器配置
  • 为安全与性能优化 Docker 构建
  • 为微服务实现容器化
  • 为 CI/CD 流水线设置容器构建

限制

  • 不用于验证现有 Dockerfile(应使用 dockerfile-validator)
  • 不用于构建或运行容器(应使用 docker build/run 命令)
  • 不用于调试运行中的容器(应使用 docker logs、docker exec)
  • 不用于管理 Docker 镜像或仓库
  • 外部文档查询不可用时,仅能依赖本地参考和语言模板,并需明确说明假设
  • 验证工具不可用时,部分检查会被跳过并在报告中说明
  • 迭代修复最多 3 次,未解决问题会以有意偏差报告形式输出