Azure Container Registry - 图3

概述

Azure 容器注册表(Azrue Container Registry,简称ACR)是 Azure 中的专用 Docker 注册表,你可在其中存储和管理专用 Docker 容器映像。

创建容器注册表

选择“创建资源” ,在“新建” 选项卡的搜索筛选器中键入“容器注册表”或英文下输入“Container Registry”
image.png

在“注册表名称”和“资源组”中输入值 。 注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。截至到2020.02月,中国区四个区域都已经可以创建ACR。

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/741540/1580736339257-1a6b3a80-00e9-4a6c-a3d5-e67fc6851e93.png "image.png")

其中有三个SKU,高级版支持异地复制。
image.png

显示“部署成功”消息时,请在门户中选择容器注册表 。

image.png
记下“登录服务器”的值。 结合 Azure CLI 和 Docker 使用注册表时,请在以下步骤中使用此值。

登录到注册表

在推送和拉取容器映像之前,必须登录到 ACR 实例。 在操作系统中打开命令外壳,然后在 Azure CLI 中使用 az acr login 命令。

其中 Azure CLI 下载地址:https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest

az acr login --name <acrName>

当我们第一次执行的时候,可能会遇到如下的错误:
第一个错误是没有安装或启动Docker,请自行下载安装运行即可;
第二个错误是没有登录过 Azure CLI,需要先登登录。
image.png

当我们按照提示输入az login,并跳转到到https://login.microsoftonline.com/common/oauth2/authorize?response_type=code 之类的网址时,该地址针对global的Azure是正确的。

image.png

对于中国区的Azure,需要先执行

az cloud set --name AzureChinaCloud

image.png
跳转到如图类似的网址(https://login.partner.microsoftonline.cn/common/oauth2/authorize)认证地址才是中国区登录。

再次执行 az acr login —name ,该命令在完成后返回 Login Succeeded
image.png


将映像推送到注册表

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

docker pull hello-world

image.png

将映像推送到注册表之前,必须使用 ACR 登录服务器的完全限定的名称进行标记。 登录服务器名称采用 .azurecr.cn(全小写)格式。
使用 docker tag 命令标记映像。 使用 ACR 实例的登录服务器名称替换 <acrLoginServer>

docker tag hello-world <acrLoginServer>/hello-world:v1

image.png

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

docker push <acrLoginServer>/hello-world:v1

image.png

查看本地的映像:
image.png

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

docker rmi <acrLoginServer>/hello-world:v1

image.png

在portal查看容器映像

若要列出注册表中的映像,请在门户中导航到注册表并选择“存储库”,然后选择使用 docker push 创建的存储库 。
在本示例中,选择 hello-world 存储库,并可在“标记”下看到 v1 标记的映像 。

image.png

从注册表运行映像

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

docker run <acrLoginServer>/hello-world:v1

image.png

配置异地复制

只有高级SKU的ACR才具有异地复制功能,如果不是高级SKU,请先升级。
image.png
image.png

导航到 Azure 容器注册表,然后选择“复制” :
Azure Container Registry - 图20
地图中显示了所有当前的 Azure 区域:
Azure Container Registry - 图21

  • 蓝色六边形表示当前的副本
  • 绿色六边形表示可能的复制区域
  • 灰色六边形表示尚不可复制的 Azure 区域

若要配置副本,请选择一个绿色六边形,然后选择“创建” :
Azure Container Registry - 图22
若要创建其他副本,请选择表示其他区域的绿色六边形,然后单击“创建” 。
ACR 将开始在配置的副本间同步映像。 完成后,门户将显示“就绪” 。 门户中的副本状态不会自动更新。 使用刷新按钮查看更新状态。

使用异地复制注册表的注意事项

  • 异地复制注册表中的每个区域在设置后都是独立的。 Azure 容器注册表 SLA 适用于每个异地复制区域。
  • 当你从异地复制注册表中推送或拉取映像时,后台的 Azure 流量管理器会将请求发送到位于离你最近的区域中的注册表。
  • 将映像或标记更新推送到最近的区域后,Azure 容器注册表需要一些时间将清单和层复制到你选择加入的其余区域。 较大的映像比较小的映像复制所需的时间更长。 映像和标记通过最终一致性模型在复制区域之间进行同步。
  • 若要管理依赖于对异地复制进行推送更新的工作流,建议你配置 Webhook 以响应推送事件。 你可以在异地复制注册表中设置区域性 Webhook,以跟踪在异地复制区域内完成的推送事件。

    删除ACR副本

    为注册表配置副本后,如果不再需要它,可以随时将其删除。 使用 Azure 门户或其他工具(例如 Azure CLI 中的 az acr replication delete 命令)删除副本。
    若要在 Azure 门户中删除副本,请执行以下操作:
  1. 导航到 Azure 容器注册表,然后选择“复制” 。
  2. 选择副本的名称,然后选择“删除” 。 确认要删除该副本。

    备注
    无法删除注册表的主区域(即创建注册表的位置)中的注册表副本。 只能通过删除注册表本身来删除主副本。

    定价及异地复制定价

    *每月价格估算基于每个月 744 小时的使用量。

基本 标准 高级
每日价格 1.6953 6.784 16.96
包含的存储 (GB) 10 GB 100 GB 500
高级跨多个并发节点提供 docker 拉取请求的增强型吞吐量
总 Webhook 2 10 100
(可根据请求提供其他信息)

标准网络费用适用(出站数据流量)。
异地复制是 Azure 容器注册表高级 SKU 的一项功能。 将注册表复制到所需区域时,每个区域都会产生高级注册表费用。