適用於 Docker 的 Visual Studio 容器工具
Visual Studio 中用於使用 Docker 容器進行開發的工具很容易使用,並大幅簡化容器化應用程式的建置、偵錯和部署。 您可以使用單一專案的容器,或使用容器協調流程搭配 Docker Compose 或 Service Fabric 來處理容器中的多個服務。
先決條件
- Docker Desktop
- 已安裝 Web Development、Azure Tools 工作負載和/或 .NET Core 跨平台開發 工作負載的 Visual Studio 2019
- .NET Core 開發工具 使用 .NET Core 進行開發。
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
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 版和更新版本中,容器 視窗可供使用,可讓您檢視執行中的容器、流覽可用的映射、檢視環境變數、記錄和埠對應、檢查文件系統、附加調試程式,或在容器環境內開啟終端機視窗。 請參閱 使用 [容器] 視窗。
先決條件
- Docker Desktop
- Visual Studio 2022 已安裝 Web Development、Azure Tools 工作負載和/或 .NET 桌面開發 工作負載
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
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 支援],如下列螢幕快照所示:
注意
針對 .NET Framework 專案(而非 .NET Core),只能使用 Windows 容器。
您可以在 [方案總管] 中選取 >Docker 支援],將 Docker 支援新增至現有的專案。 [新增 > Docker 支援] 和 [> 新增容器協調器支援] 命令位於 ASP.NET Core 專案的右鍵選單(或上下文選單)中 [方案總管] 中,如下列螢幕截圖所示:
新增 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 構建上下文。
容器映像發行版 指定容器使用的作為基底映像的操作系統映像。 如果您以容器類型在 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。
在這裡,選擇 [.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 資料夾新增至 方案總管中的方案,如下所示:
如果 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 工具以使用容器的進一步詳細數據,請閱讀下列文章:
使用 Visual Studio 將 ASP.NET 容器部署至容器登錄