.NET 和 Docker 簡介
容器是部署和裝載雲端應用程式的最熱門方式之一,使用包含 Docker、Kubernetes 和 Podman 等工具。 許多開發人員都會選擇容器,因為它直接將具有其相依性的應用程式一起封裝,並讓該應用程式可靠地在任何容器主機上執行。 搭配容器使用 .NET 有受到廣泛支援。
Docker 提供容器的絕佳概觀。 Docker Desktop: Community Edition 是在開發人員桌上型電腦上使用容器的可利用好工具。
.NET 映像
官方 .NET 容器映像會發佈至 Microsoft 成品登錄,而且可在 Docker Hub 上對其進行搜尋。 有生產用的執行階段映像以及建置程式碼用的 SDK 映像,都適用於 Linux (Alpine、Debian、Ubuntu、Mariner) 和 Windows。 如需詳細資訊,請參閱 .NET 容器映像。
每當發佈新的 .NET 修補程式或更新作業系統基礎映像時,都會定期更新 .NET 映像。
Chiseled 容器映像是 Ubuntu 容器映像,其中包含 .NET 執行階段所需的最小元件集。 這些映像比一般 Ubuntu 映像小約 100 MB,而且因為其元件較少,所以有較少的 CVE。 特別的是它們不包含殼層或套件管理員,這可大幅改善其安全性設定檔。 它們也包含非根使用者,且會以已啟用該使用者進行設定。
建置容器映像
您可以使用 Dockerfile 建置容器映像,或依賴 .NET SDK 來產生映像。 如需建置映像的範例,請參閱 dotnet/dotnet-docker 以及 dotnet/sdk-container-builds (英文)。
下列範例說明透過幾個快速步驟建置和執行容器映像 (.NET 8 and .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
的非根使用者。 根據預設,Chiseled 映像會以已啟用本使用者進行設定。 將應用程式發佈為 .NET 容器功能 (如建置容器映像一節所示) 也會預設以已啟用本使用者進行設定映像。 在所有其他案例中,您可以手動設定 app
使用者,例如使用 USER
Dockerfile 指示。 如果已使用 app
設定映像,且命令需要作為 root
執行,則可使用 USER
指示來將使用者設為 root
。
隨時掌握狀況
容器相關新聞會張貼至 dotnet/dotnet-docker 討論和 .NET 部落格「容器」類別。
Azure 服務
各種 Azure 服務支援容器。 您可以為應用程式建立 Docker 映像,並將它部署到下列其中一個服務:
Azure Kubernetes Service (AKS)
使用 Kubernetes 調整 Windows 與 Linux 容器規模並對其進行協調。Azure App Service
在 PaaS 環境中使用容器部署 Web 應用程式或 API。Azure 容器應用程式
執行您的容器工作負載,而不需要管理伺服器、協調流程或基礎結構,並利用 Dapr 和 KEDA 的原生支援來觀察性,並調整為零。Azure 容器執行個體
在沒有任何較高層級管理服務的情況下,於雲端建立獨立容器。Azure Batch
使用容器執行重複的計算工作。Azure Service Fabric
使用 Windows 與 Linux 容器將 .NET 應用程式提升、轉移及現代化為微服務。Azure Container Registry
儲存及管理所有 Azure 部署類型的容器映像。