.NET 和 Docker 簡介
容器是部署和裝載雲端應用程式的熱門方式之一,其工具包括 Docker、Kubernetes,以及 Podman。 許多開發人員都會選擇容器,因為它直接封裝具有其相依性的應用程式,並讓該應用程式可靠地在任何容器主機上執行。 有廣泛的支援 使用 .NET 搭配容器。
Docker 提供容器 的絕佳
.NET 映像
官方 .NET 容器映像檔會發佈至 Microsoft Artifact Registry,並且可以在 Docker Hub上探索。 生產與
每當發行新的 .NET 修補程式或更新操作系統基底映射時,都會定期更新 .NET 映射。
精雕細琢的容器映像 是 Ubuntu 容器映像,其中包含 .NET 執行環境所需的最小組件集。 這些映像比一般Ubuntu映像小約100 MB,而且 CVE 較少,因為它們的元件較少。 特別是,它們不包含命令列介面或套件管理系統,這大大提高了它們的安全配置。 它們也會包含 非 root 使用者,並且已將該使用者設定為啟用狀態。
建立容器鏡像
您可以使用 Dockerfile 建置容器映射,或依賴 .NET SDK 來產生映像。 如需建置映像的範例,請參閱 dotnet/dotnet-docker 和 dotnet/sdk-container-builds。
下列範例示範在幾個快速步驟中建置和執行容器映像(支援 .NET 8 和 .NET 7.0.300)。
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
是想要使用 Dockerfiles 的開發人員的新選項。
港口
埠對映 是使用容器的關鍵部分。 埠必須在容器外部發佈,才能回應外部 Web 要求。 ASP.NET Core 容器映像 已在 .NET 8 中變更為預設接聽埠 8080
。 .NET 6 和 7 接聽埠 80
。
在先前使用 docker run
的範例中,主機埠 8000
會對應至容器埠 8080
。 Kubernetes 的運作方式類似。
ASPNETCORE_HTTP_PORTS
、ASPNETCORE_HTTPS_PORTS
和 ASPNETCORE_URLS
環境變數可用來設定此行為。
使用者
從 .NET 8 開始,所有映射都包含名為 app
的非根使用者。 依預設情況,雕刻過的影像會設定為啟用此用戶。 發佈應用程式作為 .NET 容器的功能(如 建置容器映像檔 一節所示)也會預設啟用此使用者並設定映像。 在其他所有情境中,app
用戶可以手動設定,例如使用 USER
Dockerfile 指令。 如果已使用 app
設定映像,而且命令需要以 root
身份執行,則 USER
指令可用來將使用者設定為 root
。
保持消息靈通
容器相關新聞會張貼至 dotnet/dotnet-docker 討論,以及 .NET 部落格「容器」類別。
Azure 服務
各種 Azure 服務都支援容器。 您為應用程式建立 Docker 映像,並將其部署至下列其中一項服務:
Azure Kubernetes Service (AKS)
使用 Kubernetes 調整及協調 Windows & Linux 容器。Azure 應用程式服務
使用 PaaS 環境中的容器部署 Web 應用程式或 API。Azure Container Apps
執行您的容器工作負載,而不需管理伺服器、編排或基礎結構,並利用原生支援的 Dapr 和 KEDA,以達到可觀察性及縮減至零的能力。Azure 容器執行個體
在雲端中建立個別容器,而不需要任何較高層級的管理服務。Azure Batch
使用容器執行重複的計算作業。Azure Service Fabric
使用 Windows & Linux 容器,將 .NET 應用程式隨即轉移並現代化至微服務。Azure 容器註冊表 (Azure Container Registry)
儲存和管理所有 Azure 部署類型的容器映像。