你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure CLI 创建专用容器注册表

Azure 容器注册表是用于生成、存储和管理容器映像和相关项目的专用注册表服务。 在本快速入门中,你将使用 Azure CLI 创建一个 Azure 容器注册表实例。 然后,使用 Docker 命令将容器映像推送到注册表中,最终从注册表提取并运行该映像。

本快速入门需要运行 Azure CLI(建议运行 2.0.55 或更高版本)。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

还必须在本地安装 Docker。 Docker 提供的包可在任何 macOSWindowsLinux 系统上轻松配置 Docker。

由于 Azure Cloud Shell 并不包括所有必需的 Docker 组件(dockerd 守护程序),因此不能将 Cloud Shell 用于本快速入门。

创建资源组

使用“az group create”命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

以下示例在“eastus”位置创建名为“myResourceGroup”的资源组。

az group create --name myResourceGroup --location eastus

创建容器注册表

本快速入门将创建一个“基本”注册表。该注册表已针对成本进行优化,是可供开发人员了解 Azure 容器注册表的选项。 有关可用服务层级的详细信息,请参阅容器注册表服务层级

使用 az acr create 命令创建 ACR 实例。 注册表名称在 Azure 中必须是唯一的,并且包含 5 到 50 个小写字母数字字符。 下面的示例采用的名称为 mycontainerregistry。 将其更新为唯一值。

az acr create --resource-group myResourceGroup \
  --name mycontainerregistry --sku Basic

创建注册表时,输出与下面类似:

{
  "adminUserEnabled": false,
  "creationDate": "2019-01-08T22:32:13.175925+00:00",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
  "location": "eastus",
  "loginServer": "mycontainerregistry.azurecr.io",
  "name": "mycontainerregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

记下输出中的 loginServer,这是完全限定的注册表名称(全部小写)。 在本快速入门的剩余部分,<registry-name> 是容器注册表名称的占位符,<login-server> 是注册表的登录服务器名称的占位符。

提示

本快速入门将创建一个“基本”注册表。该注册表已针对成本进行优化,是可供开发人员了解 Azure 容器注册表的选项。 选择其他层,以获得更高的存储和映像吞吐量,以及使用专用终结点的连接等功能。 有关可用服务层级 (SKU) 的详细信息,请参阅容器注册表服务层级

登录到注册表

在推送和拉取容器映像之前,必须登录到注册表。 为此,请使用 az acr login 命令。 使用 Azure CLI 登录时仅指定注册表资源名称。 请勿使用完全限定的登录服务器名称。

az acr login --name <registry-name>

例如:

az acr login --name mycontainerregistry

该命令在完成后会返回消息 Login Succeeded

将映像推送到注册表

要将映像推送到 Azure 容器注册表,首先必须具有一个映像。 如果还没有任何本地容器映像,请运行以下 docker pull 命令,拉取现有公共映像。 例如,从 Microsoft Container Registry 中拉取 hello-world 映像。

docker pull mcr.microsoft.com/hello-world

将映像推送到注册表之前,必须使用注册表登录服务器的完全限定的名称进行标记。 登录服务器名称采用 <注册表名称>.azurecr.io 格式(必须全小写),例如 mycontainerregistry.azurecr.io。

使用 docker tag 命令标记映像。 使用 ACR 实例的登录服务器名称替换 <login-server>

docker tag mcr.microsoft.com/hello-world <login-server>/hello-world:v1

示例:

docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1

最后,使用 docker push 将映像推送到注册表实例。 使用注册表实例的登录服务器名称替换 <login-server>。 此示例创建 hello-world 存储库,其中包含 hello-world:v1 映像。

docker push <login-server>/hello-world:v1

将映像推送到容器注册表后,请从本地 Docker 环境中删除 hello-world:v1 映像。 (请注意,此 docker rmi 命令不从 Azure 容器注册表中的 hello-world 存储库删除该映像。)

docker rmi <login-server>/hello-world:v1

列出容器映像

以下示例列出了注册表中的存储库:

az acr repository list --name <registry-name> --output table

输出:

Result
----------------
hello-world

以下示例列出了 hello-world 存储库中的标记。

az acr repository show-tags --name <registry-name> --repository hello-world --output table

输出:

Result
--------
v1

从注册表运行映像

现在,可以使用 docker run 从容器注册表拉取并运行 hello-world:v1 容器映像:

docker run <login-server>/hello-world:v1  

示例输出:

Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1

Hello from Docker!
This message shows that your installation appears to be working correctly.

[...]

清理资源

如果不再需要存储在该处的资源组、容器注册表和容器映像,可以使用 az group delete 命令将其删除。

az group delete --name myResourceGroup

后续步骤

本快速入门介绍了如何使用 Azure CLI 创建 Azure 容器注册表,如何将容器映像推送到注册表,以及如何拉取并运行注册表中的映像。 请继续阅读 Azure 容器注册表教程,以更深入地了解 ACR。