前言¶
要把應用部署到服務器或 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