Visual Studio Container Tools for Docker

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 及更高版本的情况下,当你向 .NET 7 或更高版本的项目添加 Docker 支持时,有两种容器生成类型可供选择用来添加 Docker 支持。 可以选择添加 Dockerfile 以指定如何生成容器映像,也可以选择使用 .NET SDK 提供的内置容器支持。

在使用 Visual Studio 2022 及更高版本的情况下,当你选择容器业务流程时,可将 Docker Compose 或 Service Fabric 用作容器业务流程服务。

注意

如果你使用完整的 .NET Framework 控制台项目模板,则在创建项目后,支持的选项是“添加容器业务流程协调程序支持”,它包括使用 Service Fabric 或 Docker Compose 的选项。 对于没有业务流程的单个项目,无法在项目创建时添加支持,也无法添加 Docker 支持

在 Visual Studio 2022 中,提供了“容器”窗口,你可用它来查看正在运行的容器,浏览可用的映像,查看环境变量、日志和端口映射,检查文件系统,附加调试器,或者在容器环境中打开终端窗口。 请参阅使用“容器”窗口

注意

对于不同版本的 Docker Desktop,Docker 的许可要求可能有所不同。 请参阅 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 会显示 “容器基架选项”对话框,该对话框不仅可以让你选择操作系统(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 容器部署到容器注册表