共用方式為


適用於 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 支援,如下列螢幕擷取畫面所示:

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

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

注意

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

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

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

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

新增 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。 這個對話方塊不會出現在 .NET Framework 專案或 Azure Functions 專案中。

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

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

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

可用的映像如下:

Windows:

  • Windows Nano Server (建議使用,僅提供 8.0 和更新版本,不適用於原生預先 (AOT) 部署專案)
  • Windows Server Core (僅提供 8.0 和更新版本)

Linux:

  • 預設值 (Debian,但標籤為 “8.0”)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpine

注意

以 Chiseled Ubuntu 映像為基礎、且使用原生預先 (AOT) 部署的容器只能在快速模式中偵錯。 請參閱在 Visual Studio 中自訂 Docker 容器

Docker 建置內容會指定用於 Docker 建置的資料夾。 請參閱 Docker 建置內容。 預設為解決方案資料夾,強烈建議使用這個資料夾。 一個組建需要的所有檔案都必須位於此資料夾下,如果您選擇專案資料夾或其他資料夾,通常不是這種情況。

如果您選擇 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"]

無需 Dockerfile 即可容器化 .NET 應用程式

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

顯示 [容器 Scaffolding 選項] 對話方塊以新增 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>

使用 [容器] 視窗

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

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

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

[容器] 視窗的螢幕擷取畫面。

[容器] 視窗的螢幕擷取畫面。

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

Docker Compose 支援

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

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

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

Visual Studio 中 [方案總管] 中的 Docker 檔案的螢幕擷取畫面。

Visual Studio 中 [方案總管] 中的 Docker 檔案的螢幕擷取畫面。

如果 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 容器部署到容器登錄