你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 ASP.NET 应用容器化并迁移到 Azure 应用服务

本文将介绍如何将 ASP.NET 应用程序容器化,以及如何使用 Azure Migrate 应用容器化工具将其迁移到 Azure 应用服务。 容器化过程不需要访问代码库,并提供了一种简单的方法来容器化现有应用程序。 该工具的工作原理是使用服务器上应用程序的运行状态来确定应用程序组件。 然后,它可帮助你将它们打包到容器映像中。 然后,可以将已容器化的应用程序部署到 Azure 应用服务。

Azure Migrate 应用容器化工具当前支持:

借助应用容器化工具可执行以下操作:

  • 发现应用程序组件。 该工具远程连接到运行 ASP.NET 应用程序的应用程序服务器,并发现应用程序组件。 该工具将创建一个可用于为应用程序创建容器映像的 Dockerfile。
  • 生成容器映像。 可以根据应用程序要求检查并进一步自定义 Dockerfile,并使用它来生成应用程序容器映像。 应用程序容器映像会被推送到你指定的 Azure 容器注册表。
  • 部署到 Azure 应用服务。 然后,该工具会生成将已容器化的应用程序部署到 Azure 应用服务所需的部署文件。

注意

Azure Migrate 应用容器化工具可帮助你发现特定应用程序类型(Apache Tomcat 上的 ASP.NET 和 Java Web 应用)以及它们在应用服务器上的组件。 若要发现服务器以及在本地计算机上运行的应用、角色和功能的清单,请使用 Azure Migrate 发现和评估工具

在不进行重大重构的情况下,并非所有应用程序都能从直接迁移到容器中获得好处。 但在不进行重写的情况下,将现有应用迁移到容器中的一些好处包括:

  • 提高了基础结构利用率。 使用容器时,多个应用程序可以共享资源,并托管在同一基础结构上。 这有助于整合基础结构并提高利用率。
  • 简化管理。 在新式托管平台(如 AKS 和应用服务)上托管应用程序可以简化管理方法。 可以通过停用或减少通常使用拥有的基础结构执行的基础结构维护和管理过程来实现此简化。
  • 应用程序可移植性。 随着容器规范格式逐渐普及和业务流程平台标准化程度的提高,应用程序的可移植性不再是问题。
  • 采用通过 DevOps 实现的新式管理。 使用容器帮助你在管理、安全性和过渡到 DevOps 的过程中采用新式做法并加以标准化。

本教程介绍以下操作:

  • 设置 Azure 帐户。
  • 安装 Azure Migrate 应用容器化工具。
  • 发现你的 ASP.NET 应用程序。
  • 生成容器映像。
  • 在应用服务上部署容器化应用程序。

注意

教程提供了方案的最简单部署路径,使你能够快速设置概念证明。 教程尽可能使用默认选项,并且不显示所有设置和路径。

先决条件

开始本教程之前,必须:

要求 详细信息
确定要安装工具的计算机 需要一台 Windows 计算机来安装和运行 Azure Migrate 应用容器化工具。 Windows 计算机可以运行服务器(Windows Server 2016 或更高版本)或客户端 (Windows 10) 操作系统。 (工具可以在桌面上运行。)

运行该工具的 Windows 计算机应该与托管要容器化的 ASP.NET 应用程序的服务器或虚拟机具有网络连接。

确保运行 Azure Migrate 应用容器化工具的 Windows 计算机上有 6 GB 的可用空间。 此空间用于存储应用程序生成工件。

Windows 计算机应可以直接或通过代理访问 Internet。

如果在运行应用容器化工具和应用程序服务器的计算机上尚未安装 Microsoft Web 部署工具,请进行安装。 可下载该工具
应用程序服务器 在应用程序服务器上启用 PowerShell 远程处理:登录到应用程序服务器,然后按照这些说明打开 PowerShell 远程处理

确保在应用程序服务器上安装了 PowerShell 5.1。 按照在应用程序服务器上安装和配置 WMF 5.1 中的说明进行操作。

