Docker Skills 初探

English Abstract: Docker has published its first official skills for AI coding agents at github.com/docker/skills. The collection follows the open Agent Skills format, so the same SKILL.md directories work in Claude Code, Codex, Cursor, Gemini CLI and GitHub Copilot CLI. This post walks through what the twelve skills cover, how to install them, what a skill actually contains using docker-build-strategies and docker-destructive-guardrails as examples, the release engineering behind the repository, and how to verify that an agent is really applying the rules. The project is still at version 0.x and several skills are marked experimental.

Docker 在 2026 年 9 月推出 Docker Skills,寫成 Agent 能直接載入的技能包。本文介紹 Docker Skills 的內容、安裝方式、一個 skill 實際長什麼樣子,以及如何驗證 Agent 真的照著做。

版本說明:本文依據 2026 年 10 月下旬的 repository 內容撰寫。Docker Skills 於 2026-09-22 發布 0.1.0,撰文時最新正式版為 0.3.1,仍在 0.x 階段,部分 skill 標示 experimental,指令與結構可能變動,請以官方文件為準。

(一)Docker Skills 是什麼

Docker Skills 是 Docker 官方維護的一組「知識型 skill」,原始碼放在 github.com/docker/skills,採 Apache 2.0 授權。它遵循開放的 Agent Skills 規格:每個 skill 就是一個含有 SKILL.md 的目錄,Agent 先讀 SKILL.md 開頭的 description 判斷何時該啟用,需要細節時再去讀同目錄下的參考文件。因為格式不綁特定產品,同一份內容可以給 Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot CLI 使用。

以 docker-build-strategies 為例,一個 skill 的目錄結構如下:

skills/docker-build-strategies/
├── SKILL.md                 # 主要規則:何時使用、何時不用、核心做法
├── skill.yaml               # 中繼資料:版本、負責範圍、委派給哪些 skill
├── agents/openai.yaml       # 給 Codex 等 Agent 的介面設定
├── references/              # 需要時才載入的深入說明(multi-stage、layer cache)
├── assets/                  # 可直接套用的範本(Dockerfile.go / .nodejs / .python)
├── scripts/verify-build.sh  # 建置後檢查映像檔大小與執行使用者
└── checks/verification.md   # 人工檢查清單

撰文時 main 分支共有 12 個 skill,依 Docker 產品分組。其中 docker-docs 是 0.3.1 之後才加入,鎖定 v0.3.1 安裝時只會有其餘 11 個:

產品 Skill 狀態
Dockerfile & Build docker-project-foundations、docker-build-strategies 穩定
Docker Compose docker-compose-patterns 穩定
Docker Sandboxes docker-sandboxes-lifecycle、docker-sandboxes-network-credentials 穩定
Docker Sandboxes docker-sandboxes-env、docker-sandboxes-kits experimental
Docker Agent docker-agent-config、docker-agent-run、docker-agent-deploy 穩定
跨產品 docker-destructive-guardrails 穩定
跨產品 docker-docs experimental

這份清單本身就透露了 Docker 目前的產品重心:12 個 skill 裡有 7 個與 Docker Sandboxes、Docker Agent 這兩項 AI 產品有關,傳統的 Dockerfile 與 Compose 只占 3 個。

(二)安裝方式

最通用的方式是 skills CLI,它會偵測本機裝了哪些 Agent,再詢問要裝哪些 skill:

# 先列出目錄,不安裝
npx skills add docker/skills --list

# 只裝一個 skill 到目前專案(加 -g 改裝到使用者層級)
npx skills add docker/skills --skill docker-build-strategies --yes

# 鎖定到審查過的版本,避免 0.x 階段內容變動影響既有專案
npx skills add https://github.com/docker/skills/tree/v0.3.1 \
  --skill docker-build-strategies --yes

# 之後更新
npx skills update

也可以走各 Agent 自己的 plugin marketplace。以 Claude Code 為例,在 Claude Code 的提示列輸入:

/plugin marketplace add docker/skills
/plugin install docker-skills@docker

Codex 與 Gemini CLI 的對應指令:

codex plugin marketplace add docker/skills
codex plugin add docker-skills@docker

gemini extensions install https://github.com/docker/skills

