建立專為專案客製化的 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) 應用程式所需的具體設定與組態。執行此提示詞前,請先確認已填妥必要的設定資訊。請注意,在多數情況下,只需填寫前幾項設定即可;若後續設定不適用於要容器化的專案,可保留預設值。
未特別指定的設定都將使用預設值。預設值標示於[中括號]內。
專案基本資訊
-
要容器化的專案:
[專案名稱 (提供 .csproj 檔案路徑)]
-
使用的 Windows Server SKU:
[Windows Server Core (預設) 或 Windows Server Full]
-
使用的 Windows Server 版本:
[2022、2019 或 2016 (預設為 2022)]
-
Docker 映像檔建置階段 (build stage) 的自訂基礎映像檔 (填 "None" 表示使用標準 Microsoft 基礎映像檔):
[指定建置階段使用的基礎映像檔 (預設為 None)]
-
Docker 映像檔執行階段 (run stage) 的自訂基礎映像檔 (填 "None" 表示使用標準 Microsoft 基礎映像檔):
[指定執行階段使用的基礎映像檔 (預設為 None)]
容器組態
-
容器映像檔必須對外對映 (expose) 的連接埠:
- 主要 HTTP 連接埠:
[例如:80] - 其他連接埠:
[列出所有其他連接埠,或填 "None"]
- 主要 HTTP 連接埠:
-
容器運作時使用的使用者帳戶:
[使用者帳戶,預設為 "ContainerUser"]
-
必須在容器映像檔中設定的 IIS 設定:
[列出任何特定的 IIS 設定,或填 "None"]
建置組態
-
建置容器映像檔前必須執行的自訂建置步驟:
[列出任何特定的建置步驟,或填 "None"]
-
建置容器映像檔後必須執行的自訂建置步驟:
[列出任何特定的建置步驟,或填 "None"]
相依性
-
應在容器映像檔中的 GAC 註冊的 .NET 組件 (assembly):
[組件名稱與版本,或填 "None"]
-
必須複製到容器映像檔並安裝的 MSI:
[MSI 名稱與版本,或填 "None"]
-
必須在容器映像檔中註冊的 COM 元件:
[COM 元件名稱,或填 "None"]
系統組態
-
必須新增到容器映像檔的機碼 (Registry key) 與數值:
[登錄檔路徑與數值,或填 "None"]
-
必須在容器映像檔中設定的環境變數:
[變數名稱與數值,或填 "Use defaults"]
-
必須在容器映像檔中安裝的 Windows Server 角色與功能:
[角色/功能名稱,或填 "None"]
檔案系統
-
需要複製到容器映像檔的檔案/目錄:
[相對於專案根目錄的路徑,或填 "None"]- 容器中的目標位置:
[容器內路徑,或填 "Not applicable"]
-
容器化時需排除的檔案/目錄:
[要排除的路徑,或填 "None"]
.dockerignore 組態
- 要包含在
.dockerignore檔案中的比對規則 (.dockerignore 本身已包含常見的預設規則,此處為額外新增的規則):- 額外比對規則:
[列出任何額外的規則,或填 "None"]
- 額外比對規則:
健康檢查組態
-
健康檢查端點 (Health check endpoint):
[健康檢查 URL 路徑,或填 "None"]
-
健康檢查時間間隔與逾時設定:
[時間間隔與逾時數值,或填 "Use defaults"]
附加指示
-
容器化專案時必須遵循的其他指示:
[特定需求,或填 "None"]
-
需要處理的已知問題:
[描述任何已知問題,或填 "None"]
作用範圍
- ✅ 修改應用程式組態,確保使用 config builder 從環境變數讀取應用程式設定 (app settings) 與連線字串 (connection strings)
- ✅ 建立與設定 ASP.NET 應用程式的 Dockerfile
- ✅ 在 Dockerfile 中指定多階段 (multi-stage) 建置,以建置/發布應用程式並將輸出複製至最終映像檔
- ✅ 設定 Windows 容器平台相容性 (Windows Server Core 或 Full)
- ✅ 正確處理相依性 (GAC 組件、MSI、COM 元件)
- ❌ 不包含基礎架構建置 (假設由其他流程單獨處理)
- ❌ 除容器化所需變更外,不進行任何程式碼修改
執行流程
- 檢視上述容器化設定,以瞭解容器化需求
- 建立
progress.md檔案,使用勾選標記跟踪進度 - 檢查專案的
.csproj檔案中的TargetFrameworkVersion元素,以確認 .NET Framework 版本 - 根據以下條件選擇合適的 Windows Server 容器映像檔:
- 從專案檢測出的 .NET Framework 版本
- 容器化設定中指定的 Windows Server SKU (Core 或 Full)
- 容器化設定中指定的 Windows Server 版本 (2016、2019 或 2022)
- Windows Server Core 標籤可在此查詢:https://github.com/microsoft/dotnet-framework-docker/blob/main/README.aspnet.md#full-tag-listing
- 確認已安裝必要的 NuGet 套件。若缺漏切勿自動安裝。如果未安裝,使用者必須手動進行安裝。若未安裝,請暫停執行此提示詞,並請使用者使用 Visual Studio NuGet 套件管理員或 Visual Studio 套件管理員主控台 (Package Manager Console) 進行安裝。需要以下套件:
Microsoft.Configuration.ConfigurationBuilders.Environment
- 修改
web.config檔案,加入 configuration builder 區段與設定,以從環境變數讀取應用程式設定與連線字串:- 在
configSections中新增 ConfigBuilders 區段 - 在根節點下新增
configBuilders區段 - 為
appSettings和connectionStrings兩者設定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>
- 在
- 在將建立 Dockerfile 的資料夾中建立
LogMonitorConfig.json檔案,方法是複製本提示詞末尾參考的LogMonitorConfig.json檔案內容。除非容器化設定中的指示另有說明,否則檔案內容絕不能修改,且應與參考內容完全一致。- 特別要確保記錄問題的層級未被修改,因為針對 EventLog 來源使用
Information層級會產生不必要的雜訊。
- 特別要確保記錄問題的層級未被修改,因為針對 EventLog 來源使用
- 在專案根目錄建立 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 到相同目錄
- 正確的 LogMonitor.exe URL 為:https://github.com/microsoft/windows-container-tools/releases/download/v2.1.1/LogMonitor.exe
- 將工作目錄設定為 C:\inetpub\wwwroot
- 將建置階段發布的輸出 (位於 C:\publish) 複製到最終映像檔
- 將容器的進入點 (ENTRYPOINT) 設定為透過 ServiceMonitor.exe 執行 LogMonitor.exe 以監控 IIS 服務
ENTRYPOINT [ "C:\\LogMonitor\\LogMonitor.exe", "C:\\ServiceMonitor.exe", "w3svc" ]
- 除非設定檔中指定了自訂基礎映像檔,否則最終階段必須使用
- 建置階段 (Build stage):使用 Windows Server Core 映像檔來建置應用程式
- 請務必考量容器化設定中的所有需求:
- Windows Server SKU 與版本
- 對外對映連接埠
- 容器的使用者帳戶
- IIS 設定
- GAC 組件註冊
- MSI 安裝
- COM 元件註冊
- 機碼 (Registry keys)
- 環境變數
- Windows 角色與功能
- 檔案/目錄複製
- 請參考本提示詞末尾提供的範例建構 Dockerfile,但務必根據具體的專案需求與設定進行客製化。
- 重要: 除非使用者在設定檔中明確要求完整的 Windows Server (full Windows Server) 映像檔,否則請統一使用 Windows Server Core 基礎映像檔
- Dockerfile 應採用多階段 (multi-stage) 建置:
- 在專案根目錄中建立
.dockerignore檔案,以排除無需打包至 Docker 映像檔的檔案。.dockerignore檔案必須至少包含以下項目,以及容器化設定中指定的額外比對規則:- packages/
- bin/
- obj/
- .dockerignore
- Dockerfile
- .git/
- .github/
- .vs/
- .vscode/
- **/node_modules/
- *.user
- *.suo
- **/.DS_Store
- **/Thumbs.db
- 容器化設定中指定的任何額外比對規則
- 若設定中有指定,請設定健康檢查:
- 若有提供健康檢查端點,請在 Dockerfile 中新增 HEALTHCHECK 指示詞
- 在專案檔中新增以下項目,將 dockerfile 納入專案:
<None Include="Dockerfile" /> - 將任務標示為完成:[ ] → [✓]
- 持續執行直到所有任務完成且 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 -->






