快速入门:Visual Studio 中的 Docker

使用 Visual Studio,可以轻松地生成、调试和运行容器化的 ASP.NET Core 应用程序并将其发布到 Azure 容器注册表 (ACR)、Docker Hub、Azure 应用服务或你自己的容器注册表。 在本文中,我们将发布到 ACR。

先决条件

安装和设置

要安装 Docker,请先查看用于 Windows 的 Docker Desktop:安装须知了解相关信息。 然后安装用于 Windows 的 Docker Desktop

向 Docker 容器添加项目

  1. 在 Visual Studio 菜单中,选择“文件”>“新建”>“项目”。

  2. 在“新建项目”对话框的“模板”部分下,选择“Visual C#”>“Web”。

  3. 选择“ASP.NET Core Web 应用程序”,或者如果要使用 .NET Framework 而不是 .NET Core,请选择 ASP.NET Web 应用程序 。

  4. 为新应用程序指定名称(或使用默认值),并选择“确定”。

  5. 选择“Web 应用程序” 。

  6. 勾选“启用 Docker 支持”复选框 。

    “启用 Docker 支持”复选框

    屏幕截图显示 .NET Core;如果使用的是 .NET Framework,则略有不同。

  7. 选择所需的容器类型(Windows 或 Linux),然后单击“确定” 。

Dockerfile 概述

Dockerfile,用于创建最终 Docker 映像的方案,已在项目中创建 。 请参阅 Dockerfile 引用,了解其中的命令:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]

前面的 Dockerfile 基于 microsoft/aspnetcore 映像,并包括通过构建项目并将其添加到容器中修改基本映像的说明 。 如果使用的是 .NET Framework,则基本映像将有所不同。

如果选中了新建项目对话框的“为 HTTPS 配置”复选框,则 Dockerfile 公开两个端口 。 一个端口用于 HTTP 流量;另一个端口用于 HTTPS。 如果未选中该复选框,则为 HTTP 流量公开单个端口 (80)。

调试

在工具栏的调试下拉列表中选择“Docker” ,然后开始调试应用。 你可能会看到提示信任证书的消息;选择信任证书以继续。

“输出”窗口显示正在进行的操作 。

依次选择“工具”菜单 >“NuGet 包管理器”>“包管理器控制台”,打开包管理器控制台 (PMC) 。

最终得到的应用的 Docker 映像标记为“开发” 。 该映像基于 microsoft/dotnet 基础映像的 2.1-aspnetcore-runtime 标记 。 在“包管理器控制台”(PMC) 窗口中运行 docker images 命令 。 显示了计算机上的映像:

REPOSITORY        TAG                     IMAGE ID      CREATED         SIZE
hellodockertools  dev                     d72ce0f1dfe7  30 seconds ago  255MB
microsoft/dotnet  2.1-aspnetcore-runtime  fcc3887985bb  6 days ago      255MB

备注

“开发”映像不包含应用程序二进制文件和其他内容,因为“调试”配置使用卷装载提供迭代编辑和调试体验 。 若要创建包含所有内容的生产映像,请使用“版本”配置 。

在 PMC 中运行 docker ps 命令。 请注意,应用使用容器运行:

CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS              PORTS                   NAMES
baf9a678c88d        hellodockertools:dev   "C:\\remote_debugge..."   21 seconds ago      Up 19 seconds       0.0.0.0:37630->80/tcp   dockercompose4642749010770307127_hellodockertools_1

发布 Docker 映像

完成应用程序的开发和调试循环后,可以创建应用程序的生产映像。

  1. 将配置下拉列表更改为“发布” ,然后生成应用。

  2. 在解决方案资源管理器中右键单击项目,并选择“发布” 。

  3. 在发布目标对话框上,选择“容器注册表”选项卡 。

  4. 选择“创建新的 Azure 容器注册表”并单击“发布” 。

  5. 在“创建新 Azure 容器注册表”中填写所需的值 。

    设置 建议的值 描述
    DNS 前缀 全局唯一名称 用于唯一标识容器注册表的名称。
    订阅 选择订阅 要使用的 Azure 订阅。
    资源组 myResourceGroup 要在其中创建容器注册表的资源组的名称。 选择“新建” 创建新的资源组。
    SKU 标准 容器注册表的服务层
    注册表位置 靠近你的位置 在你附近或将使用容器注册表的其他服务附近的区域中,选择位置。

    Visual Studio 的创建 Azure 容器注册表对话框

  6. 单击“创建”

后续步骤

现在可以将容器从注册表中拖放到任何能够运行 Docker 映像的主机上,例如Azure 容器实例

