本文介紹如何在 Windows 平台上構建包含 IIS + ASP.NET (.NET Framework) 的容器鏡像,從而實現在 ACS 叢集中運行 Windows 容器化應用。
適用範圍
準備 Windows Server 的容器鏡像構建環境
自訂購買ECS執行個體。主要配置參數如下:
執行個體規格:推薦使用 4 vCPU 和 8 GiB 記憶體。
鏡像:Windows Server 2022 with Container 資料中心版 64位中文版。
擴充程式:Docker 社區版。
公網IP:分配公網 IPv4 地址,公網頻寬為按使用流量,頻寬峰值為100 Mbps。
啟動Docker服務。
以管理員身份運行 PowerShell,開啟服務視窗。
services.msc在服務視窗中啟動Docker Engine服務。
在PowerShell中驗證Docker版本。
docker version預期輸出:
Client: Version: 29.1.5 API version: 1.52 Go version: go1.25.6 Git commit: 0e6fee6 Built: Fri Jan 16 12:51:08 2026 OS/Arch: windows/amd64 Context: default Server: Docker Engine - Community Engine: Version: 29.1.5 API version: 1.52 (minimum version 1.44) Go version: go1.25.6 Git commit: 3b01d641 Built: Fri Jan 16 12:48:28 2026 OS/Arch: windows/amd64 Experimental: false
準備構建目錄與檔案
在 ECS 案頭上建立目錄 myiis_net,並在目錄內準備以下內容:
Dockerfile:用於構建 IIS + ASP.NET 的 Windows 容器鏡像。web子目錄:用於存放 ASP.NET 網站檔案。ServiceMonitor.exe:ServiceMonitor 會監控 W3SVC 服務,確保容器正常運行。建議提前下載到本地並放到構建目錄,避免構建時網路不穩定。
目錄結構
myiis_net/
Dockerfile
ServiceMonitor.exe
web/
Web.config
Default.aspx檔案內容
Dockerfile
# escape=`
# 使用反引號作為逸出字元,適配 Windows 路徑
FROM mcr.microsoft.com/windows/servercore:ltsc2022
# 安裝 IIS 和 ASP.NET 組件
# 使用 /NoRestart 避免安裝過程中重啟
RUN dism.exe /online /enable-feature /all /NoRestart `
/featurename:IIS-WebServerRole `
/featurename:IIS-WebServer `
/featurename:IIS-StaticContent `
/featurename:IIS-DefaultDocument `
/featurename:IIS-HttpErrors `
/featurename:IIS-ApplicationDevelopment `
/featurename:IIS-ASPNET45 `
/featurename:IIS-NetFxExtensibility45 `
/featurename:IIS-ISAPIExtensions `
/featurename:IIS-ISAPIFilter
# 複製網站檔案到 IIS 預設網站目錄
COPY web/ C:/inetpub/wwwroot/
# 暴露 80 連接埠
EXPOSE 80
# 複製 ServiceMonitor 並設定為進入點
COPY ServiceMonitor.exe /ServiceMonitor.exe
ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]更多內容,請參見Windows 上的 Dockerfile。
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.8" />
<httpRuntime targetFramework="4.8" />
</system.web>
</configuration>Default.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html>
<html>
<head><title>ASP.NET on IIS</title></head>
<body>
<h1>OK - ASP.NET (.NET Framework) on IIS</h1>
<p>Time: <%= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") %></p>
<p>Machine: <%= Environment.MachineName %></p>
</body>
</html>構建鏡像
在
myiis_net目錄下執行構建命令。docker build -t myiis-net:v1 .預期輸出:
Sending build context to Docker daemon 174.1kB Step 1/6 : FROM mcr.microsoft.com/windows/servercore:ltsc2022 ... Successfully built 97064a3203f1 Successfully tagged myiis-net:v1驗證鏡像構建成功。
docker images預期輸出:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA mcr.microsoft.com/windows/servercore:ltsc2022 9a320792f2e2 4.18GB 0B myiis-net:v1 97064a3203f1 4.34GB 0B U
建立容器並驗證可用性
基於
myiis-net:v1鏡像建立容器。docker run -d --name myiis-net -p 8080:80 myiis-net:v1訪問 ASP.NET 服務。
curl.exe http://localhost:8080/Default.aspx預期輸出:
<!DOCTYPE html> <html> <head><title>ASP.NET on IIS</title></head> <body> <h1>OK - ASP.NET (.NET Framework) on IIS</h1> <p>Time: 2026-**-** 16:51:03</p> <p>Machine: ***73745D***</p> </body> </html>
將鏡像推送到 ACR(可選)
為便於後續複用與部署,可將鏡像推送到阿里雲 ACR 鏡像倉庫。具體流程,請參見使用企業版執行個體推送和拉取鏡像。