containerize-aspnet-framework

containerize-aspnet-framework

熱門

建立專為專案客製化的 Dockerfile 與 .dockerfile 檔案,將 ASP.NET .NET Framework 專案容器化。

3.7萬星標
4569分支
更新於 2026/7/14
SKILL.md
唯讀
名稱
containerize-aspnet-framework
描述

建立專為專案客製化的 Dockerfile 與 .dockerfile 檔案,將 ASP.NET .NET Framework 專案容器化。

ASP.NET .NET Framework 容器化提示詞

根據下方容器化設定指定的 ASP.NET (.NET Framework) 專案進行容器化,專注於讓應用程式在 Windows Docker 容器中執行所需的變更。容器化過程應完整考量此處指定的所有設定。

切記: 這是 .NET Framework 應用程式,並非 .NET Core。容器化流程會與 .NET Core 應用程式有所不同。

容器化設定

本節包含容器化 ASP.NET (.NET Framework) 應用程式所需的具體設定與組態。執行此提示詞前,請先確認已填妥必要的設定資訊。請注意,在多數情況下,只需填寫前幾項設定即可;若後續設定不適用於要容器化的專案,可保留預設值。

未特別指定的設定都將使用預設值。預設值標示於[中括號]內。

專案基本資訊

  1. 要容器化的專案:

    • [專案名稱 (提供 .csproj 檔案路徑)]
  2. 使用的 Windows Server SKU:

    • [Windows Server Core (預設) 或 Windows Server Full]
  3. 使用的 Windows Server 版本:

    • [2022、2019 或 2016 (預設為 2022)]
  4. Docker 映像檔建置階段 (build stage) 的自訂基礎映像檔 (填 "None" 表示使用標準 Microsoft 基礎映像檔):

    • [指定建置階段使用的基礎映像檔 (預設為 None)]
  5. Docker 映像檔執行階段 (run stage) 的自訂基礎映像檔 (填 "None" 表示使用標準 Microsoft 基礎映像檔):

    • [指定執行階段使用的基礎映像檔 (預設為 None)]

容器組態

  1. 容器映像檔必須對外對映 (expose) 的連接埠:

    • 主要 HTTP 連接埠:[例如:80]
    • 其他連接埠:[列出所有其他連接埠,或填 "None"]
  2. 容器運作時使用的使用者帳戶:

    • [使用者帳戶,預設為 "ContainerUser"]
  3. 必須在容器映像檔中設定的 IIS 設定:

    • [列出任何特定的 IIS 設定,或填 "None"]

建置組態

  1. 建置容器映像檔前必須執行的自訂建置步驟:

    • [列出任何特定的建置步驟,或填 "None"]
  2. 建置容器映像檔後必須執行的自訂建置步驟:

    • [列出任何特定的建置步驟,或填 "None"]

相依性

  1. 應在容器映像檔中的 GAC 註冊的 .NET 組件 (assembly):

    • [組件名稱與版本,或填 "None"]
  2. 必須複製到容器映像檔並安裝的 MSI:

    • [MSI 名稱與版本,或填 "None"]
  3. 必須在容器映像檔中註冊的 COM 元件:

    • [COM 元件名稱,或填 "None"]

系統組態

  1. 必須新增到容器映像檔的機碼 (Registry key) 與數值:

    • [登錄檔路徑與數值,或填 "None"]
  2. 必須在容器映像檔中設定的環境變數:

    • [變數名稱與數值,或填 "Use defaults"]
  3. 必須在容器映像檔中安裝的 Windows Server 角色與功能:

    • [角色/功能名稱,或填 "None"]

檔案系統

  1. 需要複製到容器映像檔的檔案/目錄:

    • [相對於專案根目錄的路徑,或填 "None"]
    • 容器中的目標位置:[容器內路徑,或填 "Not applicable"]
  2. 容器化時需排除的檔案/目錄:

    • [要排除的路徑,或填 "None"]