使用 Visual Studio,可以轻松地生成、调试和运行容器化的 .NET、ASP.NET 和 ASP.NET Core 应用并将其发布到 Azure 容器注册表 (ACR)、Docker Hub、Azure 应用服务或你自己的容器注册表。 本文介绍如何将 ASP.NET Core 应用发布到 ACR。

先决条件

安装和设置

要安装 Docker,请先查看用于 Windows 的 Docker Desktop:安装须知了解相关信息。 然后安装用于 Windows 的 Docker Desktop

向 Docker 容器添加项目

  1. 使用“ASP.NET Core Web 应用”模板创建新项目,或如果要使用 .NET Framework 而不是 .NET Core,请选择“ASP.NET Web 应用程序(.NET Framework)” 。

  2. 在“其他信息”屏幕上,确保已选中“启用 Docker 支持”复选框 。

    “启用 Docker 支持”复选框

    屏幕截图显示 .NET Core;如果使用的是 .NET Framework,则略有不同。

  3. 选择所需的容器类型(Windows 或 Linux),然后单击“创建” 。

Dockerfile 概述

Dockerfile,用于创建最终 Docker 映像的方案,已在项目中创建 。 请参阅 Dockerfile 引用,了解其中的命令:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

前面的 Dockerfile 基于 microsoft/aspnetcore 映像,并包括通过构建项目并将其添加到容器中修改基本映像的说明 。 如果使用的是 .NET Framework,则基本映像将有所不同。

如果选中了新建项目对话框的“为 HTTPS 配置”复选框,则 Dockerfile 公开两个端口 。 一个端口用于 HTTP 流量;另一个端口用于 HTTPS。 如果未选中该复选框,则为 HTTP 流量公开单个端口 (80)。

调试

在工具栏的调试下拉列表中选择“Docker”,然后开始调试应用。 你可能会看到提示信任证书的消息;选择信任证书以继续。

“输出” 窗口中的“容器工具” 选项显示正在进行的操作。 第一次时,可能需要一些时间来下载基本映像,但在后续运行时速度要快得多。

备注

如果需要更改用于调试的端口,可以在 launchSettings.json 文件中执行此操作 。 请参阅容器启动设置

容器窗口

如果拥有 Visual Studio 2019 版本 16.4 或更高版本,则可使用“容器”窗口来查看正在计算机上运行的容器,还可查看你可用的映像 。

在 IDE 中使用搜索框打开“容器”窗口(按 Ctrl+Q 可进行使用),键入 container然后从列表中选择“容器”窗口 。

可将“容器”窗口四处移动并沿着窗口放置参考线操作,将此窗口装载到便利的位置,例如在编辑器下方 。

在窗口中,找到你的容器并逐个浏览每个选项卡,以查看环境变量、端口映射、日志和文件系统。

“容器”窗口的屏幕截图

有关详细信息,请参阅在 Visual Studio 中查看和诊断容器及映像

发布 Docker 映像

完成应用程序的开发和调试循环后,可以创建应用程序的生产映像。

  1. 将配置下拉列表更改为“发布”,然后生成应用。

  2. 在解决方案资源管理器中右键单击项目,并选择“发布” 。

  3. 在“发布”对话框中,选择“Docker 容器注册表”选项卡 。

    “‘发布’对话框 - 选择‘Docker 容器注册表’”的屏幕截图

  4. 选择“新建 Azure 容器注册表”。

    “‘发布’对话框 - 选择‘新建 Azure 容器注册表’”的屏幕截图

  5. 在“创建新 Azure 容器注册表”中填写所需的值 。

    设置 建议的值 描述
    DNS 前缀 全局唯一名称 用于唯一标识容器注册表的名称。
    订阅 选择订阅 要使用的 Azure 订阅。
    资源组 myResourceGroup 要在其中创建容器注册表的资源组的名称。 选择“新建” 创建新的资源组。
    SKU 标准 容器注册表的服务层
    注册表位置 靠近你的位置 在你附近或将使用容器注册表的其他服务附近的区域中,选择位置。

    Visual Studio 的创建 Azure 容器注册表对话框

  6. 单击 “创建” 。 现在,“发布”对话框显示已创建的注册表。

    显示已创建的 Azure 容器注册表的“发布”对话框的屏幕截图

  7. 选择“完成”,以完成将容器映像发布到 Azure 中新创建的注册表的过程。

    显示成功发布的屏幕截图

后续步骤

现在可以将容器从注册表中拖放到任何能够运行 Docker 映像的主机上,例如Azure 容器实例

其他资源