如果在运行应用容器化工具和应用程序服务器的计算机上尚未安装 Microsoft Web 部署工具,请进行安装。 可下载该工具
ASP.NET 应用程序 该工具当前支持:
  • 使用 .NET Framework 3.5 或更高版本的 ASP.NET 应用程序。
  • 运行 Windows Server 2012 R2 或更高版本的应用程序服务器。 (应用程序服务器应运行 PowerShell 5.1。)
  • 在 Internet Information Services 7.5 或更高版本上运行的应用程序。


该工具当前不支持:
  • 需要 Windows 身份验证的应用程序。 (AKS 当前不支持 gMSA。)
  • 依赖于 Internet Information Services 外部托管的其他 Windows 服务的应用程序。

准备 Azure 用户帐户

如果没有 Azure 订阅,可以在开始之前创建一个免费帐户

订阅设置完成后,你将需要一个拥有以下权限的 Azure 用户帐户:

  • Azure 订阅的所有者权限。
  • Microsoft Entra 应用的注册权限。

如果你刚刚创建了免费的 Azure 帐户,那么你就是订阅的所有者。 如果你不是订阅所有者,请让所有者分配权限,如下所示:

  1. 在 Azure 门户中,搜索“订阅”。在“服务”下选择“订阅”:

    Screenshot that shows the search box for searching for an Azure subscription.

  2. 在“订阅”页上,选择要在其中创建 Azure Migrate 项目的订阅。

  3. 在订阅的左侧窗格上,选择“访问控制(IAM)”。

  4. 在“检查访问权限”选项卡上,搜索相关的用户帐户。

  5. 在“添加角色分配”下,选择“添加” :

    Screenshot that shows searching for a user account to check access and assign a role.

  6. 在“添加角色分配”页上,选择“所有者”角色,然后选择帐户(本例中为 azmigrateuser) 。 再选择“保存”。

    Screenshot that shows the Add role assignment page.

    Azure 帐户还需要注册 Microsoft Entra 应用的权限。

  7. 在 Azure 门户中,转到“Microsoft Entra ID”>“用户”>“用户设置”。

  8. 在“用户设置”中,验证 Microsoft Entra 用户是否可以注册应用程序。 (默认情况下,此选项设置为“是”。)

    Screenshot that shows the User settings page.

  9. 如果“应用注册”选项设置为“否”,则须请求租户/全局管理员分配所需权限 。 或者,租户/全局管理员可将“应用程序开发人员”角色分配给帐户,以允许注册 Microsoft Entra 应用。 有关详细信息,请参阅为用户分配角色

下载并安装 Azure Migrate 应用容器化工具

  1. 在 Windows 计算机上下载 Azure Migrate 应用容器化安装程序

  2. 在管理员模式下打开 PowerShell,并将 PowerShell 目录更改为包含该安装程序的文件夹。

  3. 使用以下命令运行安装脚本:

    .\AppContainerizationInstaller.ps1
    

注意

对于 Windows Server 2022,请编辑第 135 行并从功能列表中删除 PowerShell-ISE,因为它不再受支持。

打开应用容器化工具

  1. 在可连接到运行应用容器化工具的 Windows 计算机的任何计算机上打开浏览器。 转到工具 URL: https://计算机名称或 IP 地址: 44369。

    或者,可以在桌面上使用应用快捷方式打开该应用。

  2. 如果你看到一条警告,指出连接不是专用连接,则单击“高级”,然后继续转到网站。 由于 Web 界面使用自签名 TLS/SSL 证书,因此会显示此警告。

  3. 在登录屏幕上,使用计算机的本地管理员帐户进行登录。

  4. 请选择“ASP.NET Web 应用”作为要容器化的应用程序类型。

  5. 在“目标 Azure 服务”列表中,选择“Azure 应用服务上的容器” :

    Screenshot that shows the application type and target lists.