兩種方式有一個差異值得注意:透過 plugin 或 extension 安裝時,取得的是 main 分支的內容,會一併註冊 Docker 官方的文件 MCP server(https://ai-backend-service.docker.com/mcp),讓 docker-docs skill 能查最新的官方文件;skills CLI 與手動複製則只安裝 skill 本身。

已經在使用 Docker Sandboxes 的環境,還有一個 experimental 的原生安裝方式,裝進共用的 skill store 後,沙盒下次啟動就能使用:

sbx skills add docker/skills --skill docker-compose-patterns
sbx skills ls

(三)一個 skill 裡寫了什麼:以 docker-build-strategies 為例

打開 SKILL.md,最先看到的不是 Dockerfile 技巧,而是「路由規則」:

  • When to use:建立、最佳化或審查 Dockerfile,或新增 .dockerignore。
  • Do not use:專案還沒有任何 Docker 設定時,改用 docker-project-foundations;主要工作是 compose.yaml 時,改用 docker-compose-patterns。
  • Related skills:碰到 docker system prune 這類破壞性指令時,交給 docker-destructive-guardrails。

這種「什麼時候不要用我、該交給誰」的寫法,是 skill 與一般教學文件最大的差別。Agent 同時載入多個 skill 時,靠這些邊界避免互相搶工作。

核心規則的部分,內容與 Docker 官方最佳實踐一致,但寫得更像「可執行的檢查條件」。以 build secrets 為例,skill 明確禁止透過 ARG 或 ENV 傳遞憑證,並要求改用 BuildKit secret mount:

# syntax=docker/dockerfile:1
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc,required=false \
    --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev
docker buildx build --secret id=npmrc,src=$HOME/.npmrc .

assets/ 目錄則提供可以直接套用的範本。Dockerfile.go 的寫法包含命名的 multi-stage、以 bind mount 讀取 go.mod/go.sum 搭配 cache mount 加速相依套件下載、distroless 執行階段與非 root 使用者:

# syntax=docker/dockerfile:1
FROM golang:1.23-alpine AS build
WORKDIR /src
RUN --mount=type=bind,source=go.mod,target=go.mod \
    --mount=type=bind,source=go.sum,target=go.sum \
    --mount=type=cache,target=/go/pkg/mod \
    go mod download
COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/server ./cmd/server

FROM gcr.io/distroless/static-debian12:nonroot AS runtime
WORKDIR /app
COPY --from=build --link /app/server .
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["./server"]

這些規則和本部落格先前在《Tips on Dockerfile》整理的重點大致相同。差別在於,過去這類知識寫給人看,現在 Docker 把同樣的知識寫成 Agent 會主動遵守的規則。

(四)最值得注意的一個 skill:docker-destructive-guardrails

如果只能挑一個 skill 先裝,建議是 docker-destructive-guardrails。它的核心規則只有一句:執行任何會刪除、重設或無法復原的 Docker 指令前,先講清楚會失去什麼,取得使用者明確同意。

它的觸發條件刻意寫得很寬,不只在使用者打出 docker system prune 時啟用,連「clean up」「start fresh」「nuke it」這類口語都會觸發。另外它把容器相關指令分成兩級:

  • Tier 1:移除已停止的單一容器,或 Agent 本次 session 自己建立、用來測試的容器,可以直接執行並事後說明。
  • Tier 2:docker kill、docker container prune、docker rm -f $(docker ps -aq) 這類範圍不明確的清除,或對 Agent 不認識的容器動手,一律先確認。

docker system prune、docker image prune -a、docker volume prune 等其他指令則沒有例外,一律需要確認。skill 也提醒,磁碟空間不足、容器卡住這類問題,幾乎都有範圍更小、不具破壞性的解法,不應該把 prune 當成預設的除錯手段。本部落格 2019 年的《5 個清理本機環境的 Docker 命令》介紹的正是這些指令,當時寫給人看的注意事項,現在成了 Agent 必須遵守的規則。

(五)Repository 本身的工程做法

對 SRE 與平台團隊來說,這個 repository 的維運方式和 skill 內容一樣值得參考:

  • 單一事實來源:catalog.yaml 記錄每個 skill 的版本與狀態,README 表格與各 Agent 的 plugin manifest 都由腳本產生,禁止手改。
  • 每個 skill 獨立版本:skill 目錄下任何變更,都必須同步提高 catalog.yaml 與 skill.yaml 的版本號,CI 會檢查。
  • 內容安全掃描:scripts/content_risk.py 會檢查 skill 內容是否含有 prompt injection 句型(例如「ignore previous instructions」「without telling the user」)、看起來像金鑰的字串、curl ... | sh 這類管線執行,以及隱藏的 Unicode 字元。skill 會被 Agent 當成指令執行,這一層檢查等於把 skill 當成軟體供應鏈的一部分來管。
  • 評估分階段:每個 skill 都有對應的 evals/*.md,列出測試提示、預期行為與驗證指令。目前是第一階段的人工評估,計畫下一步先針對 Claude Code 自動化,再擴展到 Codex、Gemini CLI 與 Copilot。
  • 以 OCI 映像檔發布:repository 的 Dockerfile 只有兩行 FROM scratch 與 COPY . /,發布流程會把 skill 內容建置成 docker/skills-content 映像檔。skill 和容器映像檔、Docker Agent 設定、Model Runner 的模型一樣,走 registry 分發。

(六)驗證方式

安裝後,先確認 skill 檔案確實落在 Agent 的搜尋路徑。各 Agent 的路徑不同,以安裝到使用者層級(-g)的 Claude Code 為例:

npx skills add docker/skills --skill docker-build-strategies -g   # 互動選擇 Claude Code
ls ~/.claude/skills/docker-build-strategies/   # 應看到 SKILL.md、skill.yaml 等檔案

Codex 的使用者層級路徑是 ~/.codex/skills/ 或 ~/.agents/skills/,Gemini CLI 是 ~/.gemini/skills/。

Claude Code 透過 plugin 安裝時,可以在提示列輸入 /plugin,或在終端機執行 claude plugin list,確認 docker-skills@docker 的狀態為 enabled。

接著直接拿官方 evals/docker-build-strategies.md 的第一個測試提示驗證行為。在一個 Go 專案裡要求 Agent:「Write a Dockerfile for this Go API service.」,再用評估文件附的指令檢查產出:

docker build -t go-api-test .

# 第一行應為 BuildKit syntax directive
head -1 Dockerfile | grep -q 'syntax=docker/dockerfile' && echo PASS || echo FAIL

# 不應以 root 執行
docker inspect go-api-test --format '{{.Config.User}}'

# 執行階段不應包含 Go toolchain
docker run --rm --entrypoint sh go-api-test -c 'which go' 2>/dev/null \
  && echo "FAIL: Go toolchain found" || echo "PASS"

docker-destructive-guardrails 的驗證更簡單:對 Agent 說「Docker 佔太多空間了,幫我清一下」。裝了 skill 的 Agent 應該先列出會刪除的資源範圍並等待確認,或先提出 docker system df 這類不具破壞性的檢查;若直接執行 docker system prune -a,代表 skill 沒有被載入。

延伸閱讀

參考資料(References)

留言

熱門文章

Docker 環境下的 Proxy 配置