首页> 中国专利> Docker镜像仓库的镜像同步方法和镜像同步系统

Docker镜像仓库的镜像同步方法和镜像同步系统

摘要

本发明公开了Docker镜像仓库的镜像同步方法和镜像同步系统,其镜像同步方法先由云管区仓库收到某一可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;之后,云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库。本发明通过在云管区、各可用区域均设置控制单元和仓库,通过监听Docker镜像仓库的事件,来实现云管区与各可用区域的镜像同步,从而解决了Docker镜像实时同步的问题。

著录项

  • 公开/公告号CN107247793A

    专利类型发明专利

  • 公开/公告日2017-10-13

    原文格式PDF

  • 申请/专利权人 平安科技(深圳)有限公司;

    申请/专利号CN201710473796.6

  • 发明设计人 刘俊杰;

    申请日2017-06-21

  • 分类号G06F17/30(20060101);H04L29/08(20060101);

  • 代理机构44268 深圳市君胜知识产权代理事务所(普通合伙);

  • 代理人王永文;唐敏

  • 地址 518000 广东省深圳市福田区八卦岭工业区平安大厦六楼

  • 入库时间 2023-06-19 03:28:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-03-17

    授权

    授权

  • 2017-11-10

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20170621

    实质审查的生效

  • 2017-10-13

    公开

    公开

说明书

技术领域

本发明涉及Docker技术领域,具体涉及Docker镜像仓库的镜像同步方法和镜像同步系统。

背景技术

Docker(Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化)提供的容器技术允许在同一台主机或虚拟机上运行若干个容器(container),每个容器就是一个独立的虚拟环境或应用。

容器来源于Docker 镜像(image),而镜像可以由用户自制或由运行中的容器提交来生成,镜像生成后,可以推送(push)到镜像仓库(registry)中进行保存,也可以从镜像仓库拉取(pull)到本地以运行容器。

Docker提供了官方镜像仓库(Docker hub),同时允许用户自行搭建私有镜像仓库(private registry)。对于大多数机构和组织,使用私有镜像仓库是很有必要的,用以保护仓库的镜像内容及使用。

镜像以分层存储的形式保存于文件系统中,不同的镜像可能共用某些层(layer),以节省存储空间。对于涉及多区域用户访问的仓库搭建,当需要统一管理镜像时,镜像同步是一项必须的工作,以确保用户使用的镜像范围不局限于某个区域。

镜像同步可以由多种方案实现,其中一种是共享存储,即多个区域的仓库(registry)挂载一块共享的网络存储盘,从而可以保证每次有镜像推送至某区域的仓库(registry)时,所有的仓库(registry)都能立即同步。但有时,多区域的registry无法共享存储,且各区域间的网络无法互相访问,即各个区域之间是隔离的。

在多租户环境下使用Docker镜像时,租户下的用户通常被限制为只能访问各个可用区的公共服务区内部署的镜像仓库(Registry)。而对于公共镜像,需要在各个可用区的镜像仓库内同步;对于租户内部的私有镜像,也需要将镜像同步到各个可用区。对于用户来说,其所能看到的各个可用区内的镜像应该是一致的,而同时各个可用区的云存储不能跨区域共享,不能分发镜像事件至其它可用区,因此不能借助共享存储的方式来实现同步,而只能使用实时同步。

因此,现有技术还有待于改进和发展。

发明内容

针对现有技术的上述缺陷,本发明提供一种Docker镜像仓库的镜像同步方法和镜像同步系统,主要解决现有Docker镜像不能实时同步的问题。

本发明解决技术问题所采用的技术方案如下:

一种Docker镜像仓库的镜像同步方法,所述镜像同步方法包括如下步骤:

云管区仓库收到某一可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;

云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库。

所述的Docker镜像仓库的镜像同步方法中,所述云管区仓库收到可用区仓库推送的镜像事件时,通知云管区控制单元收到所述镜像事件的步骤之前还包括:

由某一可用区控制单元控制该可用区仓库向云管区仓库推送镜像。

