共用方式為


適用於 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 支援 [新增容器 Orchestrator 支援] 選項。

在 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 控制台項目範本,則支援的選項 在專案建立後 新增容器 Orchestrator 支援,以及使用 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 支援

當您將 Docker 支援新增或啟用至 .NET 7 或更新版本專案時,Visual Studio 會顯示 [容器 Scaffolding Options] 對話框,這可讓您選擇操作系統 (Linux 或 Windows),也可以選擇容器組建類型,Dockerfile.NET SDK。 此對話框不會出現在 .NET Framework 專案或 Azure Functions 專案中。

在 17.11 和更新版本中,您也可以指定 容器映像發行版Docker 構建上下文

顯示 [容器搭建選項] 對話框以新增 Docker 支援的螢幕快照。

容器映像發行版 指定容器使用的作為基底映像的操作系統映像。 如果您以容器類型在 Linux 和 Windows 之間切換,此列表就會變更。

有下列映像可供使用:

窗戶:

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

Linux:

  • 預設值 (Debian,但標記為 “8.0”)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • 高山

注意

以 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

顯示 [容器 Scaffold 選項] 對話框的螢幕快照,其中已選取 [.NET SDK] 作為容器構建類型。

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

容器映像發行版 指定容器使用的作為基底映像的操作系統映像。 如果您以容器身分在 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 新增容器協調器支援,請以滑鼠右鍵按兩下 [方案總管] 中的項目節點,然後選擇 [新增 > 容器 Orchestrator 支援]。 然後選擇 [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 核心應用程式部署至 Azure Service Fabric。

後續步驟

如需服務實作和使用 Visual Studio 工具以使用容器的進一步詳細數據,請閱讀下列文章:

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

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

部署至 Azure App Service

使用 Visual Studio 部署至 Azure Container Apps