您可以在支援的 Visual Studio 專案類型中新增 Docker 容器的支援,例如 ASP.NET Web 專案等。 如需 Visual Studio 版本中支援的專案類型的相關資訊,請參閱 概觀 。
您可以在支援的 Visual Studio 專案類型 (例如 ASP.NET Web 專案等) 中新增對 Docker 或 Podman 容器的支援。 如需 Visual Studio 版本中支援的專案類型的相關資訊,請參閱 概觀 。
先決條件
- Docker 桌面
- Visual Studio 2019 或更新版本 ,已安裝 ASP.NET 和 Web 開發、 Azure 開發 工作負載和/或 .NET Core 跨平台開發 工作負載。
- .NET Core 開發工具, 用於使用 .NET Core 進行開發。
- 若要發佈至 Azure Container Registry,請使用 Azure 訂用帳戶。 註冊免費試用。
先決條件
- Docker 桌面
- Visual Studio 已安裝 ASP.NET 和 Web 開發、 Azure 開發 工作負載和/或 .NET 桌面開發 工作負載。
- 若要發佈至 Azure Container Registry,請使用 Azure 訂用帳戶。 註冊免費試用。
先決條件
- Docker Desktop 或 Podman Desktop 。
- Visual Studio 或 Podman 支援的 Visual Studio 2026,已安裝 ASP.NET 和 Web 開發、 Azure 開發 工作負載和/或 .NET 桌面開發 工作負載。
- 若要發佈至 Azure Container Registry,請使用 Azure 訂用帳戶。 註冊免費試用。
建立專案時新增容器支援
您可以在建立新專案時選取 [啟用 Docker 支援 ],以在專案建立期間啟用容器的支援,如下列螢幕擷取畫面所示:
您可以在建立新專案時選取 [啟用容器支援 ],以在專案建立期間啟用容器支援,如下列螢幕擷取畫面所示:
備註
針對 .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 核心專案之專案節點的滑鼠右鍵功能表 (或操作功能表) 上,如下列螢幕擷取畫面所示:
新增 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 build 或podman 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 啟動容器的設定會編碼在組態檔中 .json , launchSettings.json。
在這裡,選擇 .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 建置內容。
容器映像發行版 會指定容器用作基底映像的 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 啟動容器的設定會編碼在組態檔中 .json , launchSettings.json。
在這裡,選擇 .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 將 ASP.NET 容器部署至容器登錄
使用 Visual Studio 部署至 Azure 容器應用程式