適用於 Docker 的 Visual Studio 容器工具

Visual Studio 中所包含、用於使用 Docker 容器進行開發的工具非常容易使用,而且可以大幅簡化容器化應用程式的建置、偵錯及部署程序。 您可以為單一專案使用容器,或搭配使用 Docker Compose 或 Service Fabric 與容器協調流程以使用容器中的多個服務。

必要條件

Visual Studio 中的 Docker 支援

Docker 支援適用於 ASP.NET 專案、ASP.NET Core 專案,以及 .NET Core 和 .NET Framework 主控台專案。

Visual Studio 中對 Docker 的支援,已針對客戶需求在多個版本中進行了變更。 您可以將兩個層級的 Docker 支援新增至專案中,受支援的選項會因專案類型和 Visual Studio 的版本而異。 對於部分支援的專案類型,如果您只想要單一專案的容器而不需使用協調流程,則可以藉由新增 Docker 支援來實現。 下一個層級是容器協調流程支援,它會為您選擇的特定協調器新增適當的支援檔案。

使用 Visual Studio 2019,您可以使用 Docker Compose、Kubernetes 和 Service Fabric 作為容器協調流程服務。

注意

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

在 Visual Studio 2019 版本 16.4 及更新版本中,[容器] 視窗可讓您檢視執行中的容器、瀏覽可用的映像、檢視環境變數、記錄和連接埠對應、檢查檔案系統、附加偵錯工具,或在容器環境內開啟終端機視窗。 請參閱使用 [容器] 視窗

必要條件

Visual Studio 中的 Docker 支援

Docker 支援適用於 ASP.NET 專案、ASP.NET Core 專案,以及 .NET Core 和 .NET Framework 主控台專案。

Visual Studio 中對 Docker 的支援,已針對客戶需求在多個版本中進行了變更。 有多個選項可以將 Docker 支援新增至專案中,受支援的選項會因專案類型和 Visual Studio 的版本而異。 對於部分支援的專案類型,如果您只想要單一專案的容器而不需使用協調流程,則可以藉由新增 Docker 支援來實現。 下一個層級是容器協調流程支援,它會為您選擇的特定協調器新增適當的支援檔案。

使用 Visual Studio 2022 17.9 版和更新版本時,當您將 Docker 支援新增至 .NET 7 或更新版本的專案時,您有兩個容器建置類型可選擇以新增 Docker 支援。 您可以選擇新增 Dockerfile 來指定如何建置容器映像,也可以選擇使用 .NET SDK 提供的內建容器支援。

此外,在 Visual Studio 2022 及更高版本中,當您選擇容器協調流程時,可以使用 Docker Compose 或 Service Fabric 作為容器協調流程服務。

注意

如果您使用完整的 .NET Framework 主控台專案範本,在專案建立後支援的選項是 [新增容器協調器] 支援,以及使用 Service Fabric 或 Docker Compose 的選項。 在專案建立時新增支援以及在沒有協調流程的情況下為單一專案新增 Docker 支援不是可用選項。

在 Visual Studio 2022 中,[容器] 視窗可讓您檢視執行中的容器、瀏覽可用的映像、檢視環境變數、記錄和連接埠對應、檢查檔案系統、附加偵錯工具,或在容器環境內開啟終端機視窗。 請參閱使用 [容器] 視窗

注意

Docker 的授權需求可能會因不同版本的 Docker Desktop 而有所不同。 請參閱 Docker 文件,以了解根據您的情況使用您的 Docker Desktop 版本進行開發的目前授權要求。

新增 Docker 支援

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

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

注意

針對 .NET Framework 專案 (非 .NET Core),僅提供 Windows 容器。

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

Screenshot showing how to add Docker Support menu option in Visual Studio.

Screenshot showing how to add Docker Support menu option in 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"]

使用 Dockerfile 容器建置類型新增 Docker 支援

當您在.NET 7 或更高版本的專案中新增或啟用 Docker 支援時,Visual Studio 會顯示容器 Scaffolding 選項對話方塊,您可以在其中選擇作業系統 (Linux 或Windows),也可以選擇容器建置類型,Dockerfile.NET SDK

如果您選擇 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:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.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 選項新增 Docker 支援

在已安裝 .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 中。

Screenshot showing the Container Scaffolding Options dialog for adding Docker support.

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 中的選擇,例如選擇符合 .NET 目標版本的容器基礎映像以及要設定的環境變數。 自訂容器中列出了專案檔案中用於設定容器的相關設定。

使用 [容器] 視窗

[容器] 視窗可讓您檢視電腦上的容器和映像,並查看其運作方式。 您可以檢視檔案系統、已裝載的磁碟區、環境變數、使用的連接埠,以及查看記錄檔。

使用快速啟動 (Ctrl+Q) 來開啟 [容器] 視窗,然後輸入 containers。 您可以使用固定控制項將視窗放在某個位置。 因為視窗的寬度,所以在固定在螢幕底部時效果最好。

選取容器,並使用索引標籤來檢視可用的資訊。 若要簽出,請執行已啟用 Docker 的應用程式、開啟 [檔案] 索引標籤,然後展開 [應用程式] 資料夾,以查看容器上已部署的應用程式。

Screenshot of Containers window.

Screenshot of Containers window.

如需詳細資訊,請參閱使用 [容器] 視窗

Docker Compose 支援

如果要使用 Docker Compose 撰寫多容器解決方案,請將容器協調器支援新增至您的專案。 如果它們在同一個 docker-compose.yml 文件中定義,則允許您同時運行和調試一組容器(整個解決方案或一組項目)。

若要使用 Docker Compose 新增容器協調器支援,請以滑鼠右鍵按一下 [方案總管] 中的專案節點,然後選擇 [新增 > 容器協調器支援]。 然後選擇 [Docker Compose] 以管理容器。

向專案新增容器協調器支援後,您會看到專案中新增了 Dockerfile (如果找不到),且 [方案總管] 中的方案新增了 docker-compose 資料夾,如下所示:

Screenshot of Docker files in Solution Explorer in Visual Studio.

Screenshot of Docker files in Solution Explorer in Visual Studio.

如果 docker-compose.yml 已存在,則 Visual Studio 只會向其新增所需的組態程式碼行。

使用 Docker Compose 對要控制的其他專案重複此程序。

如果您使用大量的服務,您可以選取您要在偵錯工作階段中啟動的服務子集,以節省時間和計算資源。 請參閱啟動 Compose 服務的子集

注意

請注意,Visual Studio 工具不支援遠端 Docker 主機。

Service Fabric 支援

使用 Visual Studio 中的 Service Fabric 工具,您可以開發及偵錯 Azure Service Fabric、在本機執行和偵錯,並部署至 Azure。

Visual Studio 2019 及更新版本支援使用 Windows 容器和 Service Fabric 協調流程的開發容器化微服務。

如需詳細的教學課程,請參閱教學課程:將 Windows 容器中的 .NET 應用程式部署至 Azure Service Fabric

如需有關 Azure Service Fabric 的詳細資訊,請參閱 Service Fabric

持續傳遞和持續整合 (CI/CD)

Visual Studio 可與 Azure Pipelines 輕鬆整合,實現服務程式碼和設定的自動化和持續整合與傳遞。 若要開始,請參閱建立您的第一個管線

如需 Service Fabric,請參閱教學課程:使用 Azure DevOps Projects 將 ASP.NET Core 應用程式部署至 Azure Service Fabric

下一步

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

對本機 Docker 容器中的應用程式偵錯

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