共用方式為


.NET 和 Docker 簡介

容器是部署和裝載雲端應用程式的熱門方式之一,其工具包括 DockerKubernetes,以及 Podman。 許多開發人員都會選擇容器,因為它直接封裝具有其相依性的應用程式,並讓該應用程式可靠地在任何容器主機上執行。 有廣泛的支援 使用 .NET 搭配容器

Docker 提供容器 的絕佳 概觀。 Docker Desktop:Community Edition 是用來在開發人員桌面電腦上使用容器的好工具。

.NET 映像

官方 .NET 容器映像檔會發佈至 Microsoft Artifact Registry,並且可以在 Docker Hub上探索。 生產與 SDK 映射 有 運行時間映射, 用於建置程式代碼,適用於 Linux(Alpine、Debian、Ubuntu、Mariner) 和 Windows。 如需詳細資訊,請參閱.NET 容器映像。

每當發行新的 .NET 修補程式或更新操作系統基底映射時,都會定期更新 .NET 映射。

精雕細琢的容器映像 是 Ubuntu 容器映像,其中包含 .NET 執行環境所需的最小組件集。 這些映像比一般Ubuntu映像小約100 MB,而且 CVE 較少,因為它們的元件較少。 特別是,它們不包含命令列介面或套件管理系統,這大大提高了它們的安全配置。 它們也會包含 非 root 使用者,並且已將該使用者設定為啟用狀態。

建立容器鏡像

您可以使用 Dockerfile 建置容器映射,或依賴 .NET SDK 來產生映像。 如需建置映像的範例,請參閱 dotnet/dotnet-dockerdotnet/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_PORTSASPNETCORE_HTTPS_PORTSASPNETCORE_URLS 環境變數可用來設定此行為。

使用者

從 .NET 8 開始,所有映射都包含名為 app的非根使用者。 依預設情況,雕刻過的影像會設定為啟用此用戶。 發佈應用程式作為 .NET 容器的功能(如 建置容器映像檔 一節所示)也會預設啟用此使用者並設定映像。 在其他所有情境中,app 用戶可以手動設定,例如使用 USERDockerfile 指令。 如果已使用 app 設定映像,而且命令需要以 root身份執行,則 USER 指令可用來將使用者設定為 root

保持消息靈通

容器相關新聞會張貼至 dotnet/dotnet-docker 討論,以及 .NET 部落格「容器」類別

Azure 服務

各種 Azure 服務都支援容器。 您為應用程式建立 Docker 映像,並將其部署至下列其中一項服務:

後續步驟