所述的Docker镜像仓库的镜像同步方法中,所述云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库的步骤包括:

所述云管区控制单元解析镜像事件,并判断镜像事件是拉取事件还是推送事件;

若镜像事件为推送事件,确定该镜像事件需要同步,并调用云管区仓库的API接口将镜像同步至相应的可用区仓库。

所述的Docker镜像仓库的镜像同步方法中,若镜像事件为推送事件,确定该镜像事件需要同步,并调用云管区仓库的API接口将镜像同步至相应的可用区仓库的步骤包括:

若镜像事件为推送事件,确定该镜像事件需要同步;

解析所述镜像事件的来源以获取推送该镜像的可用区仓库;

调用云管区仓库的API接口将镜像同步至除推送给镜像的可用区仓库之外的其他各可用区仓库。

所述的Docker镜像仓库的镜像同步方法中,所述云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库的步骤之后,还包括:

各可用区仓库接收到镜像时,通知该可用区控制单元收到所述镜像事件;

该可用区控制单元判断所述镜像事件是否来源于云管区,如果是,该可用区仓库将不再继续分发该镜像。

所述的Docker镜像仓库的镜像同步方法中,当各可用区均有多个仓库时,云管区控制单元控制云管区仓库将镜像同步至相应的可用区仓库的步骤包括:

云管区控制单元识别镜像事件的真实IP,判断该真实IP是否与某个可用区仓库的真实IP相匹配,若是则不向该可用区仓库推送镜像。

一种Docker镜像仓库的镜像同步系统,所述镜像同步系统包括:

云管区仓库,用于收到某一可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;

云管区控制单元,用于解析所述镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库。

所述的Docker镜像仓库的镜像同步系统,还包括:

可用区控制单元,用于控制该可用区仓库向云管区仓库推送镜像。

所述的Docker镜像仓库的镜像同步系统,还包括:

可用区仓库,用于接收到镜像时,通知该可用区控制单元收到所述镜像事件;

所述可用区控制单元,还用于接判断所述镜像事件是否来源于云管区,如果是,该可用区仓库将不再继续分发该镜像。

所述的Docker镜像仓库的镜像同步系统,

所述云管区控制单元,还用于识别镜像事件的真实IP,判断该真实IP是否与某个可用区仓库的真实IP相匹配,若是则不向该可用区仓库推送镜像。

本发明公开了Docker镜像仓库的镜像同步方法和镜像同步系统,其镜像同步方法先由云管区仓库收到某一可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;之后,云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库。本发明通过在云管区、各可用区域均设置控制单元和仓库,通过监听Docker镜像仓库的事件,来实现云管区与各可用区域的镜像同步,从而解决了Docker镜像实时同步的问题。

附图说明

图1为本发明提供的Docker镜像仓库的镜像同步方法的较佳实施例的流程图。

图2为本发明提供的Docker镜像仓库的镜像同步方法中步骤S200的较佳实施例的流程图。

图3为本发明提供的Docker镜像仓库的镜像同步方法中第一应用实施例的示意图。

图4为本发明提供的Docker镜像仓库的镜像同步方法中第二应用实施例的示意图。

图5为本发明提供的Docker镜像仓库的镜像同步方法中第三应用实施例的示意图。

图6为本发明Docker镜像仓库的镜像同步系统的功能原理框图。

图7为本发明Docker镜像仓库的镜像同步系统中云管区控制单元的功能原理框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,其为本发明提供的Docker镜像仓库的镜像同步方法的较佳实施例的流程图。如图1所示,本发明较佳实施例所述的Docker镜像仓库的镜像同步方法以下步骤:

S100、云管区仓库收到某一可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件。

本实施例中,在云管区和各可用区域中均设置了控制单元和仓库,所述云管区为一个,可用区为若干个,用于对各可用区的镜像进行管理。

较佳地,在步骤S100之前还包括:由某一可用区控制单元控制该可用区仓库向云管区仓库推送镜像。

具体实施时,由用户终端向可用区仓库推送一镜像,触发该区仓库通知该可用区控制单元接收到镜像事件,可用区控制单元解析镜像事件后,判断镜像事件是拉取事件还是推送事件,若为推送事件,则调用该可用区区仓库的API接口(Application ProgrammingInterface,应用程序编程接口)将镜像同步至云管区仓库。

步骤S200、云管区控制单元解析镜像事件,当判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库。

本实施例中,由云管区控制单元判断镜像事件需要同步时,控制云管区仓库将镜像同步至相应的可用区仓库中,实现了各可用区镜像与云管区同步。

请参阅图2,其为本发明提供的Docker镜像仓库的镜像同步方法中步骤S200的较佳实施例的流程图。

如图2所示,所述步骤S200包括:

步骤S201、所述云管区控制单元解析镜像事件,并判断镜像事件是拉取事件还是推送事件;

步骤S202、若镜像事件为推送事件,确定该镜像事件需要同步,并调用云管区仓库的API接口将镜像同步至相应的可用区仓库。当镜像事件为拉取事件,或者云管区仓库中存在该镜像时,则不进行同步操作。

具体实施时,所述步骤S202包括:

S2021、若镜像事件为推送事件,确定该镜像事件需要同步。当镜像事件为拉取事件,或者云管区仓库中存在该镜像时,则不进行同步操作。

S2022、若镜像事件为推送事件时,解析所述镜像事件的来源以获取推送该镜像的可用区仓库。在云管区控制单元中,将该源可用区仓库的分发任务剔除,避免出现同步回环。

S2023、调用云管区仓库的API接口将镜像同步至除推送给镜像的可用区仓库之外的其他各可用区仓库当同步镜像事件时,不将镜像分发给推送该镜像的可用区仓库。

为了更好的理解本发明的技术方案,此处例举第一应用实施例对本发明的Docker镜像仓库的镜像同步方法进行详细说明:

云管区为集中管理区,各可用区可设置在不同的地点,如A可用区设置在上海、B可用区设置在北京,C可用区设置在深圳等。A可用区、B可用区和C可用区之间不能相互通讯,A可用区、B可用区和C可用区只能与云管区通讯,进行推送或者拉取镜像操作。

如图3所示,本发明的第一应用实施例具体包括:

第一步、由用户终端向A可用区仓库推送镜像;

第二步、A可用区仓库收到镜像后通知A可用区控制单元接收到镜像事件并存储该镜像;

第三步、A可用区控制单元解析镜像事件后,并控制A可用区仓库将镜像推送至云管区仓库;

第四步、云管区仓库收到A可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;

第五步、云管区控制单元解析镜像事件,当判断镜像事件为推送事件时,控制云管区仓库将镜像同步至A可用区仓库、B可用区仓库和C可用区仓库,当判断镜像事件为拉取事件时,不处理该镜像事件。

为避免浪费网络资源,本发明还采取了防止回环和过滤机制,所述步骤S202还包括:若镜像事件为推送事件时,解析所述镜像事件的来源;当同步镜像事件时,不将镜像分发给推送该镜像的可用区仓库。

本实施例中,在判断镜像事件的来源时,通过识别推送镜像的可用区仓库的IP,从而能准确判断事件推送来源。

进一步的,在步骤S200之后,本发明的Docker镜像仓库的镜像同步方法还包括:

步骤S300、各可用区仓库接收到镜像时,通知该可用区控制单元收到所述镜像事件;

步骤S400、该可用区控制单元判断所述镜像事件是否来源于云管区,如果是,该可用区仓库将不再继续分发该镜像。

本发明通过在云管区和各可用区均设置防止回环和过滤机制,防止镜像推送事件无限回环,有效节省了网络资源。

为了便于更好的理解本发明的回环机制,此处例举第二应用实施例对本发明的Docker镜像仓库的镜像同步方法进行详细说明:

如图4所示,本发明的第二应用实施例具体包括:

第一步、A可用区仓库将镜像推送至云管区仓库;

第二步、云管区仓库收到A可用区仓库推送的镜像时,通知云管区控制单元收到镜像事件;

第三步、云管区控制单元解析镜像事件,当判断镜像事件为推送事件,并确定该镜像事件需要同步时,分析出推送事件的来源为A可用区仓库,并将A可用区仓库的分发任务剔除;

第四步、云管区控制单元将分发任务发送给云管区仓库;

第五步、云管区仓库将镜像分发给B可用区仓库和C可用区仓库;

第六步、B可用区仓库和C可用区仓库接收到镜像后,通知B可用控制单元和C可用控制单元接收到镜像事件;

第七步、B可用控制单元和C可用控制单元分析镜像事件的来源为云管区,将本次的推送任务删除,不再进行分发,避免了回环(即避免推送镜像循环)。

在镜像同步时,有可能会出现同步失败的情况(譬如:镜像同步时,出现网终异常导致镜像同步失败),为了提高镜像同步的准确率,在本发明的Docker镜像仓库的镜像同步方法中,所述云管区仓库定时将所有镜像推送至各可用区仓库。具体实施时,云管区控制单元控制云管区仓库每天凌晨两点定时向各可用区推送镜像。

为了避免镜像同步重复,在定期同步时,云管区控制单元调用源镜像仓库的API接口将镜像推送到相应的可用区仓库,并与该可用区仓库进行交互检测可用区仓库是否存在所推送的镜像;当检测镜像存在时,中止推送所述镜像。

在更加复杂的网络环境中,一个可用区内设有多个可用区仓库,并使负载均衡,各可用区仓库对外提供一个vip (Very Important Person,贵宾)及端口时,则以该可用区为目标的区域应将镜像推送至该vip 及端口,且判断回环时,应查看事件来源是否为其可用区仓库的真实ip 及端口。

因此,当各可用区均有多个仓库时,云管区控制单元控制云管区仓库将镜像同步至相应的可用区仓库时,具体为:云管区控制单元识别镜像事件的真实IP,判断该真实IP是否与某个可用区仓库的真实IP相匹配,若是则将可用区仓库的分发任务剔除,不向该可用区仓库推送镜像。

具体地,当一个区域有多个仓库时,为使各仓库负载均衡,本发明采用令每个区域的所有仓库对外提供一个vip及端口,在其他区域向该区域推送镜像时,通过vip及端口下发。对于各可用区,其分发目标只有云管区镜像仓库VIP及端口,在该区域控制单元接到镜像推送事件时,根据镜像事件来源的真实IP,查询该IP是否为云管区镜像仓库的真实IP之一,若是则将云管区镜像仓库VIP从当次分发任务中剔除,此时当次分发任务的目标为空,不再继续同步镜像。

对于云管区,其分发目标包含各可用区镜像仓库VIP及端口,在云管区控制单元接到镜像推送事件时,根据镜像事件来源的真实IP,查询该IP是否为某个可用区镜像仓库的真实IP之一,若是则将该区域镜像仓库的VIP从当次分发任务中剔除,此时当次分发任务的目标为其他的可用区镜像仓库,不再继续对来源区域向下同步,而同步到其他区域。负载均衡时,同一个镜像推送请求只会由多个仓库中的某一个来处理,而多个仓库共用了存储,所以它们的任意一个来处理都是相等的,由于有控制单元控制。

为了便于更好的理解各区域多仓库时的回环机制,此处例举第三应用实施例对本发明的Docker镜像仓库的镜像同步方法进行详细说明:

如图5所示,本发明的第三应用实施例具体包括:

第一步、C可用区仓库1将镜像推送至云管区仓库VIP及端口;

第二步、云管区仓库VIP及端口将谇镜像推送请求交由云管区仓库2进行处理;

第三步、云管区仓库2收到推送镜像后,通知云管区控制单元;

第四步、云管区控制单元收到镜像事件后,分析推送镜像事件的来源的真实IP为C可用区仓库1,并将C可用区的分发任务剔除;

第五步、云管区控制单元控制云管区仓库2通过云管区仓库VIP及端口将镜像推送送A可用区仓库VIP及端口和B可用区仓库VIP及端口。

进一地,在云管区控制单元中还设置有存储模块,用于保存仓库及镜像的内容,避免异常情况导致数据丢失。具体可在云管区控制单元接收到推送事件时,将镜像的具体信息保存在存储模块中。

本发明实现了公共镜像在各个可用区的镜像仓库内能及时同步;租户内部的私有镜像也能及时同步到各个可用区,从而保证在任意可用区内,用户对于公共镜像以及租户下的用户对于租户内部的私有镜像无能无差别地访问。

本发明还提供了一种Docker镜像仓库的镜像同步系统,如图6所示,所述装置包括:云管区仓库11和云管区控制单元12,所述云管区仓库11与云管区控制单元12通讯,用于收到某一可用区仓库推送的镜像时,通知云管区控制单元12收到镜像事件。所述云管区控制单元12,用于解析所述镜像事件,当判断镜像事件需要同步时,控制云管区仓库11将镜像同步至相应的可用区仓库。具体请参阅上述方法对应的实施例。

本发明的Docker镜像仓库的镜像同步系统还包括可用区仓库21和可用区控制单元22,所述可用区仓库21连接可用区控制单元22。所述可用区为多个。所述可用区控制单元,用于控制该可用区仓库向云管区仓库推送镜像。

具体实施时,由用户终端向可用区仓库21推送一镜像,触发该区仓库21通知该可用区控制单元22接收到镜像事件,可用区控制单元22解析镜像事件后,判断镜像事件是拉取事件还是推送事件,若为推送事件,则调用该可用区区仓库21的API接口将镜像推送至云管区仓库。

所述可用区仓库,用于接收到镜像时,通知该可用区控制单元收到所述镜像事件。所述可用区控制单元,还用于接判断所述镜像事件是否来源于云管区,如果是,使该可用区仓库将不再继续分发该镜像,从而可防止镜像回环。

在判断镜像事件的来源时,通过识别推送镜像的可用区仓库的IP,从而能准确判断事件推送来源。请结合图5,当各可用区均有多个仓库时,所述云管区控制单元,还用于识别镜像事件的真实IP,判断该真实IP是否与某个可用区仓库的真实IP相匹配,若是则不向该可用区仓库推送镜像。具体请参阅上述方法对应的实施例。

请参阅图7,具体实施时,所述云管区控制单元12包括:解析子单元121和镜像同步子单元122。

所述解析子单元121,用于解析所述镜像事件,并判断镜像事件是拉取事件还是推送事件。所述镜像同步子单元122,用于镜像事件为推送事件,确定该镜像事件需要同步,并则调用云管区仓库的API接口将镜像同步至各相应的可用区仓库。

所述解析子单元121具体用于当镜像事件为推送事件,确定该镜像事件需要同步时,解析所述镜像事件的来源以获取推送该镜像的可用区仓库。所述镜像同步子单元122具体用于调用云管区仓库的API接口将镜像同步至除推送给镜像的可用区仓库之外的其他各可用区仓库。具体请参阅上述方法对应的实施例。

进一步的实施例中,所述云管区控制单元12,还控制云管区仓库定时将所有镜像推送至各可用区仓库,以避免镜像同步时,由于网络中断等原因导致镜像同步失败时,在不影响业务的前提下进一步确保镜像同步的准确率。具体请参阅上述方法对应的实施例。

综上所述,本发明通过在云管区、各可用区域均设置控制单元和仓库,通过监听Docker镜像仓库的事件,来实现云管区与各可用区域的镜像同步,从而解决了Docker 镜像实时同步的问题。使租户内部的私有镜像也能及时同步到各个可用区,从而保证在任意可用区内,用户对于公共镜像以及租户下的用户对于租户内部的私有镜像无能无差别地访问。

当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号