.dockerignore 組態

  1. 要包含在 .dockerignore 檔案中的比對規則 (.dockerignore 本身已包含常見的預設規則,此處為額外新增的規則):
    • 額外比對規則:[列出任何額外的規則,或填 "None"]

健康檢查組態

  1. 健康檢查端點 (Health check endpoint):

    • [健康檢查 URL 路徑,或填 "None"]
  2. 健康檢查時間間隔與逾時設定:

    • [時間間隔與逾時數值,或填 "Use defaults"]

附加指示

  1. 容器化專案時必須遵循的其他指示:

    • [特定需求,或填 "None"]
  2. 需要處理的已知問題:

    • [描述任何已知問題,或填 "None"]

作用範圍

  • ✅ 修改應用程式組態,確保使用 config builder 從環境變數讀取應用程式設定 (app settings) 與連線字串 (connection strings)
  • ✅ 建立與設定 ASP.NET 應用程式的 Dockerfile
  • ✅ 在 Dockerfile 中指定多階段 (multi-stage) 建置,以建置/發布應用程式並將輸出複製至最終映像檔
  • ✅ 設定 Windows 容器平台相容性 (Windows Server Core 或 Full)
  • ✅ 正確處理相依性 (GAC 組件、MSI、COM 元件)
  • ❌ 不包含基礎架構建置 (假設由其他流程單獨處理)
  • ❌ 除容器化所需變更外,不進行任何程式碼修改

