SuperAPI AI 工具集

containerize

部署与运维

查看项目

更新于 10-20 09:59

技能介绍

containerize 的目标是 $ARGUMENTS(为空表示整个仓库),它是一个按步骤执行的容器化技能,用于为项目补齐 Dockerfile、.dockerignore 和 compose.yaml。

用途 该技能面向需要将现有项目容器化的场景:先了解项目技术栈和运行方式,再生成符合当前 Docker 实践的容器配置,并验证构建与启动是否正常。

主要能力

  1. 项目调查:从锁文件(pnpm-lock.yaml、package-lock.json、bun.lock、uv.lock、poetry.lock、requirements.txt、go.mod、Cargo.toml、pom.xml / build.gradle)识别运行时和包管理器;记录启动命令、监听端口、健康端点以及代码连接的后端服务(数据库、缓存、队列);读取已有 Dockerfile、.dockerignore 或 Compose 文件,在原有基础上扩展而不是替换。完成条件是能够说出运行时、包管理器、构建命令、启动命令、端口和所有后端服务。
  2. 脚手架:若无现有 Dockerfile,按 references/patterns.md 手写文件。docker init 是交互式命令,Bash 工具没有终端,因此该技能只建议用户自行运行;docker init 可为 Node、Python、Go、Rust、Java、ASP.NET Core 和 PHP 生成 Dockerfile、.dockerignore、compose.yaml 和 README.Docker.md。完成条件是四个文件存在,或已有手写的等价文件。
  3. 编写 Dockerfile:按运行时模式应用规则,包括多阶段构建(构建阶段带工具链,运行阶段只带构建产物和生产依赖);基础镜像按摘要固定(image:tag@sha256:...,不用 latest,可用 docker buildx imagetools inspect image:tag 获取摘要);最小化运行时(distroless、Docker Hardened Images,或在需要 shell/系统库时使用 -slim 变体);每次包管理器安装使用 BuildKit 缓存挂载,并在源码之前复制或挂载锁文件;冻结安装(pnpm install --frozen-lockfile、npm ci、bun install --frozen-lockfile、uv sync --locked);非 root 数值用户(distroless 上用 USER 65532:65532,或创建固定 UID/GID 的用户,便于 Kubernetes runAsNonRoot 校验);exec 形式 CMD/ENTRYPOINT,使进程为 PID 1 并接收 SIGTERM;针对健康端点设置 HEALTHCHECK,且使用运行时镜像实际包含的二进制(distroless 没有 curl);ENV、ARG 或层中不得出现密钥,构建期凭据使用 RUN --mount=type=secret。每条规则要么应用,要么在 Dockerfile 中用一行注释说明未应用原因。
  4. 编写 .dockerignore:排除版本控制数据、依赖目录(node_modules、.venv)、构建输出、本地环境文件(.env*,但构建需要的 .env.example 可保留)、测试报告、编辑器目录以及 Dockerfile 和 Compose 文件本身。完成条件是 docker build 报告较小的上下文传输量,且上下文中没有密钥文件。
  5. 编写 compose.yaml:使用 compose.yaml 名称,省略顶层 version 键;加入步骤 1 识别的后端服务,每个服务配置健康检查,并用 depends_on: { db: { condition: service_healthy } } 让应用等待;凭据放在 env_file 或 secrets 中,不要内联;数据使用命名卷。完成条件是 docker compose config 能无错误无警告打印合并后的文件。
  6. 验证:执行 docker build -t app:local .、docker compose up -d --wait、docker compose ps,以及 docker run --rm --entrypoint id app:local(distroless 上跳过,改用 docker inspect -f '{{.Config.User}}' 检查)。完成条件是构建成功、--wait 返回时所有服务健康、应用在端口上响应、运行用户不是 0;并报告最终镜像大小(docker image ls app:local)以及步骤 3 中作为有意例外保留的内容。

使用方式 在 Claude 插件环境中调用该技能,可传入目标参数($ARGUMENTS),为空时处理整个仓库。技能按调查、脚手架、Dockerfile、.dockerignore、compose.yaml、验证的顺序执行,并在每一步给出完成条件。

适用场景 适用于需要为 Node、Python、Go、Rust、Java、ASP.NET Core、PHP 等项目生成容器配置,或需要在已有配置上扩展并验证容器构建与启动的开发者。

限制 资料未提供该技能的具体安装命令、收费方式、支持平台和性能数据。docker init 因需要交互终端,不能由该技能的 Bash 工具直接运行,只能建议用户自行执行。distroless 镜像没有 curl,健康检查需按参考文件选择可用二进制;distroless 上也无法用 id 命令检查用户,需改用 docker inspect。