Azure Container Registry-基于开源 Docker Registry 的专用 Docker 注册表服务

本文语雀知识库:https://www.yuque.com/seanyu/azure/acr 

概述

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

 

创建容器注册表

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

最新docker注册表镜像 docker 注册表_Azure

 

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

 

最新docker注册表镜像 docker 注册表_推送_02

 

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

最新docker注册表镜像 docker 注册表_docker_03

 

 

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

 

最新docker注册表镜像 docker 注册表_docker的注册表的国内地址_04

记下“登录服务器”的值。 结合 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,需要先登登录。

最新docker注册表镜像 docker 注册表_docker_05

 

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

 

最新docker注册表镜像 docker 注册表_推送_06

 

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

 


az cloud set --name AzureChinaCloud

 

最新docker注册表镜像 docker 注册表_Azure_07

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

 

再次执行 az acr login --name <acrName>,该命令在完成后返回 Login Succeeded

最新docker注册表镜像 docker 注册表_推送_08

将映像推送到注册表

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

 


docker pull hello-world

 

最新docker注册表镜像 docker 注册表_推送_09

 

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

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

 


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

最新docker注册表镜像 docker 注册表_docker_10

 

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

 


docker push <acrLoginServer>/hello-world:v1

最新docker注册表镜像 docker 注册表_docker_11

 

查看本地的映像:

最新docker注册表镜像 docker 注册表_docker_12

 

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

 


docker rmi <acrLoginServer>/hello-world:v1

 

最新docker注册表镜像 docker 注册表_docker_13

 

在portal查看容器映像

若要列出注册表中的映像,请在门户中导航到注册表并选择“存储库”,然后选择使用 docker push 创建的存储库 。

在本示例中,选择 hello-world 存储库,并可在“标记”下看到 v1 标记的映像 。

 

从注册表运行映像

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

 


docker run <acrLoginServer>/hello-world:v1

 

最新docker注册表镜像 docker 注册表_推送_14

 

 

 

配置异地复制

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

最新docker注册表镜像 docker 注册表_Azure_15

最新docker注册表镜像 docker 注册表_docker的注册表的国内地址_16

 

导航到 Azure 容器注册表,然后选择“复制” :

最新docker注册表镜像 docker 注册表_推送_17

地图中显示了所有当前的 Azure 区域:

最新docker注册表镜像 docker 注册表_docker_18

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

若要配置副本,请选择一个绿色六边形,然后选择“创建” :

最新docker注册表镜像 docker 注册表_Azure_19

若要创建其他副本,请选择表示其他区域的绿色六边形,然后单击“创建” 。

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 的一项功能。 将注册表复制到所需区域时,每个区域都会产生高级注册表费用。

在前面的示例中,Contoso 将两个注册表合并到一起,并向中国东部和中国北部添加副本。 Contoso 每月将支付两次高级费用,且无额外配置或管理。 现在每个区域就从本地拉取映像,既提升了性能和可靠性,又节省了从中国北部到中国东部的网络传输费用。