练习 - 将 Docker 映像部署到 Azure 容器实例

已完成

Azure 容器实例使你可以在 Azure 中运行 Docker 映像。

在上一练习中,你已将 Web 应用打包为本地 Docker 映像并进行了测试。 现在,你想要使用该练习的输出,并使 Web 应用程序全局可用。 若要实现此可用性,需要将映像作为 Azure 容器实例运行。

在本次练习中,了解如何重新生成 Web 应用的映像并将其上传到 Azure 容器注册表。 你将使用 Azure 容器实例服务运行映像。

重要

需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户

创建容器注册表

  1. 使用 Azure 订阅登录 Azure 门户

  2. 在资源菜单上或在“主页”中,选择“创建资源”。 此时会显示“创建资源”窗格。

  3. 在菜单中,选择“容器”,然后选择“容器注册表”。

    Screenshot that shows Create a resource with Container Registry.

    此时会显示“创建容器注册表”窗格。

  4. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置
    项目详细信息
    订阅 选择你可以在其中创建和管理资源的 Azure 订阅。
    资源组 选择“新建资源组”,新资源组的名称为“learn-deploy-container-aci-rg”。 记住你选择的名称;你将在此模块的其余练习中使用它。 此外,请记得在使用完模块后清理此资源。
    实例详细信息
    注册表名称 选择所选项的名称。 注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。
    位置 请选择离你近的位置。
    SKU 标准
  5. 选择“查看 + 创建”。 出现“验证通过”通知时,选择“创建”。 等待容器注册表部署完成,然后继续。

  6. 选择“转到资源”。 “容器注册表”窗格显示有关容器注册表的概要信息。

  7. 在资源菜单中的“设置”下,选择“访问密钥”。 此时会显示你的容器注册表的“访问密钥”窗格。

  8. 如果禁用了“管理员用户”设置,请选择滑块来启用“管理员用户”访问密钥。 此时会显示你的容器注册表的用户名和密码。

  9. 记下你的容器注册表的注册表名称、登录服务器、用户名以及密码。

    注意

    在此练习中,我们启用管理员帐户访问权限,以便可上传映像并测试注册表。 在生产环境中,一旦你确信注册表按预期运行,就务必要禁用“管理员用户”帐户的访问权限并使用 Microsoft Entra ID 保护。

    Screenshot of the Access keys details.

将酒店预订系统应用的映像上传到 Azure 容器注册表

  1. 在本地命令提示符下,运行以下命令(将 <registry-name> 替换为你的容器注册表的名称)以使用你的注册表名称标记当前 reservationsystem 映像:

    docker tag reservationsystem:latest <registry-name>.azurecr.io/reservationsystem:latest
    
  2. 运行 docker image ls 命令以验证映像是否已被正确标记:

    docker image ls
    

    应会看到类似于下面的信息:

    REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
    reservationsystem                             latest              a56281e7038f        4 minutes ago       1.76GB
    <registry-name>.azurecr.io/reservationsystem  latest              a56281e7038f        4 minutes ago       1.76GB
    
  3. 在命令提示符下,登录到你的 Azure 容器注册表。 使用 docker login 命令并指定之前记下的注册表的登录服务器。 在系统提示时,输入访问密钥中的用户名和密码。

    docker login <login-server>
    

    注意

    你可能会收到来自守护程序的错误响应,指出你的应用程序未向 Microsoft Entra ID 注册。 如本练习前面所述,你已启用“管理员用户”访问密钥来测试我们的部署。

  4. 输入以下命令(将 <registry-name> 替换为自己的注册表名称)以将映像上传到 Azure 容器注册表中你的注册表:

    docker push <registry-name>.azurecr.io/reservationsystem:latest
    

    等待上传完成。 此过程需要几分钟时间将映像的所有对象推送到你的存储库。 你可以观察每个对象从“等待”到“正在准备”到“正在推送”再到“已推送”的过程。

验证注册表内容

你将回到 Azure 门户来完成练习的其余部分。

  1. 在 Azure 门户中,返回到你的容器注册表。

  2. 在资源菜单中的“服务”下,选择“存储库”。 此时会显示容器注册表的“存储库”。

  3. 验证 reservationsystem 存储库是否出现。 选择“reservationsystem”存储库,并验证该存储库是否包含具有“latest”标记的映像。

    Screenshot showing the repository and tagged reservation system container image in the registry.

使用 Azure 容器实例加载和运行映像

  1. 在 Azure 门户中,选择“创建资源”。 此时会显示“创建资源”窗格。

  2. 在资源菜单中,选择“容器”,然后选择“容器实例”。

    Screenshot showing Container Instances.

    此时会显示“创建容器实例”窗格。

    配置容器实例有几个步骤。 首先,设置资源组信息和容器详细信息。 然后,配置容器的网络选项并重启策略。

  3. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置
    项目详细信息
    订阅 选择你可以在其中创建和管理资源的默认 Azure 订阅
    资源组 重用现有资源组 learn-deploy-container-acr-rg
    容器详细信息
    容器名称 hotelsysteminstance
    区域 使用默认位置
    映像源 Docker Hub 或其他注册表
    映像类型 专用
    映像 <registry-name>.azurecr.io/reservationsystem:latest
    映像注册表登录服务器 输入注册表的登录服务器名称
    映像注册表用户名 输入注册表的用户名
    映像注册表密码 输入注册表的密码
    OS 类型 Linux
    大小 将默认大小保留为“1 个 vcpu,1.5 GiB 内存,0 个 gpus”
  4. 选择“下一页:网络”。

  5. 在“网络”选项卡上,为每个设置输入以下值。

    设置 Value
    网络类型 公用
    DNS 名称标签 选择一个唯一的名称,该名称将用作容器的 URL 的一部分。
    端口
    端口 80
    端口协议 TCP
  6. 选择“下一页:高级”。

  7. 在“高级”选项卡上,为每个设置输入以下值。

    设置
    重启策略 始终
    环境变量 将所有设置留空
    命令重写 留空
  8. 选择“查看 + 创建”。 等待验证完成,并根据需要更正任何错误。

  9. 选择“创建”。

  10. 创建容器实例后,选择“转到资源”。 此时会显示你的容器实例窗格。

  11. 在“概述”窗格上,查找容器实例的完全限定的域名 (FQDN)。

    Screenshot that shows the New pane in Azure portal showing the Container properties with the FQDN highlighted.

  12. 使用 Web 浏览器,导航到 URL http://FQDN/api/reservations/1,将 FQDN 替换为你的容器实例的完全限定的域名。 例如,使用以上屏幕截图中的可见 FQDN 将如下所示:

    http://hotel.southcentralus.azurecontainer.io/api/reservations/1
    

    Web 应用应使用包含预留 1 的详细信息的 JSON 对象进行响应。

恭喜! 你已将 Docker 映像上传到 Azure 容器注册表,并使用 Azure 容器实例服务运行映像。