教程:将容器应用程序部署到 Azure 容器实例

这是由三个部分组成的系列教程的最后一个教程。 在本系列教程的前几篇文章中,我们已创建一个容器映像并将其推送到 Azure 容器注册表。 本文是本系列教程的最后一篇,介绍如何将容器部署到 Azure 容器实例。

在本教程中,你将了解:

  • 将容器从 Azure 容器注册表部署到 Azure 容器实例
  • 在浏览器中查看正在运行的应用程序
  • 显示容器的日志

准备阶段

必须满足以下要求才能完成本教程:

Azure CLI:必须在本地计算机上安装 Azure CLI 2.0.29 或更高版本。 运行 az --version 即可查找版本。 如需进行安装或升级,请参阅安装 Azure CLI

Docker:本教程假设读者基本了解核心 Docker 概念,如容器、容器映像和基本的 docker 命令。 有关 Docker 和容器的基础知识,请参阅 Docker 概述

Docker:要完成本教程,需在本地安装 Docker。 Docker 提供用于在 macOSWindowsLinux 上配置 Docker 环境的包。

重要

必须在本地计算机上同时安装 Azure CLI 和 Docker 引擎才能完成本教程。

使用 Azure CLI 部署容器

在本部分,我们将使用 Azure CLI 来部署第一篇教程中生成的,并已在第二篇教程中推送到 Azure 容器注册表的映像。 在继续之前,请务必先完成这些教程。

获取注册表凭据

部署托管在专用 Azure 容器注册表(例如第二篇教程中创建的注册表)中的映像时,必须提供用于访问该注册表的凭据。

许多方案的最佳做法是创建和配置拥有对注册表的拉取权限的 Microsoft Entra 服务主体。 请参阅使用 Azure 容器注册表从 Azure 容器实例进行身份验证,获取示例脚本以创建具有必要权限的服务主体。 请记下服务主体 ID 和服务主体密码。 部署容器时将使用这些凭据访问注册表。

还需要容器注册表登录服务器的完整名称(请将 <acrName> 替换为注册表的名称):

az acr show --name <acrName> --query loginServer

部署容器

现在,使用 az container create 部署容器。 将 <acrLoginServer> 替换为从前一命令中获得的值。 将 <service-principal-ID><service-principal-password> 替换为你为访问注册表而创建的服务主体 ID 和密码。 将 <aciDnsLabel> 替换为所需的 DNS 名称。

az container create --resource-group myResourceGroup --name aci-tutorial-app --image <acrLoginServer>/aci-tutorial-app:v1 --cpu 1 --memory 1 --registry-login-server <acrLoginServer> --registry-username <service-principal-ID> --registry-password <service-principal-password> --ip-address Public --dns-name-label <aciDnsLabel> --ports 80

将在几秒钟内收到来自 Azure 的初始响应。 在创建容器实例时所在的 Azure 区域中,--dns-name-label 值必须是唯一的。 如果在执行命令时收到 DNS 名称标签错误消息,请修改前一命令中的值。

检查部署进度

若要查看部署状态,请使用 az container show

az container show --resource-group myResourceGroup --name aci-tutorial-app --query instanceView.state

重复 az container show 命令,直到状态从“挂起”更改为“正在运行”为止,此过程应不到 1 分钟。 当容器状态为“正在运行”时,请继续执行下一步

查看应用程序和容器日志

部署成功后,使用 az container show 命令显示容器的完全限定域名 (FQDN):

az container show --resource-group myResourceGroup --name aci-tutorial-app --query ipAddress.fqdn

例如:

"aci-demo.chinaeast2.azurecontainer.console.azure.cn"

若要查看正在运行的应用程序,请从喜欢的浏览器中导航到此限定的 DNS 名称:

Hello world app in the browser

还可查看容器的日志输出:

az container logs --resource-group myResourceGroup --name aci-tutorial-app

示例输出:

listening on port 80
::ffff:10.240.0.4 - - [21/Jul/2017:06:00:02 +0000] "GET / HTTP/1.1" 200 1663 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
::ffff:10.240.0.4 - - [21/Jul/2017:06:00:02 +0000] "GET /favicon.ico HTTP/1.1" 404 150 "http://aci-demo.chinaeast2.azurecontainer.console.azure.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"

清理资源

如果不再需要在本系列教程中创建的任何资源,可以执行 az group delete 命令删除资源组和其中包含的所有资源。 此命令将删除创建的容器注册表、正在运行的容器和所有相关资源。

az group delete --name myResourceGroup

后续步骤

本教程已完整演示将容器部署到 Azure 容器实例的过程。 已完成以下步骤:

  • 使用 Azure CLI 从 Azure 容器注册表部署了容器
  • 已在浏览器中查看了应用程序
  • 已查看容器日志

有了一定的基础知识后,请继续深入了解 Azure 容器实例,例如容器组的工作原理:

Azure 容器实例中的容器组