前言¶
要把应用部署到服务器或 CI,容器化往往是第一步。手写 Dockerfile 时,多阶段构建、依赖缓存、.dockerignore 和 docker-compose 很容易漏项或不符合生产习惯;每次换语言栈又要重新查文档。下面介绍 Cursor 社区精选 Skill adding-docker:在用户提出「容器化」「加 Docker 支持」时,按固定流程识别运行时并生成一套可落地的 Docker 相关文件。
这是什么¶
adding-docker 是一份可复用的 SKILL.md 指令,教 Agent 为应用生成生产向的 Dockerfile、docker-compose 与 .dockerignore。官方说明中的定位是:Dockerize an application with a production-ready Dockerfile, docker-compose setup, and .dockerignore.
维护方是 awesome-cursor-skills 仓库中的资源目录,与 Cursor 文档中的 Agent Skills 机制一致:把 SKILL.md 放到指定目录后,Agent 会自动发现并在匹配场景下按步骤执行。该 Skill 不绑定某一云厂商或编排平台,产出的是通用 Docker 文件,可配合本机 docker / docker compose 或现有部署流水线使用。
核心功能¶
根据官方 SKILL.md,Agent 在启用本 Skill 后大致会做这些事:
- 识别运行时:查看
package.json、requirements.txt、go.mod、Cargo.toml等,判断语言与框架。 - 编写多阶段 Dockerfile:以 Alpine 等小体积基础镜像为主;按检测到的框架调整构建输出目录、启动命令与基础镜像(文档以 Node.js 多阶段为例,含
deps/build/runner阶段)。 - 生成
.dockerignore:排除node_modules、构建产物、.git、.env*、文档等,避免把无关文件打进镜像。 - 按需编写
docker-compose.yml:当应用依赖数据库、Redis 等时,定义app与依赖服务(示例含 PostgreSQL 16 Alpine、卷与depends_on)。 - 可选 npm scripts:例如
docker:build、docker:run,方便本地一键构建与启动。
文档中的 Notes 还约束了几条生产习惯:优先 Alpine 镜像减小体积;不要把 .env 打进镜像,改用 env_file 或运行时注入;monorepo 时在 .dockerignore 中排除无关子包;生产部署建议增加 HEALTHCHECK 指令。
安装与启用¶
awesome-cursor-skills 对 Skills 的通用说明是:将现成的 SKILL.md 复制到 .cursor/skills/(用户级)或项目目录中对应位置,Agent 会自动发现。
本 Skill 源文件位于仓库路径:
https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/adding-docker
操作步骤可以概括为:
- 打开上述目录,获取该 Skill 的
SKILL.md(及同目录下若有附属文件则一并复制)。 - 在本机 Cursor 的
.cursor/skills/下新建目录(例如adding-docker),放入SKILL.md。 - 或在当前项目根目录的
.cursor/skills/下放置,仅对该项目生效。
已抓取资料未单独列出 Codex CLI、Claude Code 的安装差异;若你使用其他支持 SKILL.md 的 Agent 环境,可按该环境的 Skills 目录约定放置同一文件。触发方式以官方描述为准:当用户要求 dockerize、containerize 或为应用 add Docker support 时使用本 Skill。
典型用法¶
以下片段来自官方 SKILL.md,用于说明 Agent 可能生成的形态;实际路径与命令会随你项目栈调整。
多阶段 Dockerfile(Node.js 示例节选)
官方示例从 node:20-alpine 分阶段安装依赖、构建,再在 runner 阶段设置 NODE_ENV=production、暴露端口并 npm start。你需要按框架改 .next 等输出目录与 CMD。
FROM node:20-alpine AS base
FROM base AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
FROM base AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/.next ./.next
COPY --from=build /app/public ./public
COPY --from=build /app/package.json ./
EXPOSE 3000
CMD ["npm", "start"]
.dockerignore 示例
减少上下文体积并避免把敏感或无关文件送入构建:
node_modules
.next
.git
.env*
*.md
带数据库的 docker-compose.yml 示例
应用通过 env_file: .env 读环境变量,数据库使用命名卷持久化:
services:
app:
build: .
ports:
- "3000:3000"
env_file: .env
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: app
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
可选 package.json scripts
{
"docker:build": "docker build -t myapp .",
"docker:run": "docker compose up"
}
在 Cursor 里,你可以直接说明意图,例如:「给这个 Next 项目加 Docker,需要 postgres」。Agent 在加载本 Skill 后,会先检测栈再按上述步骤生成或修改文件;生成后仍建议你在本机执行 docker build / docker compose up 验证。
适用场景与注意¶
适合谁
- 已有可运行应用,尚未容器化,希望快速得到多阶段 Dockerfile 与忽略规则的团队或个人。
- 需要本地一键拉起应用 + 数据库等依赖,希望
docker-compose.yml结构与官方示例一致、便于再改的场景。 - 使用 Cursor Agent,希望通过 Skills 固定「容器化」流程,减少每次从零 prompt 的遗漏。
限制与注意
- Skill 输出的是模板化最佳实践,不能替代你对镜像安全、密钥管理、资源限制与编排平台的审查;示例中的数据库密码仅为占位,生产环境必须替换。
- 官方明确要求:不要将
.env复制进镜像;敏感配置应通过env_file或运行时注入。 - Monorepo 需额外在
.dockerignore中排除兄弟包;Skill 在 Notes 中提醒了这一点,但具体路径仍需结合仓库结构人工确认。 - 生产部署应补充
HEALTHCHECK等指令;Skill 在 Notes 中建议添加,是否写入最终 Dockerfile 取决于 Agent 执行与你的后续修改。
结尾¶
adding-docker 把「识别运行时 → 多阶段 Dockerfile → .dockerignore → 可选 compose 与脚本」写成 Agent 可重复的流程,适合作为容器化的第一步脚手架。官方资源地址:
https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/adding-docker