快速入门:使用 Azure CLI 在 Azure 中部署容器实例
使用 Azure 容器实例在 Azure 中快速方便地运行无服务器 Docker 容器。 当你不需要像 AzureKubernetes 服务这样的完整容器业务流程平台时,可以按需将应用程序部署到容器实例。
本快速入门将使用 Azure CLI 部署一个独立的 Docker 容器,并使其应用程序可通过完全限定的域名 (FQDN) 使用。 在执行单个部署命令几秒钟之后,可以浏览到正在容器中运行的应用程序:
如果没有 Azure 试用版订阅,请在开始前创建 Azure 试用版订阅。
先决条件
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
本快速入门需要 Azure CLI 2.0.55 或更高版本。
警告
最佳做法:通过命令行界面 (CLI) 传递的用户凭据以纯文本形式存储在后端。 以纯文本形式存储凭证存在安全风险;Azure 建议客户将用户凭据存储在 CLI 环境变量中,以确保它们在存储在后端时进行加密/转换。
创建资源组
Azure 容器实例(例如所有 Azure 资源)都必须部署到资源组中。 使用资源组可以组织和管理相关的 Azure 资源。
首先,使用以下 az group create 命令在 chinaeast2 位置中创建一个名为“myResourceGroup”的资源组:
az group create --name myResourceGroup --location chinaeast2
创建容器
创建资源组后,可在 Azure 中运行容器。 若要使用 Azure CLI 创建容器实例,请在 az container create 命令中提供资源组名称、容器实例名称和 Docker 容器映像。 本快速入门将使用公共 mcr.microsoft.com/azuredocs/aci-helloworld
映像。 此映像打包了一个用 Node.js 编写的小型 Web 应用程序,该应用程序提供静态 HTML 页面。
可以通过指定要打开的一个或多个端口、一个 DNS 名称标签(或同时指定两者)来向 Internet 公开容器。 在本快速入门中,你将部署一个具有 DNS 名称标签的容器,以便 Web 应用可供公开访问。
执行类似于以下的命令以启动容器实例。 设置在创建实例的 Azure 区域中唯一的 --dns-name-label
值。 如果收到“DNS 名称标签不可用”错误消息,请尝试使用一个不同的 DNS 名称标签。
az container create --resource-group myResourceGroup --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld --dns-name-label aci-demo --ports 80
在几秒钟内,你应当会从 Azure CLI 收到响应,它指出部署已完成。 使用 az container show 命令检查其状态:
az container show --resource-group myResourceGroup --name mycontainer --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" --out table
运行此命令时,会显示容器的完全限定域名 (FQDN) 及其预配状态。
FQDN ProvisioningState
--------------------------------- -------------------
aci-demo.chinaeast2.azurecontainer.console.azure.cn Succeeded
如果容器的 ProvisioningState
为 Succeeded,则在浏览器中转到其 FQDN。 如果看到类似于下图的网页,那么恭喜你! 已成功将 Docker 容器中运行的应用程序部署到 Azure。
如果应用程序起初未显示,你可能需要在 DNS 传播时等待几秒钟,然后刷新浏览器。
拉取容器日志
当需要对容器或它运行的应用程序进行故障排除时(或者只是查看其输出),请首先查看容器实例的日志。
使用 az container logs 命令拉取容器实例日志:
az container logs --resource-group myResourceGroup --name mycontainer
此输出显示容器的日志,并应显示在浏览器中查看应用程序时生成的 HTTP GET 请求。
listening on port 80
::ffff:10.240.255.55 - - [21/Mar/2019:17:43:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
附加输出流
除了查看日志之外,还可将本地标准输出和标准错误流附加到容器的数据流中。
首先,执行 az container attach 命令来将本地控制台附加到容器的输出流:
az container attach --resource-group myResourceGroup --name mycontainer
附加后,刷新浏览器数次,以生成其他的一些输出。 完成后,使用 Control+C
分离控制台。 应会显示类似于以下示例的输出:
Container 'mycontainer' is in state 'Running'...
(count: 1) (last timestamp: 2019-03-21 17:27:20+00:00) pulling image "mcr.microsoft.com/azuredocs/aci-helloworld"
(count: 1) (last timestamp: 2019-03-21 17:27:24+00:00) Successfully pulled image "mcr.microsoft.com/azuredocs/aci-helloworld"
(count: 1) (last timestamp: 2019-03-21 17:27:27+00:00) Created container
(count: 1) (last timestamp: 2019-03-21 17:27:27+00:00) Started container
Start streaming logs:
listening on port 80
::ffff:10.240.255.55 - - [21/Mar/2019:17:43:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:47:01 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.56 - - [21/Mar/2019:17:47:12 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
清理资源
完成容器的操作后,可使用 az container delete 命令将其删除:
az container delete --resource-group myResourceGroup --name mycontainer
若要确认已删除该容器,请执行 az container list 命令:
az container list --resource-group myResourceGroup --output table
mycontainer 容器不应出现在命令的输出中。 如果资源组中没有任何其他容器,则不会显示任何输出。
如果已使用完 myResourceGroup 资源组及其包含的所有资源,请使用 az group delete 命令将其删除:
az group delete --name myResourceGroup
后续步骤
在本快速入门中,你已使用公共 Microsoft 映像创建了一个 Azure 容器实例。 若要基于专用 Azure 容器注册表生成容器映像并部署它,请继续学习 Azure 容器实例教程。
若要试用在 Azure 上的业务流程系统中运行容器的选项,请参阅 Azure Kubernetes Service (AKS) 快速入门。