skills/docker/SKILL.md
Dockerfile 與 Docker Compose 最佳實踐:多階段建置、非 root 執行、層快取最佳化與 Compose Specification 規範。
npx skillsauth add CloudyWing/ai-dotfiles dockerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
當使用者要求撰寫或檢視 Dockerfile、Compose 檔案或容器化部署設定時,請自動套用以下規範。
sdk 映像檔,執行階段使用 aspnet 或 runtime 映像檔。# ✅ 正確:多階段建置(多專案方案)
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
# 逐一複製每個 .csproj,確保 restore 快取層正確命中
COPY ["MySolution.sln", "."]
COPY ["MyApp/MyApp.csproj", "MyApp/"]
COPY ["MyLibrary/MyLibrary.csproj", "MyLibrary/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
RUN dotnet publish "MyApp/MyApp.csproj" -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
ENTRYPOINT DLL 名稱:DLL 預設與專案檔名相同。若
.csproj有設定<AssemblyName>,則以該值為準,撰寫前應先確認。
.csproj,再 restore,最後複製原始碼:確保相依性套件未變動時,restore 層可被快取。不可使用 COPY *.csproj 通配符,該語法無法匹配子目錄下的專案檔。RUN 指令中混合安裝套件與複製程式碼。.dockerignore,排除不需進入建置上下文的檔案:**/.git
**/bin
**/obj
**/node_modules
**/.vs
**/.idea
**/Thumbs.db
**/*.user
**/*.suo
USER 指令切換至非特權使用者:FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
RUN adduser --disabled-password --no-create-home appuser
WORKDIR /app
COPY --from=build /app/publish .
USER appuser
ENTRYPOINT ["dotnet", "MyApp.dll"]
HEALTHCHECK 指令:HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
ENV 僅用於非敏感的執行期設定(如 ASPNETCORE_ENVIRONMENT、DOTNET_RUNNING_IN_CONTAINER)。latest 標籤,必須指定明確版本號(如 10.0、10.0-alpine)。aspnet:10.0-alpine),但需注意 globalization 相關的相容性問題。version: 欄位。compose.yml 為主要檔名(相容舊稱 docker-compose.yml,但不主動建立)。depends_on 搭配 condition: service_healthy,取代舊式純陣列寫法。compose.override.yml 覆寫正式環境設定(如掛載原始碼 Volume、開啟偵錯埠)。tools
產生或補齊 .gitattributes,統一行尾處理、二進位識別與 lock files 標記,保留既有自訂偏好。
development
產生或補齊前端 Lint 設定(Prettier + ESLint Flat Config),統一格式化與程式碼品質規則,保留既有自訂偏好。
testing
依據事實校閱報告修改技術文件:以事實層為不可違反的約束,由改檔者負責表達層的措辭與行文連貫。Use when the user asks to apply fact-check results to a document, or to edit a document based on a previously produced fact-check-report.md.
data-ai
多份資料檔整合流程。當需要將兩份以上的資料檔(如 JSON、CSV)合併、補齊闕漏欄位或去重成單一檔案時使用。以 dry-run、筆數核對與抽樣比對降低整合錯誤。