完整工具先决条件

  1. 接受许可条款,并阅读第三方信息。
  2. 在工具 Web 应用的“设置先决条件”中,完成以下步骤
    • 有连接。 工具将检查 Windows 计算机是否可访问 Internet。 如果计算机使用代理:

      1. 选择“设置代理”,以指定代理地址(格式为 IP 地址或 FQDN)以及侦听端口。

      2. 如果代理需要身份验证,请指定凭据。

      3. 如果已添加代理详细信息或已禁用代理或身份验证,请选择“保存”以再次触发连接性检查。

      仅支持 HTTP 代理。

    • 安装更新。 该工具会自动检查并安装最新更新。 也可以手动安装该工具的最新版本

    • 安装 Microsoft Web 部署工具。 该工具会检查运行 Azure Migrate 应用容器化工具的 Windows 计算机上是否安装了 Microsoft Web 部署工具。

    • 启用 PowerShell 远程处理。 该工具将提示你,以确保在运行要容器化的 ASP.NET 应用程序的应用程序服务器上启用 PowerShell 远程处理。

登录 Azure

  1. 选择“登录”,以登录 Azure 帐户。

    需要设备代码向 Azure 进行身份验证。 选择“登录”,随即应打开一个包含设备代码的窗口。 如果未显示该窗口,请确保已在浏览器中禁用弹出窗口阻止程序。

  2. 选择“复制代码并登录”以复制设备代码,并在新的浏览器选项卡中打开 Azure 登录提示:

    Screenshot that shows the Device code for Azure Sign in window.

  3. 在新的选项卡上,粘贴设备代码,并使用 Azure 帐户凭证完成登录。 登录后,可以关闭浏览器选项卡,然后返回到应用容器化工具的 Web 界面。

  4. 选择要使用的 Azure 租户。

  5. 指定要使用的 Azure 订阅。

发现 ASP.NET 应用程序

应用容器化工具使用提供的凭据远程连接到应用程序服务器,并尝试发现在应用程序服务器上托管的 ASP.NET 应用程序。

  1. 指定运行 ASP.NET 应用程序的服务器的“服务器 IP 地址/FQDN”和凭据,它们应用于远程连接到该服务器以进行应用程序发现。

    • 提供的凭据必须是应用程序服务器上的本地管理员 (Windows) 的凭据。
    • 对于域帐户(用户必须是应用程序服务器上的管理员),请在用户名前以此格式添加域名:<域\用户名>。
    • 对于本地帐户(用户必须是应用程序服务器上的管理员),请在用户名前以此格式添加主机名:<主机名\用户名>。
    • 一次最多可为 5 个服务器运行应用程序发现。
  2. 选择“验证”,验证是否可以从运行该工具的计算机访问应用程序服务器,以及凭据是否有效。 验证成功后,“状态”列会将状态显示为“已映射” :

    Screenshot that shows the server status as Mapped.

  3. 选择“继续”,在选定的应用程序服务器上启动应用程序发现。

  4. 完成应用程序发现后,选择要容器化的应用程序:

    Screenshot that shows the discovered ASP.NET application.

  5. 为每个选定的应用程序指定目标容器的名称。 容器名称应指定为 <名称:标记>,其中标记用于容器映像。 例如,可以将目标容器名称指定为 appname:v1。

参数化应用程序配置

参数化配置,使其可用作部署时间参数。 参数化使你可以在部署应用程序时配置此设置,而不是将其硬编码为容器映像中的特定值。 例如,此选项对数据库连接字符串等参数非常有用。

  1. 选择“应用配置”以查看检测到的配置。

  2. 选择要参数化的参数,然后选择“应用”:

    Screenshot that shows the list of detected configurations.

外部化文件系统依赖项

可以添加应用程序使用的其他文件夹。 指定文件夹是否应为容器映像的一部分,或者是否应该通过 Azure 文件共享将文件夹外部化到永久性存储中。 对于将状态存储在容器外部或将其他静态内容存储在文件系统上的有状态应用程序,使用外部永久性存储非常有用。

  1. 选择“应用程序文件夹”下的“编辑”,查看检测到的应用程序文件夹 。 这些文件夹已被识别为应用程序所需的必需生成工件。 将它们复制到容器映像中。

  2. 选择“添加文件夹”,并指定要添加的文件夹路径。

  3. 若要将多个文件夹添加到同一卷,请以逗号分隔值。

  4. 如果希望将文件夹存储在容器外部的永久性存储中,请选择“Azure 文件共享”作为存储选项。

  5. 查看应用程序文件夹后,选择“保存”:

    Screenshot that shows the Edit application folders window.

  6. 选择“继续”以进入容器映像生成阶段。