執行流程

  1. 檢視上述容器化設定,以瞭解容器化需求
  2. 建立 progress.md 檔案,使用勾選標記跟踪進度
  3. 檢查專案的 .csproj 檔案中的 TargetFrameworkVersion 元素,以確認 .NET Framework 版本
  4. 根據以下條件選擇合適的 Windows Server 容器映像檔:
  5. 確認已安裝必要的 NuGet 套件。若缺漏切勿自動安裝。如果未安裝,使用者必須手動進行安裝。若未安裝,請暫停執行此提示詞,並請使用者使用 Visual Studio NuGet 套件管理員或 Visual Studio 套件管理員主控台 (Package Manager Console) 進行安裝。需要以下套件:
    • Microsoft.Configuration.ConfigurationBuilders.Environment
  6. 修改 web.config 檔案,加入 configuration builder 區段與設定,以從環境變數讀取應用程式設定與連線字串:
    • configSections 中新增 ConfigBuilders 區段
    • 在根節點下新增 configBuilders 區段
    • appSettingsconnectionStrings 兩者設定 EnvironmentConfigBuilder
    • 範例模式:
      <configSections>
        <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
      </configSections>
      <configBuilders>
        <builders>
          <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment" />
        </builders>
      </configBuilders>
      <appSettings configBuilders="Environment">
        <!-- existing app settings -->
      </appSettings>
      <connectionStrings configBuilders="Environment">
        <!-- existing connection strings -->
      </connectionStrings>
      
  7. 在將建立 Dockerfile 的資料夾中建立 LogMonitorConfig.json 檔案,方法是複製本提示詞末尾參考的 LogMonitorConfig.json 檔案內容。除非容器化設定中的指示另有說明,否則檔案內容絕不能修改,且應與參考內容完全一致。
    • 特別要確保記錄問題的層級未被修改,因為針對 EventLog 來源使用 Information 層級會產生不必要的雜訊。
  8. 在專案根目錄建立 Dockerfile 以將應用程式容器化
    • Dockerfile 應採用多階段 (multi-stage) 建置:
      • 建置階段 (Build stage):使用 Windows Server Core 映像檔來建置應用程式
        • 除非設定檔中指定了自訂基礎映像檔,否則建置階段必須使用 mcr.microsoft.com/dotnet/framework/sdk 基礎映像檔
        • 先複製 sln、csproj 及 packages.config 檔案
        • 若存在 NuGet.config 則一併複製,並設定私有套件來源 (private feeds)
        • 還原 NuGet 套件
        • 接著複製其餘原始碼,並使用 MSBuild 將應用程式建置並發布至 C:\publish
      • 最終階段 (Final stage):使用選定的 Windows Server 映像檔來執行應用程式
        • 除非設定檔中指定了自訂基礎映像檔,否則最終階段必須使用 mcr.microsoft.com/dotnet/framework/aspnet 基礎映像檔
        • LogMonitorConfig.json 檔案複製到容器內的目錄 (例如 C:\LogMonitor)
        • 從 Microsoft 儲存庫下載 LogMonitor.exe 到相同目錄
        • 將工作目錄設定為 C:\inetpub\wwwroot
        • 將建置階段發布的輸出 (位於 C:\publish) 複製到最終映像檔
        • 將容器的進入點 (ENTRYPOINT) 設定為透過 ServiceMonitor.exe 執行 LogMonitor.exe 以監控 IIS 服務
          • ENTRYPOINT [ "C:\\LogMonitor\\LogMonitor.exe", "C:\\ServiceMonitor.exe", "w3svc" ]
    • 請務必考量容器化設定中的所有需求:
      • Windows Server SKU 與版本
      • 對外對映連接埠
      • 容器的使用者帳戶
      • IIS 設定
      • GAC 組件註冊
      • MSI 安裝
      • COM 元件註冊
      • 機碼 (Registry keys)
      • 環境變數
      • Windows 角色與功能
      • 檔案/目錄複製
    • 請參考本提示詞末尾提供的範例建構 Dockerfile,但務必根據具體的專案需求與設定進行客製化。
    • 重要: 除非使用者在設定檔中明確要求完整的 Windows Server (full Windows Server) 映像檔,否則請統一使用 Windows Server Core 基礎映像檔
  9. 在專案根目錄中建立 .dockerignore 檔案,以排除無需打包至 Docker 映像檔的檔案。.dockerignore 檔案必須至少包含以下項目,以及容器化設定中指定的額外比對規則:
    • packages/
    • bin/
    • obj/
    • .dockerignore
    • Dockerfile
    • .git/
    • .github/
    • .vs/
    • .vscode/
    • **/node_modules/
    • *.user
    • *.suo
    • **/.DS_Store
    • **/Thumbs.db
    • 容器化設定中指定的任何額外比對規則
  10. 若設定中有指定,請設定健康檢查:
  • 若有提供健康檢查端點,請在 Dockerfile 中新增 HEALTHCHECK 指示詞
  1. 在專案檔中新增以下項目,將 dockerfile 納入專案:<None Include="Dockerfile" />
  2. 將任務標示為完成:[ ] → [✓]
  3. 持續執行直到所有任務完成且 Docker 建置成功

建置與執行時期驗證

完成 Dockerfile 後,請確認 Docker 建置成功。使用以下命令建置 Docker 映像檔:

docker build -t aspnet-app:latest .

若建置失敗,請檢視錯誤訊息並對 Dockerfile 或專案組態進行相應調整。最後回報成功/失敗結果。

進度追蹤

維護一個具有以下結構的 progress.md 檔案:

# Containerization Progress

## Environment Detection
- [ ] .NET Framework version detection (version: ___)
- [ ] Windows Server SKU selection (SKU: ___)
- [ ] Windows Server version selection (Version: ___)

## Configuration Changes
- [ ] Web.config modifications for configuration builders
- [ ] NuGet package source configuration (if applicable)
- [ ] Copy LogMonitorConfig.json and adjust if required by settings

## Containerization
- [ ] Dockerfile creation
- [ ] .dockerignore file creation
- [ ] Build stage created with SDK image
- [ ] sln, csproj, packages.config, and (if applicable) NuGet.config copied for package restore
- [ ] Runti

<!-- truncated for translation batch; full body continues in source -->