全部產品
Search
文件中心

Container Compute Service:構建Windows IIS服務容器鏡像

更新時間:Jan 27, 2026

本文介紹如何在 Windows 平台上構建包含 IIS + ASP.NET (.NET Framework) 的容器鏡像,從而實現在 ACS 叢集中運行 Windows 容器化應用。

適用範圍

在ACS叢集中建立Windows工作負載

準備 Windows Server 的容器鏡像構建環境

  1. 自訂購買ECS執行個體。主要配置參數如下:

    1. 執行個體規格:推薦使用 4 vCPU 和 8 GiB 記憶體。

    2. 鏡像:Windows Server 2022 with Container 資料中心版 64位中文版。

    3. 擴充程式:Docker 社區版。

    4. 公網IP:分配公網 IPv4 地址,公網頻寬為按使用流量,頻寬峰值為100 Mbps。

  2. 啟動Docker服務。

    1. 使用Workbench登入Windows執行個體

    2. 以管理員身份運行 PowerShell,開啟服務視窗。

      services.msc
    3. 在服務視窗中啟動Docker Engine服務。

    4. 在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>

構建鏡像

  1. 在 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
  2. 驗證鏡像構建成功。

    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

建立容器並驗證可用性

  1. 基於myiis-net:v1鏡像建立容器。

    docker run -d --name myiis-net -p 8080:80 myiis-net:v1
  2. 訪問 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 鏡像倉庫。具體流程,請參見使用企業版執行個體推送和拉取鏡像