教程:创建 Azure 容器注册表并推送容器映像
本文是三部分教程的第二部分。 本教程的第一部分为 Node.js Web 应用程序创建了 Docker 容器映像。 在本教程中,我们将此映像推送到 Azure 容器注册表。 如果需要创建容器映像,请返回教程 1 - 创建容器映像。
Azure 容器注册表是你在 Azure 中的专用 Docker 注册表。 本教程(该系列的第二部分)的内容包括:
- 使用 Azure CLI 创建 Azure 容器注册表实例
- 为 Azure 容器注册表标记容器映像
- 将映像上传到注册表
下一篇文章(本系列的最后一篇教程)介绍如何将容器从专用注册表部署到 Azure 容器实例。
开始之前
必须满足以下要求才能完成本教程:
Azure CLI:必须在本地计算机上安装 Azure CLI 2.0.29 或更高版本。 要查找版本,请运行 az --version
。 如需进行安装或升级,请参阅安装 Azure CLI。
Docker:本教程假设读者基本了解核心 Docker 概念,如容器、容器映像和基本的 docker
命令。 有关 Docker 和容器的基础知识,请参阅 Docker 概述。
Docker:要完成本教程,需在本地安装 Docker。 Docker 提供用于在 macOS、Windows 和 Linux 上配置 Docker 环境的包。
重要
必须在本地计算机上同时安装 Azure CLI 和 Docker 引擎才能完成本教程。
创建 Azure 容器注册表
在创建容器注册表之前,需要创建一个资源组,以便将容器注册表部署到其中。 资源组是在其中部署和管理所有 Azure 资源的逻辑集合。
使用“az group create”命令创建资源组。 以下示例在 chinaeast2 区域中创建名为 myResourceGroup 的资源组:
az group create --name myResourceGroup --location chinaeast2
创建资源组后,使用 az acr create 命令创建 Azure 容器注册表。 容器注册表名称在 Azure 中必须唯一,并且必须包含 5-50 个字母数字字符。 将 <acrName>
替换为注册表的唯一名称:
az acr create --resource-group myResourceGroup --name <acrName> --sku Basic
下面是名为 mycontainerregistry082 的新 Azure 容器注册表的部分输出:
{
"creationDate": "2020-07-16T21:54:47.297875+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
"location": "chinaeast2",
"loginServer": "mycontainerregistry082.azurecr.cn",
"name": "mycontainerregistry082",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
本教程的余下部分使用 <acrName>
作为在此步骤中选择的容器注册表名称的占位符。
登录到容器注册表
必须先登录到 Azure 容器注册表实例,才能向其推动映像。 使用 az acr login 命令完成此操作。 必须提供创建容器注册表时选择的唯一名称。
az acr login --name <acrName>
例如:
az acr login --name mycontainerregistry082
该命令在完成后返回 Login Succeeded
:
Login Succeeded
标记容器映像
若要将容器映像推送到 Azure 容器注册表等专用注册表,必须先使用注册表登录服务器的完整名称来标记该映像。
首先,请获取 Azure 容器注册表的完整登录服务器名称。 运行以下 az acr show 命令,并将 <acrName>
替换为创建的注册表名称:
az acr show --name <acrName> --query loginServer --output table
例如,如果注册表名为 mycontainerregistry082:
az acr show --name mycontainerregistry082 --query loginServer --output table
Result
------------------------
mycontainerregistry082.azurecr.cn
现在,使用 docker images 命令显示本地映像的列表:
docker images
此时应会显示在前一篇教程中生成的 aci-tutorial-app 映像,以及计算机上包含的其他所有映像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 minutes ago 68.1 MB
使用容器注册表的登录服务器标记 aci-tutorial-app 映像。 此外,请将 :v1
标记添加到映像名称的末尾,指示映像版本号。 将 <acrLoginServer>
替换为前面执行的 az acr show 命令的结果。
docker tag aci-tutorial-app <acrLoginServer>/aci-tutorial-app:v1
再次运行 docker images
以验证标记操作:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 minutes ago 68.1 MB
mycontainerregistry082.azurecr.cn/aci-tutorial-app v1 5c745774dfa9 7 minutes ago 68.1 MB
向 Azure 容器注册表推送映像
使用专用注册表的完整登录服务器名称标记 aci-tutorial-app 映像后,可以使用 docker push 命令将该映像推送到注册表。 将 <acrLoginServer>
替换为在前面步骤中获取的完整登录服务器名称。
docker push <acrLoginServer>/aci-tutorial-app:v1
push
操作应需要几秒钟到几分钟的时间(具体取决于 Internet 连接),输出应类似于以下示例:
docker push mycontainerregistry082.azurecr.cn/aci-tutorial-app:v1
The push refers to a repository [mycontainerregistry082.azurecr.cn/aci-tutorial-app]
3db9cac20d49: Pushed
13f653351004: Pushed
4cd158165f4d: Pushed
d8fbd47558a8: Pushed
44ab46125c35: Pushed
5bef08742407: Pushed
v1: digest: sha256:ed67fff971da47175856505585dcd92d1270c3b37543e8afd46014d328f05715 size: 1576
列出 Azure 容器注册表中的映像
若要验证刚刚推送的映像是否确实在 Azure 容器注册表中,请使用 az acr repository list 命令列出注册表中的映像。 将 <acrName>
替换为容器注册表的名称。
az acr repository list --name <acrName> --output table
例如:
az acr repository list --name mycontainerregistry082 --output table
Result
----------------
aci-tutorial-app
若要查看特定映像的标记,请使用 az acr repository show-tags 命令。
az acr repository show-tags --name <acrName> --repository aci-tutorial-app --output table
应会看到与如下示例类似的输出:
--------
v1
后续步骤
本教程中,我们准备了要用于 Azure 容器实例的 Azure 容器注册表,并将容器映像推送到了该注册表。 已完成以下步骤:
- 使用 Azure CLI 创建 Azure 容器注册表实例
- 为 Azure 容器注册表标记容器映像
- 将映像上传到 Azure 容器注册表
请继续学习下一篇教程,了解如何使用 Azure 容器实例将容器部署到 Azure: