共用方式為


新增容器支援

您可以在支援的 Visual Studio 專案類型中新增 Docker 容器的支援,例如 ASP.NET Web 專案等。 如需 Visual Studio 版本中支援的專案類型的相關資訊,請參閱 概觀

您可以在支援的 Visual Studio 專案類型 (例如 ASP.NET Web 專案等) 中新增對 Docker 或 Podman 容器的支援。 如需 Visual Studio 版本中支援的專案類型的相關資訊,請參閱 概觀

先決條件

先決條件

  • Docker 桌面
  • Visual Studio 已安裝 ASP.NET 和 Web 開發Azure 開發 工作負載和/或 .NET 桌面開發 工作負載。
  • 若要發佈至 Azure Container Registry,請使用 Azure 訂用帳戶。 註冊免費試用

先決條件

建立專案時新增容器支援

您可以在建立新專案時選取 [啟用 Docker 支援 ],以在專案建立期間啟用容器的支援,如下列螢幕擷取畫面所示:

螢幕擷取畫面顯示如何在 Visual Studio 中啟用新 ASP.NET Core Web 應用程式的 Docker 支援。

您可以在建立新專案時選取 [啟用容器支援 ],以在專案建立期間啟用容器支援,如下列螢幕擷取畫面所示:

螢幕擷取畫面顯示如何在 Visual Studio 中啟用新 ASP.NET Core Web 應用程式的容器支援。

備註

針對 .NET Framework 專案 (不是 .NET Core),只有 Windows 容器可供使用。

備註

建立 .NET Framework 或 .NET Core 主控台專案時,沒有 新增 Docker 支援的選項。 建立 .NET Core 主控台應用程式專案之後,可以使用 [ 新增 Docker 支援 ] 選項。 .NET Framework 主控台應用程式專案不支援建立專案之後的 [ 新增 Docker 支援 ] 選項。 建立之後,.NET Framework 或 .NET Core 主控台專案都支援使用 Service Fabric 或 Docker Compose 的 [ 新增容器協調器支援 ] 選項。

備註

如果您使用完整的 .NET Framework 主控台專案範本,則支援的選項是 [在專案建立之後 新增容器協調器支援 ],並提供使用 Service Fabric 或 Docker Compose 的選項。 在專案建立時新增支援和為沒有協調流程的單一專案新增 Docker 支援 是無法使用的選項。

備註

目前版本的 Visual Studio 已停止支援 .NET Framework 容器。 .NET Framework 容器支援直到 Visual Studio 2022 版本 17.14。

將容器支援新增至現有專案

您可以在 [方案總管] 中選取 [>Docker 支援],將 Docker 支援新增至現有專案。 [ 新增 > Docker 支援 ] 和 [ 新增 > 容器 Orchestrator 支援 ] 命令位於 方案總管中 ASP.NET 核心專案專案節點的滑鼠右鍵功能表 (或操作功能表) 上,如下列螢幕擷取畫面所示:

您可以在 [方案總管] 中選取 [>容器支援],將 Docker 支援新增至現有專案。 [ 新增 > 容器支援 ] 和 [ 新增 > 容器 Orchestrator 支援 ] 命令位於 方案總管中 ASP.NET 核心專案之專案節點的滑鼠右鍵功能表 (或操作功能表) 上,如下列螢幕擷取畫面所示:

螢幕擷取畫面顯示 Visual Studio 中的 [新增 Docker 支援] 功能表選項。

螢幕擷取畫面顯示 Visual Studio 中的 [新增容器支援] 功能表選項。

新增 Docker 支援

當您新增或啟用 Docker 支援時,Visual Studio 會將下列專案新增至專案:

  • Dockerfile 檔案
  • 一個 .dockerignore 檔案
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets 的 NuGet 套件參考

您新增的 Dockerfile 類似於下列程式碼。 在此範例中,專案名為 WebApplication-Docker,而您選擇了 Linux 容器:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

選擇容器建置類型和其他選項

當您將容器支援新增至 .NET 7 或更高版本的專案時,Visual Studio 會顯示 [容器腳手架選項] 對話方塊,可讓您選擇作業系統(Linux 或 Windows),也可以選擇容器建置類型,分別是 Dockerfile.NET SDK

您也可以指定 容器映像發行版容器建置內容

螢幕擷取畫面顯示 [容器鷹架選項] 對話方塊,以新增容器支援。

容器映像發行版 會指定容器用作基底映像的 OS 映像。 如果您在 Linux 和 Windows 之間切換作為容器類型,則此清單會變更。

下列影像可供使用:

窗戶:

  • Windows Nano Server (建議,僅適用於 8.0 和更新版本,未針對 原生預先(AOT)部署 專案預設)
  • Windows Server Core (僅適用於 8.0 和更新版本)

Linux:

  • 預設(Debian,但標籤與您的目標 .NET 版本相符)
  • Debian
  • Ubuntu
  • 精雕細琢的 Ubuntu
  • 高山

備註

使用以 Chiseled Ubuntu 映像為基礎並採用原生提前(AOT)部署的容器只能在快取模式中偵錯。 請參閱 在 Visual Studio 中自訂 Docker 容器

容器建置上下文 會指定用於 docker buildpodman build 的資料夾。 請參閱 Docker 建置環境定義Podman 建置。 預設值是解決方案資料夾,建議使用。 建置所需的所有檔案都需要位於此資料夾下,如果您選擇專案資料夾或其他資料夾,則情況並非如此。

Dockerfile 容器建置類型

如果您選擇 Dockerfile 容器組建類型,Visual Studio 會將下列專案新增至專案:

  • Dockerfile 檔案
  • 一個 .dockerignore 檔案
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets 的 NuGet 套件參考

您新增的 Dockerfile 將類似於以下程式碼。 在此範例中,專案名為 WebApplication-Docker,而您選擇了 Linux 容器:

# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication15-AddContainerSupport.dll"]

.NET SDK 容器組建類型

您可以使用 .NET SDK 對容器組建的內建支援,這表示您不需要 Dockerfile;請參閱 使用 dotnet publish 容器化 .NET 應用程式。 相反地,您會使用專案檔中的 MSBuild 屬性來設定容器,而使用 Visual Studio 啟動容器的設定會編碼在組態檔中 .jsonlaunchSettings.json

螢幕擷取畫面顯示 [容器腳手架選項] 對話方塊,以新增 Docker 支援,並選取 .NET SDK 作為容器組建類型。

在這裡,選擇 .NET SDK 作為容器建置類型,以使用 .NET SDK 的容器管理,而不是 Dockerfile。

容器映像發行版 會指定容器用作基底映像的 OS 映像。 如果您在 Linux 和 Windows 之間切換作為容器,則此清單會變更。 請參閱上一節以取得可用影像的清單。

launchSettings.json 中的 .NET SDK 容器組建專案看起來像下列程式碼:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

.NET SDK 會管理一些已編碼在 Dockerfile 中的設定,例如容器基底映像,以及要設定的環境變數。 專案檔中可用於容器組態的設定列在 自訂容器中。 例如, 容器映像發行版 會儲存在專案檔中做為屬性 ContainerBaseImage 。 您可以稍後編輯專案檔來變更它。

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

選擇容器建置類型和其他選項

當您將 Docker 支援新增至 .NET 7 或更新版本的專案時,Visual Studio 會顯示[容器腳手架選項]對話方塊,讓您選擇作業系統(Linux 或 Windows),還可以選擇容器組建類型Dockerfile.NET SDK。 此對話方塊不會出現在 .NET Framework 專案中。

在 17.11 和更新版本中,您也可以指定 容器映像發行版Docker 建置內容

螢幕擷取畫面顯示 [容器腳手架選項] 對話方塊,以新增 Docker 支援。

容器映像發行版 會指定容器用作基底映像的 OS 映像。 如果您在 Linux 和 Windows 之間切換作為容器類型,則此清單會變更。

下列影像可供使用:

窗戶:

  • Windows Nano Server (建議,僅適用於 8.0 和更新版本,未針對 原生預先(AOT)部署 專案預設)
  • Windows Server Core (僅適用於 8.0 和更新版本)

Linux:

  • 預設(Debian,但標籤為「8.0」)
  • Debian
  • Ubuntu
  • 精雕細琢的 Ubuntu
  • 高山

備註

使用以 Chiseled Ubuntu 映像為基礎並採用原生提前(AOT)部署的容器只能在快取模式中偵錯。 請參閱 在 Visual Studio 中自訂 Docker 容器

Docker 建置環境定義 會指定用於 Docker 建置的資料夾。 請參閱 Docker 建置內容。 預設值是解決方案資料夾,建議使用。 建置所需的所有檔案都需要位於此資料夾下,如果您選擇專案資料夾或其他資料夾,則情況並非如此。

Dockerfile 容器建置類型

如果您選擇 Dockerfile 容器組建類型,Visual Studio 會將下列專案新增至專案:

  • Dockerfile 檔案
  • 一個 .dockerignore 檔案
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets 的 NuGet 套件參考

您新增的 Dockerfile 將類似於以下程式碼。 在此範例中,專案名為 WebApplication-Docker,而您選擇了 Linux 容器:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

.NET SDK 容器組建類型

在安裝了 .NET 7 SDK 的 Visual Studio 2022 17.9 和更新版本中,在以 .NET 6 或更新版本為目標的 ASP.NET Core 專案中,您可以選擇使用 .NET SDK 對容器組建的內建支援,這表示您不需要 Dockerfile;請參閱 使用 dotnet publish 容器化 .NET 應用程式。 相反地,您會使用專案檔中的 MSBuild 屬性來設定容器,而使用 Visual Studio 啟動容器的設定會編碼在組態檔中 .jsonlaunchSettings.json

螢幕擷取畫面顯示 [容器腳手架選項] 對話方塊,以新增 Docker 支援,並選取 .NET SDK 作為容器組建類型。

在這裡,選擇 .NET SDK 作為容器建置類型,以使用 .NET SDK 的容器管理,而不是 Dockerfile。

容器映像發行版 會指定容器用作基底映像的 OS 映像。 如果您在 Linux 和 Windows 之間切換作為容器,則此清單會變更。 請參閱上一節以取得可用影像的清單。

launchSettings.json 中的 .NET SDK 容器組建專案看起來像下列程式碼:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

.NET SDK 會管理一些已編碼在 Dockerfile 中的設定,例如容器基底映像,以及要設定的環境變數。 專案檔中可用於容器組態的設定列在 自訂容器中。 例如, 容器映像發行版 會儲存在專案檔中做為屬性 ContainerBaseImage 。 您可以稍後編輯專案檔來變更它。

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

後續步驟

如需服務實作和使用 Visual Studio 工具來處理容器的詳細資訊,請閱讀下列文章:

Visual Studio 中的 Docker

在本機容器中偵錯應用程式

使用 Visual Studio 將 ASP.NET 容器部署至容器登錄

部署到 Azure App Service

使用 Visual Studio 部署至 Azure 容器應用程式