教程:创建 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 提供用于在 macOSWindowsLinux 上配置 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

应该会看到与下面类似的输出:

Result
--------
v1

后续步骤

本教程中,我们准备了要用于 Azure 容器实例的 Azure 容器注册表,并将容器映像推送到了该注册表。 已完成以下步骤:

  • 使用 Azure CLI 创建 Azure 容器注册表实例
  • 为 Azure 容器注册表标记容器映像
  • 将映像上传到 Azure 容器注册表

请继续学习下一篇教程,了解如何使用 Azure 容器实例将容器部署到 Azure: