Harbor 提供了 harbor 与非 harbor 服务之间的镜像复制功能,通过复制镜像功能可以将 DockerHub 上的私有镜像给批量的同步到本地,也可以通过在多 Harbor 实例之间进行同步,达到镜像多副本,数据高可用的作用。如下图:
当 Harbor 系统管理员身份设置好复制规则后,当满足触发条件时,所有与规则匹配的资源都会被复制到目标仓库中。每个被复制的资源都会启动一个复制任务。如果目标仓库中不存在命名空间,则会自动创建一个新的命名空间。
借助该功能,既可以用作 harbor 仓库的备份,也可以用于测试环境和生产环境之间做镜像、artifact 等制品的同步。作为一种可以考虑的高可用部署的方案,可以部署两套 harbor,互相配置镜像复制同步。
登录 Harbor,打开“复制管理”选项卡,该页面用来管理复制规则,如新增、修改、删除复制规则等,如下图:
点击“+ 新增规则”按钮新建规则,填写名称、描述、复制模式、资源过滤器、目的Registry等信息,如下图:
参数说明:
名称:复制规则的名称
描述:复制规则的描述信息
复制模式:用来指定当前复制规则的动作,其中:
Push-based 表示把资源从本地 Harbor 推送到远端仓库。
Pull-based 表示把资源从远程仓库拉取到本地 Harbor。
资源过滤器:
名称:过滤资源的名称,不填写或者 "",匹配所有资源;"library/" 只匹配 "library" 下的资源。
Tag:过滤资源的 tag/version。不填写或者 "",匹配所有资源;"1.0" 只匹配以 "1.0" 开头的 tag/version。
标签:根据标签筛选资源。
资源:过滤资源类型。
目的 Registry:指定目的仓库,该仓库信息在“仓库管理”中添加目的。
目的 Namespace:指定目的端名称空间。如果不填,资源会被放到和源相同的名称空间下。
触发模式:
手动:手动触发。
定时:使用 CRON 表达式指定定时触发条件。
事件驱动:由 Harbor 的事件触发,如 Push 事件。
注意:
(1)如果勾选“删除本地资源时同时也删除远程的资源”,则本地仓库 Harbor 和远程仓库将保持一致。
(2)如果勾选“覆盖”,在同步镜像时,如果存在具有相同名称的资源,则会自动覆盖目标上的资源。
如果我们存在如下架构的 Harbor,在“源Harobr”中配置了一个复制规则,该规则将复制镜像到“目标Harbor”,如下图:
在 Docker 中执行如下命令推送 redis 镜像到源 Harbor 服务,如下:
// 登录 harbor [root@hxvm ~]# docker login hxvm:80 Authenticating with existing credentials... WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded // 打标签 [root@hxvm ~]# docker tag redis hxvm:80/demo/redis:v1.0 // 推送镜像 [root@hxvm ~]# docker push hxvm:80/demo/redis:v1.0 The push refers to repository [hxvm:80/demo/redis] 2f1dc4a31b6f: Pushed 5f70bf18a086: Pushed 5c6b18089c89: Pushed fa65e4be9d35: Pushed a71dbd37c9b5: Pushed 2327eaf97cce: Pushed 6f55c091a296: Pushed 8d853c8add5d: Pushed v1.0: digest: sha256:2f4b8bcfa2f4c8dcfafa4925c7d416f70692254617911f6e4f3ceaedf63313d9 size: 1986
执行完上面命令后,再次进入“复制管理”页面,多出了一条日志记录,该日志触发模式为“event_based”,如下图:
登录到目标 Harbor,查看项目“demo”项目,多出了一个 demo/redis 镜像,这就是刚才我们推送到源 Harbor 上的镜像,如下图:
选中待修改的复制规则,点击“修改”按钮修改改规则,如下图:
注意:复制规则不允许修改复制模式。
选中待删除的复制规则,点击“删除”按钮,删除它。如下图:
注意:请谨慎执行该操作,该操作将删除复制规则。
选中待复制的规则,点击“复制”按钮进行过复制,手动触发复制规则,如下图:
复制成功后,将会添加一条 Trigger 为 manual 的日志,如下图:
注意:请谨慎操作,频繁的复制将会导致网络压力过大。