官方 .NET Docker 映像
提示
本內容節錄自《容器化 .NET 應用程式的 .NET 微服務架構》(.NET Microservices Architecture for Containerized .NET Applications) 電子書,可以在 .NET Docs 上取得,或免費下載可供離線閱讀的 PDF。
官方 .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/*
來參考最新的預覽版本
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應