ACR(Alibaba Cloud Container Registry)是阿里云提供的容器镜像托管服务,支持全球20个地域的镜像全生命周期管理,联合容器服务等云产品,打造云原生应用的一站式体验。本文将为您介绍将自建
harbor 上的镜像同步到默认实例版 ACR,提供 image-syncer 的基本使用示例。

前提条件

您需要开通容器镜像服务。

登录容器镜像服务控制台开通相应的服务。

创建命名空间

命名空间可以有效管理该命名空间下的仓库集合,包括仓库权限和仓库属性。如果需要同步的仓库不存在,需要在命名空间下打开自动创建仓库,并通过docker push 自动创建仓库。

说明 当目标仓库不存在时,docker push 可以根据默认仓库类型自动创建的仓库类型是公有的还是私有。

  1. 登录容器镜像服务控制台。
  2. 单击左侧导航栏的默认实例 > 命名空间
  3. 命名空间页面,单击右上角的创建命名空间
  4. 创建命名空间页面中自定义命名空间,并单击确定

创建完成后,您可以在命名空间列表中看到新创建的命名空间。同时可以对命名空间进行管理,请参见命名空间基本使用。

授权

如果您使用子账号进行后续操作,需要先创建RAM子账号并授予授权。如果您使用主账号进行后续操作,请跳过此步骤。

  1. 创建RAM子账号。请参见步骤 1 创建子账号并开启控制台登录。
  2. 授予子账号相应的权限。请参见自定义 RAM 授权策略。
    本示例中仅使用到创建、更新镜像仓库相关权限,最小权限设置如下,访问控制的资源粒度为 image-syncer 命名空间。

    {
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:CreateRepository",
                    "cr:UpdateRepository",
                    "cr:PushRepository",
                    "cr:PullRepository"
                ],
                "Resource": [
                    "acs:cr:*:*:repository/image-syncer/*"
                ]
            }
        ],
        "Version": "1"
    }

获取访问凭证

在拉取私有镜像或者上传镜像前,需要docker login输入您的凭证信息。请按照如下操作获取访问凭证。

  1. 单击左侧导航栏的默认实例 > 访问凭证
  2. 访问凭证页面单击设置固定密码
  3. 设置固定密码页面填写密码确认密码,并单击确认

您可以通过API获取临时密码访问镜像服务实例,请参见GetAuthorizationToken。

image-syncer 的同步配置

本例中,假设将本地搭建的harbor中的 library/nginx 仓库同步到华北2的 image-syncer 命名空间下,并且保持仓库名称为 nginx。配置文件示例如下:

{
    "auth": {
        "harbor.myk8s.paas.com:32080": {
            "username": "admin",
            "password": "xxxxxxxxx",
            "insecure": true
        },
        "registry.cn-beijing.aliyuncs.com": {
            "username": "acr_pusher@1938562138124787",
            "password": "xxxxxxxx"
        }
    },
    "images": {
        "harbor.myk8s.paas.com:32080/library/nginx": ""
    }
}
  • harbor.myk8s.paas.com:32080:本地搭建的 harbor 访问地址。需要替换成实际值。
    • username:harbor的用户名,本例中为admin。
    • password:harbor的密码。
    • insecure:需要设置为ture。
  • registry.cn-beijing.aliyuncs.com:目标仓库访问地址。本例中假设为镜像所在的地域为华北2。
    • username:获取访问凭证的登录用户名。
    • password:获取访问凭证的创建的密码。
  • "harbor.myk8s.paas.com:32080/library/nginx": "": 通过 harbor.myk8s.paas.com:32080 访问 library/nginx 仓库。

通过 image-syncer 同步镜像

  1. 从image-syncer 下载最新的安装包。
    说明 目前只支持 Linux amd64 版本。

  2. 安装和配置 image-syncer 工具。
    有关详细信息,请参见安装和配置 image-syncer。
  3. 执行如下命令同步镜像。
    # 设置默认目标registry为registry.cn-beijing.aliyuncs.com,默认目标namespace为image-syncer
    # 并发数为10,重试次数为10
    # 日志输出到./log文件下,不存在会自动创建,不指定的话默认会将日志打印到Stderr
    # 指定配置文件为harbor-to-acr.json,内容如上所述
    ./image-syncer --proc=10 --config=./harbor-to-acr.json --registry=registry.cn-beijing.aliyuncs.com --namespace=image-syncer --retries=10 --log=./log

执行结果

一次镜像同步会经历三个阶段:生成同步任务、执行同步任务以及重试失败任务;其中,每个同步任务都代表了一个需要同步的镜像(tag),如果配置文件中某条规则没有指定 tag,在“生成同步任务”阶段会自动列出源仓库所有
tag,并生成对应的同步任务,如果生成同步任务失败,也会在重试阶段进行重试。

  • 同步镜像正常结果输出如下所示。从自建 harbor 同步镜像到默认实例版 ACR
  • 同步镜像异常结果(例如,账号或密码错误)输出如下所示。从自建 harbor 同步镜像到默认实例版 ACR
  • 在运行时,image-syncer 会打印出如下的日志信息。从自建 harbor 同步镜像到默认实例版 ACR