生成容器映像

  1. 在下拉列表中,选择将用于生成和存储应用容器映像的 Azure 容器注册表。 可以使用现有的 Azure 容器注册表,也可以通过选择“新建注册表”来创建一个新的注册表:

    Screenshot that shows the Build images window.

    注意

    仅显示启用了管理员用户帐户的 Azure 容器注册表。 当前需要管理员用户帐户才能将 Azure 容器注册表中的映像部署到 Azure 应用服务。 有关详细信息,请参阅使用 Azure 容器注册表进行身份验证

  2. 为每个所选应用程序生成容器映像所需的 Dockerfile 是在生成步骤开始时生成的。 选择“查看”,以查看 Dockerfile。 还可以在查看步骤中将任何必要的自定义项添加到 Dockerfile,并在开始生成过程之前保存更改。

  3. 选择要为其生成映像的应用程序,然后选择“生成”。 选择“生成”将对每个应用程序启动容器映像生成。 该工具会监视生成状态,并使你能够在完成生成时继续执行下一步。

  4. 可以通过选择“状态”列下的“正在进行的生成”,来监视生成的进度。 触发生成过程后,该链接将在几分钟后变为活动状态。

  5. 完成生成后,选择“继续”以指定部署设置:

    Screenshot that shows the Review link, the container image status, and the Build and Continue buttons.

在 Azure 应用服务上部署容器化应用

生成容器映像后,下一步是将应用程序作为容器部署到 Azure 应用服务上。

  1. 选择应用程序应使用的 Azure 应用服务计划。

    如果没有应用服务计划,或想要创建新的应用服务计划以供使用,则可通过选择“创建新的应用服务计划”来创建一个。

  2. 选择应用服务计划后,选择“继续”。

  3. 如果已参数化应用程序配置,请指定要用于应用程序的机密存储。 可以选择 Azure Key Vault 或应用服务应用程序设置来管理你的应用程序机密。 有关详细信息,请参阅配置连接字符串

    • 如果选择了应用服务应用程序设置来管理机密,请选择“继续”。
    • 如果要使用 Azure 密钥保管库来管理应用程序机密,请指定要使用的密钥保管库。
      • 如果没有 Azure 密钥保管库,或者想要创建新的密钥保管库,可以通过选择“新建 Azure 密钥保管库”来创建一个
      • 该工具会自动分配必要的权限,以便通过密钥保管库管理密钥。
  4. 如果你已添加更多文件夹,并且对于永久性存储,选择了“Azure 文件共享”选项,请指定应用容器化工具在部署期间要使用的 Azure 文件共享。 该工具将复制为 Azure 文件存储配置的应用程序文件夹,并在部署过程中将它们装载到应用程序容器中。 

    如果没有 Azure 文件共享,或者想要创建新的 Azure 文件共享,则可以选择“新建存储帐户和文件共享”进行创建。

  5. 现在需要指定应用程序的部署配置。 选择“配置”,以自定义应用程序部署。 在配置步骤中,可以提供下列自定义项:

    • 名称: 为应用程序指定唯一的应用名称。 此名称将用于生成应用程序 URL。 此外,它还将用作部署过程中创建的其他资源的前缀。
    • 应用程序配置。 对于已参数化的任何应用程序配置,请提供要用于当前部署的值。
    • 存储配置。 查看为永久性存储配置的任何应用程序文件夹的信息。

    Screenshot that shows the deployment configuration.

  6. 保存应用程序的部署配置后,该工具将为应用程序生成 Kubernetes 部署 YAML。

    • 选择“查看”以查看应用程序的部署配置。

    • 选择要部署的应用程序。

    • 选择“部署”以启动所选应用程序的部署。

      Screenshot that shows the Deploy button.

    • 部署应用程序后,可以选择“部署状态”列以跟踪为该应用程序部署的资源。

排查问题

若要解决应用容器化工具的问题,可以查看运行此工具的 Windows 计算机上的日志文件。 此工具的日志文件位于 C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs。

后续步骤