用于 Docker 的 Visual Studio 容器工具
Visual Studio 中用于开发 Docker 容器的工具易于使用,大大简化了容器化应用程序的生成、调试和部署。 可以使用单个项目的容器,或者将容器业务流程与 Docker Compose 或 Service Fabric 配合使用,以便处理容器中的多个服务。
先决条件
- Docker Desktop
- 安装了“Web 开发”、“Azure 工具”工作负载和/或“.NET Core 跨平台开发”工作负载的 Visual Studio 2019
- 用于使用 .NET Core 进行开发的 .NET Core 开发工具。
- 若要发布到 Azure 容器注册表,需要 Azure 订阅。 注册免费试用版。
Visual Studio 中的 Docker 支持
Docker 支持适用于 ASP.NET 项目、ASP.NET 核心项目和 .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 及更高版本中,容器 窗口可用,可用于查看正在运行的容器、浏览可用映像、查看环境变量、日志和端口映射、检查文件系统、附加调试器或在容器环境中打开终端窗口。 请参阅使用“容器”窗口。
先决条件
- Docker Desktop
- 安装了“Web 开发”、“Azure 工具”工作负载和/或“.NET 桌面开发”工作负载的 Visual Studio 2022
- 若要发布到 Azure 容器注册表,需要一个 Azure 订阅。 注册免费试用版。
Visual Studio 中的 Docker 支持
Docker 支持适用于 ASP.NET 项目、ASP.NET 核心项目和 .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 支持,如以下屏幕截图所示:
备注
对于 .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 支持
向 .NET 7 或更高版本项目添加或启用 Docker 支持时,Visual Studio 会显示 容器基架选项 对话框,该对话框提供了操作系统(Linux 或 Windows)的选择,但也能够选择容器生成类型,Dockerfile 或 .NET SDK。 此对话框不会出现在 .NET Framework 项目或 Azure Functions 项目中。
在 17.11 及更高版本中,还可以指定 容器映像发行版 和 Docker 生成上下文。
“容器映像发行版”指定容器用作基础映像的 OS 映像。 如果在 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 应用
安装 Visual Studio 2022 17.9 及更高版本的 .NET 7 SDK 后,在面向 .NET 6 或更高版本的 ASP.NET Core 项目中,可以选择使用 .NET SDK 的内置支持容器生成,这意味着不需要 Dockerfile;请参阅 使用 dotnet 发布容器化 .NET 应用。 而是使用项目文件中的 MSBuild 属性配置容器,使用 Visual Studio 启动容器的设置在 .json
配置文件中编码,launchSettings.json。
在这里,选择 .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 文件夹,如下图所示:
如果 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 工具的更多详细信息,请阅读以下文章:
使用 Visual Studio 将 ASP.NET 容器部署到容器注册表
使用 Visual Studio 部署到 Azure 容器应用