CN110912955B - 容器镜像下载、上传方法及装置 - Google Patents
容器镜像下载、上传方法及装置 Download PDFInfo
- Publication number
- CN110912955B CN110912955B CN201811083535.4A CN201811083535A CN110912955B CN 110912955 B CN110912955 B CN 110912955B CN 201811083535 A CN201811083535 A CN 201811083535A CN 110912955 B CN110912955 B CN 110912955B
- Authority
- CN
- China
- Prior art keywords
- mirror image
- layer
- target
- mirror
- image layer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种容器镜像下载方法,包括:从镜像存储装置获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;基于镜像层的层标识,从镜像存储装置获取镜像层的大小;根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片;从镜像存储装置并行下载并保存多个内容分片;合并所下载的多个内容分片,得到镜像层。本申请还公开了一种容器镜像上传方法。本申请提供的方案,能够有效缩短传输容器Docker镜像所需要的时间,提高网络传播效率,从而提升了专有云迭代、输出和交付的效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种容器镜像下载方法、上传方法及装置。
背景技术
随着云技术的日益成熟,以政务云为代表的私有云在国家政策的大力支持下发展迅速。金融、医疗、工业制造等传统行业的上云进程加快,专有云和私有云市场也逐渐得到了云服务商、系统集成商、IDC(互联网数据中心)服务商以及各行业用户的广泛关注。
随着专有云市场的不断壮大,内部专有云演练的迭代也越来越频繁,现场和内部演练都需要不断地定制化输出专有云部署包,其中就包括容器Docker镜像包。目前,专有云的镜像数据量较大,往往在300GB~400GB左右,可能会占据整个专有云部署包75%左右的空间,例如,专有云部署包的大小为538GB左右,其中镜像的大小可能达到404GB左右。
因此,为了提升专有云迭代、输出和交付的效率,如何能有效缩短容器Docker镜像的网络传播时间,提高网络传播效率,成为一个亟待解决的问题。
发明内容
本申请实施例提供一种容器镜像下载方法和装置,能够有效缩短下载容器Docker镜像所需要的网络传播时间,提高网络传播效率,从而提升了专有云迭代、输出和交付的效率。
本申请实施例还提供一种容器镜像上传方法和装置,能够有效缩短上传容器Docker镜像所需要的网络传播时间,提高网络传播效率,从而提升了专有云迭代、输出和交付的效率。
本申请实施例采用下述技术方案:
第一方面,本申请实施例提供一种容器镜像下载方法,其中,所述方法包括:
从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;
根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;
从所述镜像存储装置并行下载并保存所述多个内容分片;
合并所下载的多个内容分片,得到所述镜像层。
优选的,本申请实施例第一方面提供的方法中,根据所述镜像层的大小,对所述镜像层进行内容切片,包括:
根据所述镜像层的大小,确定与所述镜像层相匹配的内容分片大小;
根据所述内容分片大小,将所述镜像层划分为多个顺序排列的内容分片,所述内容分片的数量根据所述镜像层的大小和所述内容分片大小确定。
优选的,本申请实施例第一方面提供的方法中,保存所述多个内容分片,包括:
为每个内容分片生成分片标识,所述分片标识中包括所述内容分片的分片序号,所述分片序号用于指示对应内容分片的顺序;
相对应的保存所述内容分片及分片标识。
优选的,本申请实施例第一方面提供的方法中,所述分片标识中还包括所述镜像层的下载标识,所述下载标识用于指示对应内容分片的下载批次信息。
优选的,本申请实施例第一方面提供的方法中,合并所下载的多个内容分片,包括:
在已存在合并后镜像层的情况下,检查所述合并后镜像层的数据是否完整;
若所述合并后镜像层的数据完整,则删除下载的所述多个内容分片;
若所述合并后镜像层的数据不完整,则删除所述合并后镜像层,并合并所下载的多个内容分片。
优选的,本申请实施例第一方面提供的方法中,检查所述合并后镜像层的数据是否完整,包括:
确定所述合并后镜像层的字节数目;
在所述合并后镜像层的字节数目与所述镜像层的大小一致的情况下,确定所述合并后镜像层的数据完整;
在所述合并后镜像层的字节数目与所述镜像层的大小不一致的情况下,确定所述合并后镜像层的数据不完整。
优选的,本申请实施例第一方面提供的方法中,在合并所下载的多个内容分片之前,所述方法还包括:
判断所述镜像层是否处于合并中状态;
合并所下载的多个内容分片,具体为:
在所述镜像层未处于合并中状态的情况下,合并所下载的多个内容分片。
优选的,本申请实施例第一方面提供的方法中,在从镜像存储装置获取目标镜像的元数据信息之后,所述方法还包括:
判断是否已存在与所述层标识相对应的镜像层;
则基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小,具体为:
在未存在与所述层标识相对应的镜像层的情况下,基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小。
优选的,本申请实施例第一方面提供的方法中,保存所述多个内容分片,包括:
将所述多个内容分片保存在缓存中;
则在合并所下载的多个内容分片,得到所述镜像层之后,所述方法还包括:
将所述镜像层写入磁盘中。
优选的,本申请实施例第一方面提供的方法中,将所述镜像层写入磁盘中,具体为:
采用无缓存的流式输入输出方式,将所述镜像层写入磁盘中。
优选的,本申请实施例第一方面提供的方法中,在从镜像存储装置获取目标镜像的元数据信息之后,所述方法还包括:
根据所述目标镜像中各镜像层的层标识,判断所述各镜像层中是否存在重复的镜像层;
若所述各镜像层中存在重复的镜像层,则将所述重复的镜像层中任一个镜像层确定为目标镜像层,并从所述各镜像层中删除与所述目标镜像层重复的其他镜像层;
则基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小,具体包括:
基于所述目标镜像层的层标识,从所述镜像存储装置获取所述目标镜像层的大小。
第二方面,本申请实施例还提供一种容器镜像上传方法,所述方法包括:
获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;
向镜像存储装置上传所述目标镜像层;
在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息。
优选的,本申请实施例第二方面提供的方法中,向镜像存储装置上传所述目标镜像层,包括:
向所述镜像存储装置发送镜像层上传请求;
接收所述镜像存储装置响应于所述镜像层上传请求返回的请求标识;
根据所述请求标识和所述目标镜像层的层标识,将所述目标镜像层上传至所述镜像存储装置;
在上传所述目标镜像层之后,向所述镜像存储装置发送镜像层上传完成请求。
优选的,本申请实施例第二方面提供的方法中,向镜像存储装置上传所述目标镜像层,具体为:
向镜像存储装置并行上传多个所述目标镜像层。
优选的,本申请实施例第二方面提供的方法中,根据所述各镜像层的层标识,对所述各镜像层进行去重处理,包括:
根据所述各镜像层的层标识,判断所述各镜像层中是否存在重复的镜像层;
若所述各镜像层中存在重复的镜像层,则将所述重复的镜像层中任一个镜像层确定为所述目标镜像层,并从所述各镜像层中删除与该目标镜像层重复的其他镜像层。
优选的,本申请实施例第二方面提供的方法中,在向镜像存储装置上传所述目标镜像层之前,所述方法还包括:
根据所述目标镜像层的层标识,向所述镜像存储装置请求查询所述镜像存储装置中是否已存在该目标镜像层;
向镜像存储装置上传所述目标镜像层,具体为:
在所述镜像存储装置中不存在该目标镜像层的情况下,向所述镜像存储装置上传所述目标镜像层。
优选的,本申请实施例第二方面提供的方法中,在获取目标镜像的元数据信息之后,所述方法还包括:
根据所述目标镜像的元数据信息,向所述镜像存储装置请求查询所述镜像存储装置中是否已存在该目标镜像;
则根据所述各镜像层的层标识,对所述各镜像层进行去重处理,具体为:
在所述镜像存储装置中不存在该目标镜像的情况下,根据所述各镜像层的层标识,对所述各镜像层进行去重处理。
第三方面,本申请实施例提供一种容器镜像管理系统,所述系统包括:
容器镜像下载装置,用于从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;还用于基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;还用于根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;还用于从所述镜像存储装置并行下载并保存所述多个内容分片;还用于合并所下载的多个内容分片,得到所述镜像层;
容器镜像上传装置,用于获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;还用于根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;还用于向镜像存储装置上传所述目标镜像层;还用于在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息;
镜像存储装置,用于存储容器镜像。
第四方面,本申请实施例提供一种容器镜像下载装置,所述装置包括:
元数据信息获取模块,用于从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
镜像层大小获取模块,用于基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;
内容切片模块,用于根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;
内容分片下载模块,用于从所述镜像存储装置并行下载并保存所述多个内容分片;
内容分片合并模块,用于合并所下载的多个内容分片,得到所述镜像层。
第五方面,本申请实施例提供一种容器镜像上传装置,所述装置包括:
元数据信息获取模块,用于获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
去重处理模块,用于根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;
镜像层上传模块,用于向镜像存储装置上传所述目标镜像层;
元数据信息上传模块,用于在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息。
第六方面,本申请实施例提供一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行前述第一方面提供的方法。
第七方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行前述第一方面提供的方法。
第八方面,本申请实施例提供一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行前述第二方面提供的方法。
第九方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行前述第二方面提供的方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
本申请实施例中,通过从镜像存储装置获取目标镜像的元数据信息,并进而在获取到镜像层的大小的基础上对镜像层进行内容切片,从而能够从镜像存储装置并行下载这些内容分片,以合并得到镜像层。因此,采用本申请实施例提供的容器镜像下载方法,能够缩短下载容器镜像所需要的网络传播时间,提高网络传播效率,从而提升了专有云迭代、输出和交付的效率。并且,采用本申请实施例提供的容器镜像下载方法,无需另行部署专用的Registry(一种用于存储和分发容器Docker镜像的服务)即可获知目标镜像的信息,因而不用依赖外部部署的Registry专用服务即可进行容器镜像的下载,避免了输出和部署镜像包流程的繁琐,也避免了通过Registry专用服务进行内容转发而影响镜像的部署的效率,从而有利于简化镜像的下载过程,提高镜像下载效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的一种容器镜像下载方法的流程示意图;
图2为本申请实施例提供的一种容器镜像上传方法的流程示意图;
图3为本申请实施例提供的一种容器镜像管理系统的结构示意图;
图4为本申请实施例提供的一种容器镜像下载装置的结构示意图;
图5为本申请实施例提供的一种容器镜像上传装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图;
图7为本申请实施例提供的第二种电子设备的结构示意图;
图8为采用本申请实施例进行镜像下载时的系统架构示意图;
图9为采用本申请实施例进行镜像上传时的系统架构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
本申请实施例提供一种容器镜像下载方法。可以理解到,该方法由用于获取容器镜像的主体执行,可以称之为容器镜像下载装置。具体的,该装置可以理解为目标磁盘(即用于接收、存储容器镜像的磁盘)所在的计算机,也可以理解为目标磁盘所在计算机上运行的镜像下载工具(该工具在计算机上运行,用于从镜像存储装置下载容器镜像,并将下载的容器镜像写入目标磁盘)。
参见图1和图8所示,本申请实施例提供的容器镜像下载方法,可以具体包括以下步骤:
S101:从镜像存储装置获取目标镜像的元数据信息。
可以理解到,容器Docker镜像下载装置从数据源,也就是镜像存储装置(可具体为中心容器HUB仓库,又可称为镜像仓库)中获取目标镜像的元数据信息Manifest。其中,目标镜像可以理解为待下载的镜像。目标镜像的Manifest中,可以包含多类信息,例如,镜像存储装置的名称,目标镜像的标签Tag,目标镜像中各镜像层的摘要信息Digest等。
尤其是,目标镜像的元数据信息中包括目标镜像中各镜像层的层标识。由于镜像层的摘要信息Digest可以唯一的标识镜像层,因此,各镜像层的层标识可以具体体现为各镜像层的摘要信息。
具体的,在从镜像存储装置获取目标镜像的元数据信息后,可以通过对目标镜像的元数据信息Manifest进行分析(例如,可以采用图8中的Manifest分析模块),就可以抽取出目标镜像中各镜像层(又可称为Blob层)的摘要信息Digest,获取到镜像层的层标识,从而能够了解到目标镜像中包含的镜像层的数量、各镜像层的位置、顺序、大小等信息。可选的,摘要信息digest可以是对应镜像层的64位哈希码(hash码)或者256位哈希码(hash码)。
可以理解到,由于目标镜像由元数据信息Manifests(也可称为Meta信息)和Blob层组成,因此,在已经获取到目标镜像的Meta信息的基础上,只要完成Blob层的下载,即可在本地使用目标镜像。
需要说明的是,在从镜像存储装置获取目标镜像的元数据信息之后,可以直接继续下载各镜像层,且优选采用并行方式下载各镜像层;也可以先从目标镜像的所有镜像层中确定出需要下载的镜像层作为目标镜像层,则在后续下载时,仅下载目标镜像层即可完成目标镜像的下载。
能够理解到,在进行镜像层的下载之前,先从各镜像层中确定需要下载的目标镜像层,能够在不影响目标镜像的部署的前提下,减少实际下载的镜像层的数量,能够缩短镜像下载所需的时间,有利于提高镜像下载的效率。
可选的,从各镜像层中确定目标镜像层时,可以基于各镜像层的摘要信息,判断各镜像层中是否存在重复的镜像层。如果目标镜像中存在重复的镜像层,则不用反复下载这些相同的镜像层,而只需要将重复的镜像层中的任何一个确定为目标镜像层进行一次下载,即可在部署目标镜像时重复使用,因此,可以从各镜像层中删除与该目标镜像层重复的其他镜像层。采用这种方式,对目标镜像中各镜像层进行去重处理,不再重复下载重复的镜像层,有利于缩短镜像下载时间,提高下载效率。
可选的,由于已经完成下载的镜像层将存在于本地磁盘中(参见图8中所示),因此,从各镜像层中确定目标镜像层时,还可以判断是否已存在与层标识相对应的镜像层。如果存在与层标识相对应的镜像层,表示该镜像层在本地磁盘中已经存在,则无需将该镜像层作为目标镜像层再次下载。而如果未存在与层标识相对应的镜像层,则可以执行后续步骤对目标镜像层进行下载。采用这种方式,能够实现Blob粒度的增量下载,同样有利于进一步缩短镜像下载时间,提高下载效率。
还需要说明的是,在具体实施时,既可以每确定出一个目标镜像层后,即刻对该目标镜像层进行下载,然后再次确定下一个目标镜像层进行下载。也可以确定出多个目标镜像层后,根据这多个目标镜像层各自的摘要信息,对这多个目标镜像层进行下载,且优选采用并行方式下载这些目标镜像层,从而进一步缩短整个镜像的下载时间,提高镜像下载效率。
能够理解,在完成目标镜像中所有镜像层的下载后,可以对镜像重新打标签(Retag),对从镜像存储装置中获取到的元数据信息进行修改,例如,原元数据信息中标签的内容为“test1”,则下载该目标镜像后,在新的元数据信息中将标签的内容修改为“test2”,以示区分。
进一步的,可以对修改后的元数据信息重新进行加密签证(可以采用图8中的数据完整性校验和加密签证模块进行),并将签证后的元数据信息Manifest保存在本地磁盘中,至此完成目标镜像的下载与部署。
如前所述,如果存在多个需要下载的镜像层(可以是目标镜像中的所有镜像层,也可以是从所有镜像层中按照上述多种方式确定出的目标镜像层),可以采用多线程、多进程或者多机器集群等方式并行下载,以缩短完成目标镜像下载的时间。
在对每一镜像层(可以是目标镜像的各镜像层中任一镜像层,也可以是经过去重处理等筛选环节后确定的目标镜像层)进行下载时,都可以采用以下方式进行:
S103:基于镜像层的层标识,从镜像存储装置获取镜像层的大小,可记为Sblob。
S105:根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片。
具体实施步骤S105时,以上过程可以采用图8中的自适应分块计算模块进行。具体的,可以先根据镜像层大小Sblob,确定与镜像层相匹配的内容分片大小(可记为Sslice)。例如,镜像层的大小Sblob小于1GB时,与镜像层相匹配的内容分片大小Sslice可取为100MB。镜像层的大小Sblob与内容分片大小Sslice之间的对应关系,可以通过以下切片获取函数来反映:
Sslice=GetSliceSize(Sblob)
需要说明的是,若内容分片大小相对于镜像层设计得过大,则相当于没有对镜像层进行内容切片,因此,也就无法达到并行下载多个内容分片以缩短下载时间的效果了。反之,若内容分片大小相对于镜像层设计得过小,则内容分片的数量将过多,在后续步骤中,例如执行步骤S109合并所下载的多个内容分片时,耗时将更长,反而影响下载效率。因此,镜像层的大小与内容分片大小之间的对应关系,可以根据运维经验确定和调整,也可以根据实际需要(例如,镜像下载现场的网络状态等)设定,只要能够满足提高下载效率的目的即可。
在确定内容分片大小的基础上,可以进一步根据镜像层的大小Sblob和内容分片大小Sslice,确定内容分片数量Ssum。具体的,可以将镜像层的大小Sblob与内容分片大小Sslice的比值的绝对值,确定为内容分片数量Ssum。可以采用以下公式计算:
在确定内容分片数量Ssum的基础上,可以进一步基于镜像层的大小Sblob和内容分片数量Ssum,确定多个内容分片中各内容分片的序号和区间范围。
具体的,所有内容切片的区间范围可以采用以下公式确定:
在此基础上,可以根据各内容分片的序号i和区间范围,对镜像层进行内容切片,从而得以根据内容分片大小,将镜像层划分为多个顺序排列的多个内容分片。
S107:从镜像存储装置并行下载并保存多个内容分片。
可以理解到,并行下载多个内容分片时,可以采用多进程的方式进行,每个进程可以下载所有的内容分片,以便确保内容分片下载完整。每个进程中可以设计多个线程进一步并行下载。本申请实施例对此不做限定。
在保存多个内容分片时,可以为每个内容分片生成分片标识,其中,分片标识中可以包括镜像层的层标识,以便指示该内容分片所属的镜像层。优选的,分片标识中还可以包括内容分片的分片序号,以便指示对应内容分片在镜像层中的顺序。更优的,分片标识中还可以包括镜像层的下载标识,以便指示对应内容分片的下载批次信息。
可选的,可以在每次启动对镜像层的多个内容分片的下载时,生成一个预设长度(例如,可以是16位)的随机哈希字符串hash-key,作为下载批次标识。下载批次标识相同的内容分片,可以理解为在同一次下载过程中得到的内容分片。引入下载批次标识用于反映内容分片的下载批次信息,能够在进行内容分片的合并时进行内容分片的选取,以便避免将未成功下载的不完整内容分片进行合并所导致的合并失败,提高了镜像部署的效率。可以理解到,每启动一次对镜像层的下载,都将生成一个下载批次标识,以唯一的指示该次下载所对应的内容分片。
进一步的,在生成分片标识的基础上,可以在同一目录下相对应的保存内容分片及分片标识。具体的,可以根据分片标识确定各内容分片的文件名称。例如,文件名称可以表示为:{digest}·{hash-key}·{i}。其中,{digest}表示内容分片所属镜像层的层标识,用于反映该内容分片属于哪一个镜像层;{hash-key}表示对内容分片进行下载的下载批次标识,用于反映该内容分片是在对镜像层的哪一次下载过程中下载得到的;{i}表示内容分片的分片序号,用于反映该内容分片是该镜像层中的第几个内容分片。
S109:合并所下载的多个内容分片,得到镜像层。
可以理解到,由于内容分片的分片标识中包含了分片序号的信息,因此,可以根据分片序号确定多个内容分片的顺序,进而对内容分片按照顺序进行合并,得到镜像层。
可选的,在合并多个内容分片得到镜像层前,可以判断本地磁盘中是否已存在该镜像层(相当于合并后镜像层)。如果不存在该镜像层所对应的合并后镜像层,则可合并所下载的多个内容分片,得到合并后镜像层。如果已经存在该镜像层所对应的合并后镜像层,则可进一步检查该合并后镜像层的数据是否完整。如果该合并后镜像层的数据完整,则可以删除已经下载的、用户合并得到该镜像层的多个内容分片;如果该合并后镜像层的数据不完整,则删除该合并后镜像层,并合并所下载的多个内容分片,得到新的合并后镜像层。采用这种方式确定是否对内容分片进行合并,既能确保合并后镜像层的数据完整可用,又能避免对内容分片的重复合并,提高了镜像部署的效率。
可选的,在合并多个内容分片得到镜像层前,还可以判断镜像层是否处于合并中状态。如果镜像层处于合并中状态,则可等待该镜像层合并完毕后,根据合并后镜像层的数据完整与否确定是否进行重新合并。如果镜像层未处于合并中状态,则可合并所下载的多个内容分片,得到合并后镜像层。
需要说明的是,在将内容分片合并(merge)为镜像层时,可能有多个用于进行合并操作的合并进程执行上述步骤S109。为避免合并过程出现错误,可以在合并进程开始之前,先创建一个阻塞排他文件锁,用于反映镜像层是否处于合并中状态。所有的合并进程通过抢锁的方式取得合并权限(merge权限),只有已取得合并权限的合并进程才能够执行合并操作,其他没有抢到锁的合并进程将等待已取得合并权限的合并进程释放锁后,才能再次进行抢锁。在这个过程中,其他没有抢到锁的合并进程将被阻塞(block)住,不能对合并操作生成的合并文件进行任何操作。
可以理解到,对于抢到锁的合并进程而言,相当于镜像层未处于合并中状态;对于没有抢到锁的合并进程而言,相当于镜像层处于合并中状态。
可选的,在存在多个合并进程可以执行步骤109合并所下载的多个内容分片的情况下,可以以多个合并进程中已取得合并权限的合并进程作为当前进程,执行以下步骤:
在已存在合并后镜像层的情况下,当前进程检查合并后镜像层的数据是否完整;
若合并后镜像层的数据完整,则表示对内容分片的合并操作已经完成,并且合并成功,因此,可以以合并后镜像层作为下载成功的镜像层。并且,由于合并操作已经成功完成,因此,当前进程可以删除合并时所采用的多个内容分片,以便释放存储空间;
若合并后镜像层的数据不完整,则表示在此之前对内容分片的合并操作失败,因此,当前进程可以删除合并后镜像层(具体为在当前进程进行合并操作前已经存在的合并后镜像层),并进而基于当前进程所下载的多个内容分片进行合并,生成新的合并后镜像层。进一步的,在完成内容分片的合并后,同样可以删除合并所依据的多个内容分片。
至此,当前进程完成了合并操作,因此,当前进程可以释放合并权限,供其他合并进程取得合并权限,进行后续操作。
可以理解到,任何一个合并进程在取得合并权限(也就是抢到阻塞排他文件锁)后,都会先检查是否已经存在合并后镜像层。若已经存在合并后镜像层,则按照上述过程判断已有的合并后镜像层数据是否完整,进而确定是否重新进行合并。若尚未存在合并后镜像层,则取得合并权限的合并进程可以基于自己下载的多个内容分片,按照多个内容分片的顺序进行合并,生成新的合并后镜像层。类似的,可以在完成内容分片的合并后,删除自己下载的多个内容分片,并且,还可以进一步释放阻塞排他文件锁,供其他合并进程抢锁。
采用以上方式进行内容分片的合并,能够保证并发下载同一个镜像层时数据最终能取得一致,最终的合并得到的该镜像层的数据只有两种情况,合并成功或者合并失败,而不会出现合并成功后又被其他进程破坏的情况。
可选的,在(当前进程)检查合并后镜像层的数据是否完整时,可以计算合并后镜像层的哈希值,并与对应镜像层的层标识(可具体为摘要信息)进行比较:在合并后镜像层的哈希值与对应镜像层的层标识一致的情况下,当前进程确定合并后镜像层的数据完整;在合并后镜像层的哈希值与对应镜像层的层标识不一致的情况下,当前进程确定合并后镜像层的数据不完整。
可选的,在(当前进程)检查合并后镜像层的数据是否完整时,也可以利用图8所示的数据完整性校验和加密签证模块,先确定合并后镜像层的字节数目,进而将合并后镜像层的字节数目与对应镜像层的大小进行比对:在合并后镜像层的字节数目与对应镜像层的大小一致的情况下,当前进程确定合并后镜像层的数据完整;在合并后镜像层的字节数目与对应镜像层的大小不一致的情况下,当前进程确定合并后镜像层的数据不完整。
需要说明的是,对下载得到的合并后镜像层进行完整性校验时,采用对应镜像层的摘要信息(例如,可以采用sha256值的方式进行计算)可以非常准确的判断下载得到的合并后镜像层的数据是否完整,因此,可以将之称为一种强完整性校验方式。但是,这种方式会占用较多的CPU时间,在大量进程并发执行时会影响本地计算的性能,尤其对于较大的镜像文件进行完整性校验时,将耗费较多的时间。
而在下载网络的安全性能够得到保障的情况下,数据源的数据不会被篡改,TCP数据包不会被劫持。此时,如果下载得到的合并后镜像层的字节总数与对应镜像层的字节总数相同,TCP传输控制协议和操作系统在下载的字节总数满足完整性要求的前提下,能够保证下载的数据没有出现差错。因此,在能确保网络安全的内部孤岛环境中进行的镜像下载,可以采用这种弱完整性校验方式对合并后镜像层的数据完整性进行校验。相对应的,在现场环境中进行的镜像下载,更适合采用前述强完整性校验方式对合并后镜像层的完整性进行校验。
可选的,在保存多个内容分片时,可以直接将多个内容分片保存在本地磁盘中。除此之外,也可以将多个内容分片先保存在缓存中(参见图8中磁盘缓存模块Cache),等到多个内容分片下载完毕,按照多个内容分片的顺序进行合并,得到合并后镜像层之后,再将合并得到的合并后镜像层写入本地磁盘中。更具体的,可以采用无缓存的流式输入输出方式,将合并后镜像层写入本地磁盘中。
在具体实施时,可以在进行镜像下载时指定是否开启缓存(cache)功能。如果开启了该功能,则开始镜像下载时可以先检查缓存中是否包含有该镜像。如果缓存中已经包含有该镜像,则可以直接从缓存中通过无缓存的流式IO方式将镜像(层)拷贝到本地磁盘上指定的镜像部署路径中。如果缓存中并未包含有该镜像,则可先将镜像下载到指定的缓存盘中,具体的,可以采用本申请实施例中所提供的镜像下载方法。各镜像层下载完毕后,再从缓存中通过无缓存的流式IO方式将下载的镜像(层)拷贝到本地磁盘上指定的镜像部署路径中。采用缓存方式能够进一步缩短镜像的下载时间,提高镜像的部署效率,将镜像下载的约束从远程网络限制转到本地磁盘IO限制。
可以理解到,在缓存中对内容分片进行的合并操作,可以采用前述创建阻塞排他文件锁的方式进行。从缓存中读取数据并写入到指定的本地磁盘的过程中,也涉及数据的完整性问题,可以采用前述的完整性校验方式进行校验。此处不再赘述。
本申请实施例中,通过从镜像存储装置获取目标镜像的元数据信息,并进而在获取到镜像层的大小的基础上对镜像层进行内容切片,从而能够从镜像存储装置并行下载这些内容分片,以合并得到镜像层。因此,采用本申请实施例提供的容器镜像下载方法,能够缩短下载容器镜像所需要的网络传播时间,提高网络传播效率,从而提升了专有云迭代、输出和交付的效率。
还需要说明的是,在相关技术中,往往需要使用Registry(一种用于存储和分发容器Docker镜像的服务)库中内部的api,在计算机上搭建一个临时的Registry服务容器,通过Registry api才能够获知目标镜像的元数据信息,进而进行镜像的下载。并且,镜像将先被下载到Registry存储中,再从Registry存储中转发到磁盘中使用。因此,目标镜像将经过镜像存储装置→Registry专用服务→本地磁盘的数据链路才能够完成部署。由于需要额外启动Registry容器服务,因此出包和部署的流程较为繁琐,并且还需要通过Registry进行镜像转发,也会影响出包的效率。
而在本申请实施例中,容器镜像下载装置可以通过直接从镜像存储装置获取目标镜像的元数据信息,得到目标镜像中各镜像层的摘要信息(即层标识),因而无需另行部署专用的Registry(一种用于存储和分发容器Docker镜像的服务)即可获知目标镜像的信息。因此,本申请实施例中,不用依赖外部部署的Registry专用服务即可进行容器镜像的下载,且可以将镜像直接下载到本地(即镜像经过镜像存储装置→本地的数据链路),从而避免了输出和部署镜像包的繁琐流程,也避免了通过Registry专用服务进行镜像下载时进行内容转发(即镜像经过镜像存储装置→Registry专用服务→本地的数据链路)而影响镜像的部署的效率。因此,可以简化镜像的下载过程,提高镜像下载效率。
表1给出了采用本申请实施例所提供的镜像下载方法与采用相关技术的镜像下载方法的实施效果对比表。可以看出,采用本申请实施例所提供的镜像下载方法,能够显著的缩短镜像下载的时间,因而提高了镜像包的部署效率。
表1镜像下载性能对比表
镜像 | 镜像大小 | 本申请实施例 | 相关技术 |
/dpc/dpc | 886MB | 12s | 27s |
/emr/ecm-admin | 15501MB | 3m28s | 30m2s |
/base-gateway/base-biz-cdp-gateway | 4052MB | 1m15s | 5m27s |
/apsaradb/grandcanal-proxy-dbinit | 64MB | 4s | 4s |
/ecs_houyi/user_image3 | 18004MB | 4m47s | 13m9s |
/ecs_houyi/user_image2 | 26880MB | 6m10 | 16m9s |
参见图2和图9所示,本申请实施例还提供了一种容器镜像上传方法,其中,该方法包括:
S201:获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识,可以采用图9中磁盘Manifest分析模块进行。
可以理解到,执行步骤S201获取的目标镜像的元数据信息,与步骤S101中获取的目标镜像的元数据信息的内容和形式相似,主要区别在于:在下载方法中,目标镜像为待下载的镜像,容器镜像下载装置从镜像存储装置中获取该镜像的元数据信息;在上传方法中,目标镜像为待上传的镜像,容器镜像上传装置从本地磁盘中获取该镜像的元数据信息。
可选的,在获取目标镜像的元数据信息之后,可以先根据目标镜像的元数据信息,向镜像存储装置请求查询镜像存储装置中是否已存在该目标镜像。如果镜像存储装置中已存在该目标镜像,则无需再次上传目标镜像;如果镜像存储装置中未存在该目标镜像,则可继续执行镜像上传方法,完成目标镜像的上传,如,在镜像存储装置中不存在该目标镜像的情况下,继续执行步骤203,根据各镜像层的层标识,对各镜像层进行去重处理。
S203:根据各镜像层的层标识,对各镜像层进行去重处理,得到待上传的目标镜像层,可以采用图9中镜像检查和镜像Blobs去重模块进行。
能够理解到,在进行镜像层的上传之前,先对各镜像层进行去重处理,从各镜像层中确定出需要上传的目标镜像层,能够在不影响目标镜像的上传的前提下,减少实际上传的镜像层的数量,能够缩短镜像上传所需的时间,有利于提高镜像上传的效率。
具体的,在执行步骤S203时,可以先根据各镜像层的层标识,判断各镜像层中是否存在重复的镜像层。若各镜像层中存在重复的镜像层,则将重复的镜像层中任一个镜像层确定为目标镜像层,并从各镜像层中删除与该目标镜像层重复的其他镜像层。采用这种方式,对目标镜像中各镜像层进行去重处理,可以不再重复上传重复的镜像层,有利于缩短镜像上传时间,提高上传效率。
可选的,由于已经完成上传的镜像层将存在于镜像存储装置中(参见图9中所示私有registry),因此,在获取到目标镜像的元数据信息后,也可以判断镜像存储装置中是否已存在与层标识相对应的镜像层。如果存在与层标识相对应的镜像层,表示该镜像层在镜像存储装置中已经存在,则无需再次上传该镜像层。而如果镜像存储装置中未存在与层标识相对应的镜像层,则可以执行后续步骤对该镜像层进行下载。采用这种方式,能够实现Blob粒度的增量上传,同样有利于进一步缩短镜像上传时间,提高上传效率。
S205:向镜像存储装置上传目标镜像层,可以采用图9中Registry三阶段提交模块进行。
可以理解到,从本地磁盘中获取目标镜像的元数据信息Manifest后,经过元数据信息Manifest分析模块、镜像检查和镜像层Blob去重模块,得到需要上传到镜像存储装置的目标镜像层。在此基础上,可以进一步执行步骤S205,通过Registry三阶段提交方式,将目标镜像层上传到镜像存储装置(私有Registry)中。
具体的,在开始上传目标镜像前,可以先检查镜像存储装置(私有Registry)中是否已经存在该目标镜像,如果已经存在,则忽略本次对目标镜像的上传操作。若不存在,则对指定的目标镜像在磁盘存储结构中分析出Blob层及其摘要信息,同时建立和私有Registry连接的客户端。由于目标镜像中可能存在相同的层,为避免额外的传输开销,可以先对目标镜像中的镜像层(Blob层)进行去重处理(即步骤203),进而可以将去重后的目标镜像层并行提交到Registry中进行并行上传。需要说明的是,每层Blob在提交前也可以进一步根据目标镜像层的层标识检查在镜像存储装置(Registry)中是否已存在该目标镜像层,如果已经存在该层,则可不提交该层blob,从而实现Blob粒度的增量上传。
在执行步骤205进行“三阶段提交”时,本地服务端可以向镜像存储装置发送镜像层上传请求,具体的,通过发送POST/v2/<name>/blobs/uploads/的方式启动一次blob上传服务。进而,本地服务端接收镜像存储装置(Registry)响应于镜像层上传请求返回的请求标识,具体的,镜像存储装置可以在返回的location字段中携带有访问地址url,可体现为:/v2/\<image>/blobs/uploads/\<uuid>,该访问地址中包含请求标识uuid,请求标识uuid可以用来查看目标镜像层的上传状态,并实现断点续传。在后续向镜像存储装置发送的请求中,都将携带有请求标识uuid的信息。
进一步的,本地服务端可根据请求标识uuid和目标镜像层的层标识,将目标镜像层上传至镜像存储装置。具体的,可以使用以下命令启动Blob整块上传:
PUT/v2/<name>/blobs/uploads/<uuid>?digest=<digest>
在向镜像存储装置上传目标镜像层完成之后,向镜像存储装置提交上传完成请求,可以体现为:
PUT/v2/<name>/blob/uploads/<uuid>?digest=<digest>
S207:在完成目标镜像层的上传之后,向镜像存储装置上传目标镜像的元数据信息,可以采用图9中Registry三阶段提交模块进行。
可以理解到,“三阶段提交”是Registry服务提供的协议,能够保证数据传输的完整性。所有的Blob层上传完成后,可以在镜像存储装置对上传的镜像进行重新标签retag,并使用retag后的元数据对Manifest中信息进行修改,还可以进一步将修改后的内容重新进行加密签证,将签证后的Manifest推送到镜像存储装置(Registry)中,至此完成一次镜像上传。
本申请实施例中,在需要上传镜像时,通过从本地磁盘中获取目标镜像的元数据信息,并进而基于对元数据信息的分析,抽取出目标镜像中各镜像层的层标识(可具体为各镜像层的摘要信息),从而能够根据各镜像层的层标识,对各镜像层进行去重处理,避免了对相同镜像层的重复上传,缩短了镜像上传时间,提高了镜像上传效率。
除此之外,本申请实施例中,容器镜像上传装置能够直接获取并解析目标镜像的元数据信息,无需另行部署专用的Registry(一种用于存储和分发容器Docker镜像的服务)即可获知目标镜像的信息,因而不用依赖外部部署的Registry专用服务即可进行容器镜像的上传,避免了输出和部署镜像包流程的繁琐,也避免了通过Registry专用服务进行内容转发而影响镜像的部署的效率。因此,可以简化镜像的上传过程,提高镜像上传效率。
表2给出了采用本申请实施例所提供的镜像上传方法与采用相关技术的镜像上传方法的实施效果对比表。可以看出,采用本申请实施例所提供的镜像上传方法,能够显著的缩短镜像上传的时间,因而提高了镜像包的部署效率。
表2镜像上传性能对比表
参见图3所示,本申请实施例还提供了一种容器镜像管理系统,该系统包括:
容器镜像下载装置,用于从镜像存储装置获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;还用于基于镜像层的层标识,从镜像存储装置获取镜像层的大小;还用于根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片;还用于从镜像存储装置并行下载并保存多个内容分片;还用于合并所下载的多个内容分片,得到镜像层;
容器镜像上传装置,用于获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;还用于根据各镜像层的层标识,对各镜像层进行去重处理,得到待上传的目标镜像层;还用于向镜像存储装置上传目标镜像层;还用于在完成目标镜像层的上传之后,向镜像存储装置上传目标镜像的元数据信息;
镜像存储装置,用于存储容器镜像。
可以理解到,上述容器镜像管理系统中,容器镜像下载装置能够实现前述实施例中提供的容器镜像下载方法,容器镜像上传装置能够实现前述实施例中提供的容器镜像上传方法,前述实施例中的相关内容均适用于本实施例,此处不再赘述。
参见图4所示,本申请实施例还提供一种容器镜像下载装置,其中,装置包括:
元数据信息获取模块101,用于从镜像存储装置获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
镜像层大小获取模块103,用于基于镜像层的层标识,从镜像存储装置获取镜像层的大小;
内容切片模块105,用于根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片;
内容分片下载模块107,用于从镜像存储装置并行下载并保存多个内容分片;
内容分片合并模块109,用于合并所下载的多个内容分片,得到镜像层。
能够理解,上述容器镜像下载装置,能够实现前述实施例中提供的容器镜像下载方法的各个步骤,关于容器镜像下载方法的相关阐释均适用于容器镜像下载装置,此处不再赘述。
参见图5所示,本申请实施例还提供一种容器镜像上传装置,其中,装置包括:
元数据信息获取模块201,用于获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
去重处理模块203,用于根据各镜像层的层标识,对各镜像层进行去重处理,得到待上传的目标镜像层;
镜像层上传模块205,用于向镜像存储装置上传目标镜像层;
元数据信息上传模块207,用于在完成目标镜像层的上传之后,向镜像存储装置上传目标镜像的元数据信息。
能够理解,上述容器镜像上传装置,能够实现前述实施例中提供的容器镜像上传方法的各个步骤,关于容器镜像上传方法的相关阐释均适用于容器镜像上传装置,此处不再赘述。
图6是本申请的一个实施例电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成容器镜像下载装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
从镜像存储装置获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
基于镜像层的层标识,从镜像存储装置获取镜像层的大小;
根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片;
从镜像存储装置并行下载并保存多个内容分片;
合并所下载的多个内容分片,得到镜像层。
上述如本申请图1所示实施例揭示的容器镜像下载装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图1中容器镜像下载装置执行的方法,并实现容器镜像下载装置在图1所示实施例的功能,本申请实施例在此不再赘述。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图1所示实施例中容器镜像下载装置执行的方法,并具体用于执行:
从镜像存储装置获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
基于镜像层的层标识,从镜像存储装置获取镜像层的大小;
根据镜像层的大小,对镜像层进行内容切片,得到多个内容分片;
从镜像存储装置并行下载并保存多个内容分片;
合并所下载的多个内容分片,得到镜像层。
图7是本申请的一个实施例电子设备的结构示意图。请参考图7,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成容器镜像上传装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
根据各镜像层的层标识,对各镜像层进行去重处理,得到待上传的目标镜像层;
向镜像存储装置上传目标镜像层;
在完成目标镜像层的上传之后,向镜像存储装置上传目标镜像的元数据信息。
上述如本申请图2所示实施例揭示的容器镜像上传装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图2中容器镜像上传装置执行的方法,并实现容器镜像上传装置在图2所示实施例的功能,本申请实施例在此不再赘述。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图2所示实施例中容器镜像上传装置执行的方法,并具体用于执行:
获取目标镜像的元数据信息,元数据信息包括目标镜像中各镜像层的层标识;
根据各镜像层的层标识,对各镜像层进行去重处理,得到待上传的目标镜像层;
向镜像存储装置上传目标镜像层;
在完成目标镜像层的上传之后,向镜像存储装置上传目标镜像的元数据信息。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (23)
1.一种容器镜像下载方法,所述方法包括:
从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;
根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;
从所述镜像存储装置并行下载并保存所述多个内容分片;
合并所下载的多个内容分片,得到所述镜像层;
其中,合并所下载的多个内容分片,包括:
在已存在合并后镜像层的情况下,检查所述合并后镜像层的数据是否完整;
若所述合并后镜像层的数据完整,则删除下载的所述多个内容分片;
若所述合并后镜像层的数据不完整,则删除所述合并后镜像层,并合并所下载的多个内容分片。
2.根据权利要求1所述方法,其中,根据所述镜像层的大小,对所述镜像层进行内容切片,包括:
根据所述镜像层的大小,确定与所述镜像层相匹配的内容分片大小;
根据所述内容分片大小,将所述镜像层划分为多个顺序排列的内容分片,所述内容分片的数量根据所述镜像层的大小和所述内容分片大小确定。
3.根据权利要求2所述方法,其中,保存所述多个内容分片,包括:
为每个内容分片生成分片标识,所述分片标识中包括所述内容分片的分片序号,所述分片序号用于指示对应内容分片的顺序;
相对应的保存所述内容分片及分片标识。
4.根据权利要求3所述方法,其中,所述分片标识中还包括所述镜像层的下载标识,所述下载标识用于指示对应内容分片的下载批次信息。
5.根据权利要求1所述方法,其中,检查所述合并后镜像层的数据是否完整,包括:
确定所述合并后镜像层的字节数目;
在所述合并后镜像层的字节数目与所述镜像层的大小一致的情况下,确定所述合并后镜像层的数据完整;
在所述合并后镜像层的字节数目与所述镜像层的大小不一致的情况下,确定所述合并后镜像层的数据不完整。
6.根据权利要求1所述方法,其中,在合并所下载的多个内容分片之前,所述方法还包括:
判断所述镜像层是否处于合并中状态;
合并所下载的多个内容分片,具体为:
在所述镜像层未处于合并中状态的情况下,合并所下载的多个内容分片。
7.根据权利要求1所述方法,其中,在从镜像存储装置获取目标镜像的元数据信息之后,所述方法还包括:
判断是否已存在与所述层标识相对应的镜像层;
则基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小,具体为:
在未存在与所述层标识相对应的镜像层的情况下,基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小。
8.根据权利要求1所述方法,其中,保存所述多个内容分片,包括:
将所述多个内容分片保存在缓存中;
则在合并所下载的多个内容分片,得到所述镜像层之后,所述方法还包括:
将所述镜像层写入磁盘中。
9.根据权利要求8所述方法,其中,将所述镜像层写入磁盘中,具体为:
采用无缓存的流式输入输出方式,将所述镜像层写入磁盘中。
10.根据权利要求1所述方法,其中,在从镜像存储装置获取目标镜像的元数据信息之后,所述方法还包括:
根据所述目标镜像中各镜像层的层标识,判断所述各镜像层中是否存在重复的镜像层;
若所述各镜像层中存在重复的镜像层,则将所述重复的镜像层中任一个镜像层确定为目标镜像层,并从所述各镜像层中删除与所述目标镜像层重复的其他镜像层;
则基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小,具体包括:
基于所述目标镜像层的层标识,从所述镜像存储装置获取所述目标镜像层的大小。
11.一种容器镜像上传方法,所述方法包括:
获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;
向镜像存储装置上传所述目标镜像层;
在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息,所述元数据信息用于从所述镜像存储装置获取所述目标镜像层的大小,在根据所述目标镜像层的大小对所述目标镜像层进行内容切片后,从所述镜像存储装置并行下载内容切片所得的多个内容分片,以及在已存在合并后镜像层且所述合并后镜像层的数据完整的情况下,删除下载的所述多个内容分片,在已存在合并后镜像层且所述合并后镜像层的数据不完整的情况下,删除所述合并后镜像层及合并所述下载的多个内容分片,以得到所述目标镜像层。
12.根据权利要求11所述方法,其中,向镜像存储装置上传所述目标镜像层,包括:
向所述镜像存储装置发送镜像层上传请求;
接收所述镜像存储装置响应于所述镜像层上传请求返回的请求标识;
根据所述请求标识和所述目标镜像层的层标识,将所述目标镜像层上传至所述镜像存储装置;
在上传所述目标镜像层之后,向所述镜像存储装置发送镜像层上传完成请求。
13.根据权利要求11所述方法,其中,向镜像存储装置上传所述目标镜像层,具体为:
向镜像存储装置并行上传多个所述目标镜像层。
14.根据权利要求11所述方法,其中,根据所述各镜像层的层标识,对所述各镜像层进行去重处理,包括:
根据所述各镜像层的层标识,判断所述各镜像层中是否存在重复的镜像层;
若所述各镜像层中存在重复的镜像层,则将所述重复的镜像层中任一个镜像层确定为所述目标镜像层,并从所述各镜像层中删除与该目标镜像层重复的其他镜像层。
15.根据权利要求11所述方法,其中,在向镜像存储装置上传所述目标镜像层之前,所述方法还包括:
根据所述目标镜像层的层标识,向所述镜像存储装置请求查询所述镜像存储装置中是否已存在该目标镜像层;
向镜像存储装置上传所述目标镜像层,具体为:
在所述镜像存储装置中不存在该目标镜像层的情况下,向所述镜像存储装置上传所述目标镜像层。
16.根据权利要求11所述方法,其中,在获取目标镜像的元数据信息之后,所述方法还包括:
根据所述目标镜像的元数据信息,向所述镜像存储装置请求查询所述镜像存储装置中是否已存在该目标镜像;
则根据所述各镜像层的层标识,对所述各镜像层进行去重处理,具体为:
在所述镜像存储装置中不存在该目标镜像的情况下,根据所述各镜像层的层标识,对所述各镜像层进行去重处理。
17.一种容器镜像管理系统,所述系统包括:
容器镜像下载装置,用于从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;还用于基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;还用于根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;还用于从所述镜像存储装置并行下载并保存所述多个内容分片;还用于合并所下载的多个内容分片,得到所述镜像层;其中,合并所下载的多个内容分片,包括:在已存在合并后镜像层的情况下,检查所述合并后镜像层的数据是否完整;若所述合并后镜像层的数据完整,则删除下载的所述多个内容分片;若所述合并后镜像层的数据不完整,则删除所述合并后镜像层,并合并所下载的多个内容分片;
容器镜像上传装置,用于获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;还用于根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;还用于向镜像存储装置上传所述目标镜像层;还用于在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息;
镜像存储装置,用于存储容器镜像。
18.一种容器镜像下载装置,所述装置包括:
元数据信息获取模块,用于从镜像存储装置获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
镜像层大小获取模块,用于基于所述镜像层的层标识,从所述镜像存储装置获取所述镜像层的大小;
内容切片模块,用于根据所述镜像层的大小,对所述镜像层进行内容切片,得到多个内容分片;
内容分片下载模块,用于从所述镜像存储装置并行下载并保存所述多个内容分片;
内容分片合并模块,用于合并所下载的多个内容分片,得到所述镜像层;其中,合并所下载的多个内容分片,包括:在已存在合并后镜像层的情况下,检查所述合并后镜像层的数据是否完整;若所述合并后镜像层的数据完整,则删除下载的所述多个内容分片;若所述合并后镜像层的数据不完整,则删除所述合并后镜像层,并合并所下载的多个内容分片。
19.一种容器镜像上传装置,所述装置包括:
元数据信息获取模块,用于获取目标镜像的元数据信息,所述元数据信息包括所述目标镜像中各镜像层的层标识;
去重处理模块,用于根据所述各镜像层的层标识,对所述各镜像层进行去重处理,得到待上传的目标镜像层;
镜像层上传模块,用于向镜像存储装置上传所述目标镜像层;
元数据信息上传模块,用于在完成所述目标镜像层的上传之后,向所述镜像存储装置上传所述目标镜像的元数据信息,所述元数据信息用于从所述镜像存储装置获取所述目标镜像层的大小,在根据所述目标镜像层的大小对所述目标镜像层进行内容切片后,从所述镜像存储装置并行下载内容切片所得的多个内容分片,以及在已存在合并后镜像层且所述合并后镜像层的数据完整的情况下,删除下载的所述多个内容分片,在已存在合并后镜像层且所述合并后镜像层的数据不完整的情况下,删除所述合并后镜像层及合并所述下载的多个内容分片,以得到所述目标镜像层。
20.一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1~10中任一项所述的方法。
21.一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行如权利要求1~10中任一项所述的方法。
22.一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求11~16中任一项所述的方法。
23.一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行如权利要求11~16中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811083535.4A CN110912955B (zh) | 2018-09-17 | 2018-09-17 | 容器镜像下载、上传方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811083535.4A CN110912955B (zh) | 2018-09-17 | 2018-09-17 | 容器镜像下载、上传方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110912955A CN110912955A (zh) | 2020-03-24 |
CN110912955B true CN110912955B (zh) | 2022-04-05 |
Family
ID=69813413
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811083535.4A Active CN110912955B (zh) | 2018-09-17 | 2018-09-17 | 容器镜像下载、上传方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110912955B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112671871B (zh) * | 2020-12-17 | 2023-09-15 | 华人运通(上海)云计算科技有限公司 | 一种镜像分发方法、装置、终端设备及存储介质 |
CN112671892B (zh) * | 2020-12-22 | 2022-11-18 | 北京百度网讯科技有限公司 | 数据传输方法、装置、电子设备及介质 |
CN112714163B (zh) * | 2020-12-22 | 2022-06-10 | 北京百度网讯科技有限公司 | 数据传输方法、装置、电子设备和介质 |
CN112527467B (zh) * | 2020-12-23 | 2024-06-11 | 同盾控股有限公司 | 容器镜像的存储结构、查询方法、删除方法、装置、设备和介质 |
CN112540776A (zh) * | 2020-12-25 | 2021-03-23 | 麒麟软件有限公司 | 一种基于iso9660镜像分片去重技术的操作系统镜像管理方法 |
CN114765606B (zh) * | 2020-12-30 | 2023-07-25 | 中国联合网络通信集团有限公司 | 容器镜像传输方法、装置、设备及存储介质 |
CN112799688B (zh) * | 2021-01-18 | 2024-06-18 | 中国银联股份有限公司 | 容器应用内软件包安装方法、装置、计算机设备及介质 |
CN113032736A (zh) * | 2021-03-05 | 2021-06-25 | 海能达通信股份有限公司 | Docker分层镜像的加解密方法及相关装置 |
CN113553091A (zh) * | 2021-07-28 | 2021-10-26 | 恒安嘉新(北京)科技股份公司 | 增量镜像数据包的自动生成方法、装置、设备及存储介质 |
CN113900720B (zh) * | 2021-10-15 | 2023-08-08 | 抖音视界有限公司 | 操作系统启动方法、装置和电子设备 |
CN114490544B (zh) * | 2022-04-18 | 2022-06-28 | 梯度云科技(北京)有限公司 | 一种新加入主机下载容器镜像的方法及装置 |
US11983525B2 (en) | 2022-06-28 | 2024-05-14 | Red Hat, Inc. | Automated container size reduction |
CN115314486A (zh) * | 2022-07-20 | 2022-11-08 | 交控科技股份有限公司 | 列车控制系统的软件升级方法及装置 |
CN115567547A (zh) * | 2022-08-18 | 2023-01-03 | 网易(杭州)网络有限公司 | 一种镜像分发方法、系统和设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106506587A (zh) * | 2016-09-23 | 2017-03-15 | 中国人民解放军国防科学技术大学 | 一种基于分布式存储的Docker镜像下载方法 |
CN106657213A (zh) * | 2016-09-14 | 2017-05-10 | 深圳峰创智诚科技有限公司 | 文件传输方法和装置 |
WO2017106726A1 (en) * | 2015-12-18 | 2017-06-22 | Amazon Technologies, Inc. | Software container registry service |
CN106982249A (zh) * | 2017-03-03 | 2017-07-25 | 广州优视网络科技有限公司 | 多线程分段下载方法、设备、客户端设备及电子设备 |
CN107426258A (zh) * | 2016-05-23 | 2017-12-01 | 华为技术有限公司 | 一种镜像文件的上传和下载方法及装置 |
CN107809467A (zh) * | 2017-10-10 | 2018-03-16 | 暨南大学 | 一种云环境下容器镜像数据的删减方法 |
CN108509253A (zh) * | 2018-04-03 | 2018-09-07 | 南京中兴软创软件技术有限公司 | 一种快速发布大量容器镜像的方法 |
-
2018
- 2018-09-17 CN CN201811083535.4A patent/CN110912955B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017106726A1 (en) * | 2015-12-18 | 2017-06-22 | Amazon Technologies, Inc. | Software container registry service |
CN107426258A (zh) * | 2016-05-23 | 2017-12-01 | 华为技术有限公司 | 一种镜像文件的上传和下载方法及装置 |
CN106657213A (zh) * | 2016-09-14 | 2017-05-10 | 深圳峰创智诚科技有限公司 | 文件传输方法和装置 |
CN106506587A (zh) * | 2016-09-23 | 2017-03-15 | 中国人民解放军国防科学技术大学 | 一种基于分布式存储的Docker镜像下载方法 |
CN106982249A (zh) * | 2017-03-03 | 2017-07-25 | 广州优视网络科技有限公司 | 多线程分段下载方法、设备、客户端设备及电子设备 |
CN107809467A (zh) * | 2017-10-10 | 2018-03-16 | 暨南大学 | 一种云环境下容器镜像数据的删减方法 |
CN108509253A (zh) * | 2018-04-03 | 2018-09-07 | 南京中兴软创软件技术有限公司 | 一种快速发布大量容器镜像的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110912955A (zh) | 2020-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110912955B (zh) | 容器镜像下载、上传方法及装置 | |
WO2021008113A1 (zh) | 基于区块链的数据存证方法、数据校验方法及相关装置 | |
US8959300B2 (en) | Cascade ordering | |
US11563560B2 (en) | Blockchain-based data evidence storage method and apparatus | |
US10353867B1 (en) | Method and system for verifying files for garbage collection | |
US10862672B2 (en) | Witness blocks in blockchain applications | |
US9298593B2 (en) | Testing a software interface for a streaming hardware device | |
US10642796B2 (en) | File metadata verification in a distributed file system | |
US9043914B2 (en) | File scanning | |
US9917697B2 (en) | Performing incremental upgrade on APK base file corresponding to APK eigenvalue value | |
WO2019001021A1 (zh) | 数据处理方法、装置、系统、服务器及计算机存储介质 | |
CN112817912B (zh) | 文件管理方法、装置、计算机设备和存储介质 | |
US9588884B2 (en) | Systems and methods for in-place reorganization of device storage | |
US10489374B2 (en) | In-place updates with concurrent reads in a decomposed state | |
CN108491160B (zh) | 一种数据写入方法及装置 | |
US10209892B2 (en) | Storage of format-aware filter format tracking states | |
US10152269B2 (en) | Method and system for preserving branch cache file data segment identifiers upon volume replication | |
US9864661B2 (en) | Cache-accelerated replication of snapshots between storage devices | |
CN111400243A (zh) | 基于流水线服务的研发管理系统以及文件存储方法、装置 | |
CN106911678B (zh) | 一种病毒检测方法及装置 | |
US11962640B2 (en) | Write-in-place multipart uploads | |
US20230010437A1 (en) | User defined validation on content stored in a storage system | |
US10514961B1 (en) | Enhanced cookie management for file workflows | |
WO2023244386A1 (en) | Secure device tracking via device ownership service | |
Herrero Pérez de Albeniz | File integrity monitoring on Linux systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230609 Address after: Room 1-2-A06, Yungu Park, No. 1008 Dengcai Street, Sandun Town, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Aliyun Computing Co.,Ltd. Address before: Box 847, four, Grand Cayman capital, Cayman Islands, UK Patentee before: ALIBABA GROUP HOLDING Ltd. |
|
TR01 | Transfer of patent right |