共用方式為


容器化 .NET Core 應用程式

適用於:Windows Server 2025、Windows Server 2022、Windows Server 2019、Windows Server 2016

本主題描述如何在設定環境之後,封裝現有的範例 .NET 應用程式以部署為 Windows 容器,如開始使用 所述:為容器準備 windows,以及執行您的第一個容器,如 執行您的第一個 Windows 容器中所述。

您也需要電腦上安裝 Git 原始檔控制系統。 若要安裝,請瀏覽 git

從 GitHub 複製範例程式代碼

所有容器範例原始程式碼都會保留在名為 windows-container-samples資料夾中的 Virtualization-Documentation git 存放庫之下。

  1. 開啟 PowerShell 會話,並將目錄切換到您想儲存此儲存庫的資料夾。 (其他命令提示字元窗口類型也正常運作,但我們的範例命令使用PowerShell。

  2. 將存放庫複製到您目前的工作目錄:

    git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
    
  3. 使用下列命令,流覽至 Virtualization-Documentation\windows-container-samples\asp-net-getting-started 下找到的範例目錄,並建立 Dockerfile。

    Dockerfile 就像 makefile,它是指示清單,告知容器引擎如何建置容器映像。

    # Navigate into the sample directory
    Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started
    
    # Create the Dockerfile for our project
    New-Item -Name Dockerfile -ItemType file
    

撰寫 Dockerfile

開啟您剛才使用您想要的文本編輯器建立的 Dockerfile,然後新增下列內容:

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

讓我們逐行細分它,並說明每個指示的用途。

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

第一組程式碼行宣告我們將使用哪個基礎映像檔來建置容器。 如果本機系統還沒有此映射,則 Docker 會自動嘗試並擷取它。 mcr.microsoft.com/dotnet/core/sdk:2.1 隨附已安裝的 .NET Core 2.1 SDK 套件,因此它可以建置以 2.1 版為目標的 ASP .NET Core 專案。 下一個指令會將容器中的工作目錄變更為 /app,因此在此上下文下執行這個指令之後的所有命令。

COPY *.csproj ./
RUN dotnet restore

接下來,這些指示會將 .csproj 檔案複製到 build-env 容器 /app 目錄。 複製此檔案之後,.NET 會從中讀取資料,然後進行擷取專案所需的所有相依性和工具。

COPY . ./
RUN dotnet publish -c Release -o out

一旦 .NET 將所有相依性提取到 build-env 容器,下一個指示會將所有專案來源檔案複製到容器中。 然後,我們會告訴 .NET 使用發行組態發佈應用程式,並指定輸出路徑。

編譯應該會成功。 現在我們必須建置最終映像。

提示

本快速上手指南會從源碼建立 .NET Core 專案。 建置容器映射時,最好只將 包含在容器映射中 生產承載及其相依性。 我們不希望在最終映像中包含 .NET Core SDK,因為我們只需要 .NET Core 執行階段,所以 dockerfile 是寫來使用封裝了 SDK 的暫存容器 build-env 來建置應用程式。

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

由於我們的應用程式是 ASP.NET,因此我們會指定包含此執行階段的映像檔。 然後,我們會將暫存容器輸出目錄中的所有檔案複製到最後一個容器。 我們會將容器設定為在啟動時使用新應用程式作為容器的入口點來運行。

我們已撰寫 dockerfile 來執行 多階段建置。 執行 dockerfile 時,它會使用暫存容器 build-env,搭配 .NET core 2.1 SDK 來建置範例應用程式,然後將輸出的二進位檔複製到只包含 .NET core 2.1 運行時間的另一個容器中,以便我們將最終容器的大小降到最低。

建置並執行應用程式

撰寫 Dockerfile 之後,我們可以將 Docker 指向 Dockerfile,並告知其建置並執行映射:

  1. 在命令提示字元視窗中,流覽至 dockerfile 所在的目錄,然後執行 docker build 命令,從 Dockerfile 建置容器。

    docker build -t my-asp-app .
    
  2. 若要執行新建置的容器,請執行 docker run 命令。

    docker run -d -p 5000:80 --name myapp my-asp-app
    

    讓我們剖析此命令:

    • -d 會告訴 Docker 執行容器「中斷連結」,這表示容器內沒有任何控制台連結至控制台。 容器會在背景中執行。
    • -p 5000:80 會指示 Docker 將主機上的埠 5000 對應至容器中的埠 80。 每個容器都會取得自己的IP位址。 ASP .NET 預設會在埠 80 上接聽。 埠對應允許我們通過對應的埠訪問主機的 IP 位址,然後 Docker 將所有流量轉發到容器內的目的埠。
    • --name myapp 告訴 Docker 為這個容器提供方便查詢的名稱(不需要查閱 Docker 在運行時間指派的容器識別符)。
    • my-asp-app 是我們想要 Docker 執行的映像。 這是作為 docker build 程式之最終產生的容器映像。
  3. 開啟網頁瀏覽器並流覽至 http://localhost:5000 以查看您的容器化應用程式。

    ASP.NET Core 網頁,從容器中的 localhost 執行

後續步驟

  1. 下一個步驟是使用 Azure Container Registry 將容器化 ASP.NET Web 應用程式發佈至私人登錄。 這可讓您在組織中部署它。

    當您進入 將容器映射推送至登錄的 區段時,請指定您剛才封裝的 ASP.NET 應用程式名稱(my-asp-app),以及您的容器登錄(例如:contoso-container-registry):

    docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
    

    若要查看更多應用程式範例及其相關聯的 dockerfiles,請參閱 其他容器範例

  2. 將應用程式發佈至容器登錄后,下一個步驟是將應用程式部署至您使用 Azure Kubernetes Service 建立的 Kubernetes 叢集。