官方 .NET Docker 映像

提示

本內容節錄自《容器化 .NET 應用程式的 .NET 微服務架構》(.NET Microservices Architecture for Containerized .NET Applications) 電子書,可以在 .NET Docs 上取得,或免費下載可供離線閱讀的 PDF。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

官方 .NET Docker 映像是 Microsoft 建立及最佳化的 .NET Docker 映像。 在 Microsoft 成品登錄 上公開提供。 您可以搜尋目錄來尋找所有 .NET 映像存放庫,例如 .NET SDK 存放庫。

取決於 .NET 版本,以及作業系統和版本 (Linux Debian、Linux Alpine、Windows Nano Server、Windows Server Core 等),每個存放庫可以包含多個映像。 映像存放庫會提供大量的標籤,可讓您能夠除了選擇特定架構版本之外,還能選擇作業系統 (Linux 發行版本或 Windows 版本)。

比較 .NET 和 Docker 映像針對開發與實際執行所做的最佳化

在建置開發人員 Docker 映像時,Microsoft 會著重在下列主要案例︰

  • 映像用來「開發」與建置 .NET 應用程式。

  • 映像用來「執行」.NET 應用程式。

為何有多個映像? 在開發、建置及執行容器化應用程式時,您通常有不同的優先考量。 透過提供這些個別工作的不同映像,Microsoft 會協助最佳化開發、建置及部署應用程式的個別處理程序。

開發與建置期間

開發期間的重點是,您逐一查看變更的速度以及偵錯變更的能力。 映像大小的重要性並不如變更程式碼及快速查看變更的功能。 有些工具和「組建代理程式容器」會在開發與建置流程期間使用開發 .NET 映像 (mcr.microsoft.com/dotnet/sdk:8.0)。 在 Docker 容器中進行建置時,重要的是在編譯應用程式時所需的元素, 這包括編譯器和任何其他 .NET 相依性。

這種組建映像為何如此重要? 您不會將此映像部署到實際執行環境, 而是會使用此映像來建置要放入生產映像的內容。 在使用 Docker 多階段組建時,此映像會用於您的持續整合 (CI) 環境或組建環境。

生產環境

在實際執行環境中,重要的是根據生產 .NET 映像部署及啟動容器的速度。 因此,以 mcr.microsoft.com/dotnet/aspnet:8.0 為基礎且僅限執行階段的映像會很小,可跨越網路快速從 Docker 登錄移動到 Docker 主機。 準備好執行的內容可用最短的時間完成啟動容器到處理結果的流程。 在 Docker 模型中無需進行 C# 程式碼編譯,因為當您使用組建容器執行 dotnet build 或 dotnet publish 時,即會進行編譯。

在這個已經過最佳化調整的映像中,您只要放入執行應用程式所需的二進位檔案和其他內容。 例如,dotnet publish 所建立的內容只會包含已編譯的 .NET 二進位檔、映像、js 和 .css 檔案。 經過一段時間,您就會看到包含已預先進行 jit 編譯 (在執行階段進行,從 IL 到原生的編譯) 之套件的映像。

雖然有多種版本的 .NET 和 ASP.NET Core 映像,但它們全都共用一或多個圖層,包括基底圖層。 因此,儲存映像所需的磁碟空間量很小,僅為您自訂映像及其基底映像之間的差異。 結果是可從登錄快速提取映像。

當您在 Microsoft 成品登錄探索 .NET 映像存放庫時,您會發現多個以標籤分類或標記的多個映像版本。 這些標籤可協助您根據需要的版本決定使用的版本,如同下表中的這些:

映像 註解
mcr.microsoft.com/dotnet/aspnet:8.0 Linux 和 Windows 上的 ASP.NET Core,具有僅執行階段和 ASP.NET Core 最佳化 (多架構)
mcr.microsoft.com/dotnet/sdk:8.0 .NET 8,包含 SDK,可在 Linux 和 Windows 上使用 (多架構)

您可以在 dotnet-docker 中找到所有可用的 Docker 映像,也可使用夜間組建 mcr.microsoft.com/dotnet/nightly/* 來參考最新的預覽版本