CN116166379A - 一种基于云平台的镜像裁剪及多架构镜像构建方法 - Google Patents
一种基于云平台的镜像裁剪及多架构镜像构建方法 Download PDFInfo
- Publication number
- CN116166379A CN116166379A CN202310126076.8A CN202310126076A CN116166379A CN 116166379 A CN116166379 A CN 116166379A CN 202310126076 A CN202310126076 A CN 202310126076A CN 116166379 A CN116166379 A CN 116166379A
- Authority
- CN
- China
- Prior art keywords
- mirror image
- layer
- mirror
- architecture
- image
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及计算机云计算技术领域,更具体地说是一种基于云平台的镜像裁剪及多架构镜像构建方法,通过引入基于层的镜像管理技术,将镜像管理粒度从以镜像为单位调整为以镜像层为单位,镜像层保存特定的内容并采用唯一的指纹标识,镜像可以按需、以层为单位分离拼接,为镜像剪裁、异构镜像快速生成、镜像预热提供技术支持,基于层的镜像管理技术将镜像层信息和镜像层之间的关系存储在镜像元数据仓库中,对现有的镜像规范零侵入,兼容已有镜像,解决云原生环境下镜像存储空间占用大、镜像分发效率低下、镜像启动速度慢、适配新架构时需要重新制作镜像、多架构镜像维护成本高等问题。
Description
技术领域
本发明涉及计算机云计算技术领域,更具体地说是一种基于云平台的镜像裁剪及多架构镜像构建方法,主要用于轻量级云平台和云原生应用。
背景技术
云原生技术作为一种新型技术体系,自2013年首次被提出以来,经过快速发展,已经成为未来云计算发展方向,CNCF基金会的成立标志着云原生技术正式走向大众,随着近几年云原生生态的不断壮大,所有主流云厂商均加入了CNCF基金会,云原生生态百花齐放。
云原生技术是以容器为基础,结合微服务、DevOps等技术构建的一套云技术产品体系,容器技术作为云原生技术基础,在云原生体系中扮演着至关重要的角色。
镜像作为容器的载体,包含容器运行环境,docker镜像规范是事实上的容器镜像标准,镜像由镜像层组成,一个完整的镜像通常包含多个镜像层,docker提供了docker bui l d命令用于镜像制作,用户按照docker镜像语法规范编辑dockerfi l e文件,将制作镜像的指令写到dockerfi l e中,以dockerfi l e文件作为输入,运行docker bu i l d命令完成镜像制作,dockerfi l e中的特定指令会生成一个镜像层,如ADD、RUN指令,这些指令用于完成诸如将应用安装包和依赖拷贝到镜像中、运行脚本完成应用部署、修改应用配置等操作。用户通常不需要从零开始构建镜像,更多的是基于已有的镜像制作新镜像,镜像派生使得镜像之间具有父子关系,子镜像会继承父镜像所有镜像层,并在父镜像镜像层基础上增加新镜像层实现自己的功能。
镜像是docker管理的基本单位,制作好的镜像需要导出、分发到生产环境中部署启动,导出的镜像包含所有的镜像层,为提高镜像分发效率,docker提供了docker registry用于支持镜像分发服务,docker regi stry即镜像仓库,镜像被导入docker registry后,docker客户端即可通过网络访问docker regi stry以检索、下载镜像,镜像运行前,首先要被下载到本地镜像仓库中,如果本地镜像仓库不存在待运行镜像,则docker服务会访问docker regi stry,检索、下载目标镜像。
镜像自包含的特点(镜像包含应用及应用运行所需的环境,除了应用本身,应用运行所需的依赖库、配置、工具等全部包含在镜像中)以及镜像之间的派生关系显著增加了镜像大小,如基于CUDA的AI模型镜像通常在5G以上,部分镜像大小可以达到10G以上,大数据相关镜像如HDFS、YARN等通常在2G左右,包含JAVA运行环境的基础镜像在700M左右。
容器技术属于轻量级虚拟化技术,在容器云平台启动实例之前,需要将镜像从本地上传到镜像仓库,再分发到运行节点,一旦镜像准备就绪,容器可以在毫秒级别启动,经测试,上传、下载镜像的时间平均占到了容器部署时间的90%以上,过大的镜像占用大量的网络带宽,尤其在环境受限的内网和安全网络中,一台物理机上通常运行10个甚至更多的容器,随着运行容器的增加和单个镜像大小的增加,存储镜像所需的空间激增。
上述问题的根本原因是现有镜像技术侧重以镜像为粒度的管理方案导致的,主要问题如下:
1、镜像存储空间占用大,镜像分发效率低下:
镜像过大,一方面是由于镜像自包含特性决定的,镜像中需要打包应用以及应用运行所需的所有环境,包括OS基础库和各种业务库、依赖组件,这些环境本身就占用可观的存储。
镜像过大的另外一个原因是镜像层导致的,镜像层之间属于堆砌的关系,上层在下层的基础上扩展,删除或者修改文件是通过追加新层,在新层中写入删除标记或者新增文件实现的,删除标记、新文件遮挡了底层文件的所有版本,原始的文件和所有文件副本依旧保留在下层中,即便在同一镜像层中,垃圾文件的存在也会导致镜像层大小的增加,如拷贝到镜像层中的应用安装包以及部署应用时产生的临时文件,在应用部署完成后即成为垃圾数据,这些数据显著增加了镜像大小。
镜像过大严重降低了镜像导入导出和分发效率,占用了宝贵的存储和网络资源,延长了应用部署启动时间。
2、对异构平台、国产硬件支持不友好:
异构平台由于CPU架构的不同,其指令集和二进制文件也不兼容,每支持一种新架构时,需要重新制作对应架构的镜像,即便应用本身并未变化,新镜像制作、存储、测试维护需要消耗额外的成本,从应用角度看,这些消耗是应该避免、没有意义的,多架构的镜像进一步加剧了镜像大小的膨胀,当分发镜像时,需要支持所有可能的架构,因此相关架构的镜像都要被分发到现场,存储在镜像仓库中并保持更新维护,国产化硬件的推广和应用使得这一情况变得更加严峻。
3、镜像拉取、启动速度慢,系统响应效率低下:
大规模分布式系统,尤其是线上系统具有很高的实时性要求,平台承载的部分应用具有非常强的动态性和实时性,需要根据应用负载动态启停容器,以便快速响应用户需求,如一些动态分析任务,用户下发请求后必须快速启动,完成计算、统计完结果后立即销毁,以释放资源,这类高性能平台对容器启动效率要求很高,在现有技术体系下,镜像拉取在节点接收到容器启动请求后才开始,极大降低了系统响应速度,无法支持高性能系统的运行。
上述问题可以从以下几个方面解决:
1、优化镜像制作流程,通过合理的镜像制作流程减少镜像层,较少的层有助于减少镜像大小;
2、采用以层为粒度的管理策略,分层优化,将镜像层分为公共镜像层、文件拷贝层和业务镜像层,每层存储特定内容,公共镜像层保存基础运行环境,业务镜像层存储应用,通过功能标签标识镜像层能力,并将镜像层信息记录到镜像元数据仓库中,如JAVA能力层、PYTHON能力层等,每种能力可以再根据特性、版本细分,如JAVA1.8、JAVA15等等,向镜像仓库上传镜像时,分析镜像元数据,剥离镜像层信息,并同步更新镜像元数据仓库;开发基于层的拼接技术,可按照需求将若干镜像层拼接成符合要求的成品镜像,基于层的管理策略是镜像缩减、预热的基础;
3、镜像层剪裁,将镜像制作时产生的中间文件,如部署完成的安装包、临时文件删除,减少镜像层大小;
4、公共镜像层裁剪,将镜像内部的公共镜像层裁剪掉,避免相同的基础环境重复分发;
5、业务镜像层聚合,镜像层裁剪、公共镜像层裁剪后,将剩余的镜像层合并形成业务镜像层(这些镜像层保存应用及应用直接依赖,因此可以合并),此方案对异构平台镜像快速生成具有重要意义,基于JAVA、PYTHON、SHELL等解释性语言开发的应用,采用此方案后,可以基于业务镜像层以及目标架构的公共镜像层,快速构建出目标架构的镜像。
目前,业界对上述问题的解决方案有限,现有的方案基本围绕镜像拉取加速展开,如通过P2P技术加速镜像分发,由于影响镜像分发效率和启动速度的原因有多个,镜像拉取只是其中一个,因此单纯通过P2P技术加速镜像拉取,对容器启动速度的影响有限,而且无法解决内网和安全网络环境中镜像和应用的首次分发(将镜像从开发环境分发到内网,过大的镜像影响分发效率)。
P2P技术将文件分为块,所有拉取镜像的主机都可以作为下载服务器,当某台节点拉取到块后,即可对外提供块下载服务,以最大限度利用网络带宽,避免网络堵塞,从整体资源利用角度来说,P2P技术能够充分利用网络资源,使得更多的节点参与到数据分发中,以提升分发效率,但P2P技术仍有以下局限性:
P2P虽能有效利用网络带宽资源,使得整体带宽利用比较均衡,但依然受总带宽限制,如种子节点从仓库下载数据块时的,如果网络带宽不够,将降低数据分发效率;
每台节点下载的数据量不变,节点下载数据量不会因为采用P2P技术而减少,如节点NodeA首次下载某镜像,镜像大小为2G,则NodeA最终下载镜像产生的网络流量至少为2G,只不过采用P2P后,部分数据来自于其他节点,优化了中心瓶颈问题;
对镜像启动速度提升有限,前面说过,镜像拉取只是影响镜像启动速度众多环节中的一个,镜像拉取速度的优化对系统响应速度的提升有限。
因此,本发明提出一种基于层的镜像剪裁、多架构镜像快速制作和镜像预热方法,解决现有技术方案存在的问题,加速容器技术的推广应用。
发明内容
为了解决上述技术问题,本发明提供一种基于云平台的镜像裁剪及多架构镜像构建方法,通过引入基于层的镜像管理技术,将镜像管理粒度从以镜像为单位调整为以镜像层为单位,镜像层保存特定的内容并采用唯一的指纹标识,以解决云原生环境下镜像存储空间占用大、镜像分发效率低下、镜像启动速度慢、适配新架构时需要重新制作镜像、多架构镜像维护成本高等问题。
本发明具体的技术方案如下:
一种基于云平台的镜像裁剪及多架构镜像构建方法,镜像裁剪及多架构镜像构建方法包括以下步骤:
S1:引入基于层的管理技术,将镜像层分为保存基础运行环境的公共镜像层、保存临时文件的文件拷贝层和保存应用的业务镜像层;其中公共镜像层可进一步细分,如保存JAVA运行环境的JDK层,保存动态库的L IB层等,每个镜像层具有唯一的标识并添加描述层能力的功能标签,这些信息记录在镜像元数据仓库中,方便对镜像层进行检索管理,与此同时,镜像的制作、升级手段更加灵活多样,在父镜像基础上增加新镜像层的方式,扩展镜像功能不再是镜像制作、升级的唯一手段,用户可以基于已有的镜像层快速生成目标镜像,只需要通过配置文件列举目标镜像需要的功能,云平台根据功能标签检索镜像元数据仓库,将匹配的镜像层拼接为目标镜像;镜像的升级也更加高效,当镜像层更新时,从原始镜像中删除变化的镜像层并使用新镜像层替代,同时修改镜像的元数据从而实现镜像原地升级;
S2:镜像层裁剪,镜像层生成时,通过标识并识别镜像层中的临时数据,在生成镜像时将其删除,从而减少单层镜像大小;
S3:公共镜像层裁剪,通过标识并识别镜像中的公共镜像层,将公共镜像层删除从而缩减镜像大小;
S4:异构镜像快速生成,扫描并标识业务镜像层,适配新架构时,根据业务镜像层属性快速基于一种架构生成另外一种架构镜像,多架构镜像只需维护一个业务镜像层,降低维护成本;
S5:镜像预热,通过镜像周期预热、触发预热、预测预热等预热机制,将镜像拉取时间前移,缩减镜像启动时间,以获得良好的响应速度,从而提升分布式系统的响应速度,实现容器的快速启动。
作为本方案的进一步改进,S1中,基于层的镜像管理技术将镜像层按功能分为基础环境层、依赖层、文件拷贝层和业务层:
基础镜像层:保存OS、架构相关的基础运行环境;
依赖层:保存应用运行时的直接依赖,包括运行时环境、动态库等,如JAVA环境、PYTHON环境,安全类应用依赖的加解密库等;
公共镜像层:基础镜像层和依赖层统称为公共镜像层,公共镜像层属于公共资源,可被多个镜像共享;
文件拷贝层:该层保存的内容具有临时性,在镜像制作过程中起辅助作用,镜像制作完成后,该层的数据不再需要;如应用安装包;本方案要求将制作镜像时使用的一次性数据和临时数据保存在/tmp目录下,任何/tmp目录下非空的镜像层都属于文件拷贝层,理想情况下,如果制作镜像时通过一条命令将所有临时性文件一次拷贝到/tmp目录下,镜像将只有一个文件拷贝层;
业务层:保存应用自身的数据和配置。
需要注意的是,基础环境层、依赖层、公共镜像层、文件拷贝层和业务层是从功能的角度对镜像层进行分类,是一种分类方法,其本身是具有相同属性的一类镜像层的统称,每种分类可以包含多个镜像层,如依赖层可以由保存JAVA运行环境的JAVA层、保存PYTHON运行环境的PYTHON层和保存加解密算法和库的加密层构成。具体镜像不一定包含所有的功能层,镜像中是否包含指定功能层、每类功能层具体包含多少镜像层,因镜像的不同而不同,如基础镜像就不包含业务层。
作为本方案的进一步改进,S1中,引入镜像元数据仓库,支持基于层的镜像管理技术,镜像元数据仓库保存镜像元数据信息,包括镜像信息和镜像层信息,这些信息描述镜像的构成以及属性;
镜像元数据仓库保存的信息如下:
镜像信息:镜像名称、版本、架构、生成时间、包含的镜像层、镜像层之间的关系;
镜像层基础信息:镜像层名称、版本、架构、生成时间、镜像层是否被剪裁;
镜像层指纹:镜像层指纹信息,可唯一标识镜像层;
镜像层功能标签:描述镜像层功能的标签,如JAVA1.8运行环境、PYTHON3.6运行环境;
镜像层类型:镜像层的类型(基础环境层、依赖层、文件拷贝层和业务层)。
另外,镜像元数据仓库支持按指纹、架构、功能标签索引镜像层。
为兼容已有规范,上述元数据信息(称为扩展信息)以KEY、VALUE对的形式写入到镜像层元数据文件json中的Labe l s字段,KEY标识属性名称(如镜像层指纹、镜像层功能标签、镜像层类型、镜像层架构),VALUE标识属性值,前面说过,镜像由镜像层组成,每个镜像层包含l ayer.tar、json、VERS ION三个文件,l ayer.tar是当前镜像层文件的打包,VERS I ON记录规范版本信息,json包含镜像层属性和配置,将扩展信息记录到json文件中Labe l s字段能够确保规范的兼容性,docker等镜像运行时组件会将Labe l s字段当做普通的标签处理,这些标签只在本方案中具有特殊意义。
元数据信息通过镜像扫描器写入,按照上述镜像层分类规范制作的镜像,可通过镜像扫描器将镜像层指纹、功能标签、类型等元数据添加到镜像层,三方镜像可以手动指定元数据,通过镜像扫描器写入。
镜像上传时,解析镜像层json文件,提取元数据信息并添加到镜像元数据仓库;镜像导出时,将保存在镜像元数据仓库中的信息再次写入到镜像中。
镜像元数据仓库支持以下几种检索方式:
指纹:通过指纹唯一匹配镜像层;
架构:通过架构匹配镜像层,相同架构的镜像层通常有多个,因此架构常常用于高级筛选;
功能标签:通过功能标签匹配镜像层,如JAVA1.8功能标签可以匹配到所有架构下包含JAVA1.8运行环境的镜像层;
类型:通过类型匹配镜像层,如列举所有业务层镜像;
镜像:通过镜像名称、tag匹配镜像,通常用于根据镜像名称进一步检索镜像信息,如镜像包含的镜像层,镜像层类型等等;
三方镜像通常没有扩展信息,因此三方镜像可通过指纹检索具体镜像层,通过镜像名称、tag检索镜像包含的所有镜像层,或者基于镜像层信息检索包含镜像层的镜像;遵循本规范的镜像,除上述方式外,还可通过指纹、功能标签、类型检索,如通过JAVA1.8标签可以检索到所有架构下的包含JAVA1.8运行环境的镜像层,这种检索方式通常用于异构架构镜像的快速生成,如通过X86版本的JAVA1.8标签匹配ARM架构下的对应镜像层。
作为本方案的进一步改进,S2中,如图1所示,镜像层内剪裁用于将文件拷贝层裁剪掉,将制作镜像时使用的一次性数据和临时数据保存在/tmp目录下,镜像制作完成后,运行镜像层剪裁器,将/tmp目录下的数据删除,并更新镜像元数据信息,镜像可能包含多个文件拷贝层,镜像层剪裁器依次处理所有镜像层,将镜像层/tmp目录清空。
作为本方案的进一步改进,S3中,公共镜像层包括基础镜像层和依赖层,这些镜像层可被多个镜像引用,为避免数据重复保存发送,减少数据冗余,需要将其剪裁;公共镜像层剪裁由镜像层剪裁器完成,公共镜像层剪裁流程如图2所示,镜像层裁剪器提取待剪裁镜像的元数据信息,将组成镜像的每个镜像层指纹同镜像元数据仓库中保存的指纹进行对比,如果镜像层在镜像元数据仓库中存在,且镜像层类型为基础镜像层或者依赖层,则将其剪裁,否则跳过当前镜像层;
作为本方案的进一步改进,如图3所示,公共镜像层剪裁依赖镜像元数据仓库,当镜像元数据仓库中保存的镜像层类型为公共镜像层时,对应镜像层才能剪裁,镜像元数据仓库更新有以下两种方式:
自动更新:上传镜像时更新镜像元数据仓库,如果上传的是基础镜像,则将所有镜像层标识为基础镜像层,否则运行镜像层扫描器,根据内置的规则动态识别镜像层类型,镜像扫描器工作原理在下一小节说明;
手动更新:由管理员手动将镜像层信息写入到镜像元数据仓库中,此方式可以修正自动更新时,镜像层扫描器识别错误的情况,也可用于批量添加三方镜像。
公共镜像层裁剪时机比较灵活,有以下几种方式:
镜像生成时剪裁:镜像制作完成后,运行镜像层剪裁器,将公共镜像层剪裁;
镜像上传时剪裁:镜像上传到镜像仓库时,运行镜像层剪裁器,将公共镜像层剪裁;
手动触发:手动运行镜像层剪裁器,将公共镜像层剪裁。
镜像剪裁器运行时,需要访问镜像元数据仓库,如果镜像元数据仓库不可访问,则镜像剪裁器报错退出;
经测试,在镜像层内剪裁和公共镜像层剪裁的叠加效应下,典型场景下的镜像导入速度提升40%,镜像大小减少65%。
作为本方案的进一步改进,S4中,异构镜像快速生成基于镜像层动态拼接技术,镜像层动态拼接技术适用于架构不相关和架构半相关应用,架构不相关应用,其架构相关性由基础镜像层、依赖层屏蔽,通过将架构不相关的业务层和目标架构下对应的基础镜像层、依赖层按照镜像元数据中保存的镜像层顺序合并,即可生成目标架构的镜像;
架构半相关应用包含部分架构强相关文件,在生成目标架构镜像时,需要提供目标架构下对应文件,为降低系统复杂。
镜像具有架构相关性,镜像内部包含的库、二进制被编译为目标架构指令集,只能在对应架构的CPU上启动运行,生产环境的集群通常包括多种CPU架构,常见架构有X86、ARM、海光、鲲鹏、飞腾、龙芯和申威,部署业务时需要构建多种架构的镜像,以适配不同架构的服务器。
多架构镜像给镜像制作、维护、更新、升级带来了挑战,即使应用本身并未做任何改动,为支持多架构部署,也需要制作、维护多种架构镜像。
根据应用和CPU架构关系,可将应用分为三类:
架构不相关:应用不需要感知CPU架构,如JAVA、PYTHON、SHELL这种解释型语言,以JAVA为例,源码经过javac命令编译后,得到的JAVA字节码文件与CPU架构无关,可以在任何部署JAVA运行环境的设备上运行,架构相关性由JAVA运行环境屏蔽,JAVA为各种架构(如X86和ARM)分别提供了不同的JVM,在运行时,JVM将字节码转换成机器码来运行,所以对于JAVA类应用来说,其本身并不感知CPU架构,属于架构不相关应用,而JAVA属于架构不相关语言;
架构强相关:应用和CPU架构绑定,只能在目标架构CPU上运行,例如C、C++这种编译型语言,经过编译、汇编、链接形成特定架构的二进制,只能运行在目标CPU架构上,C、C++也称为架构相关语言;
架构半相关:应用主体由架构不相关语言如JAVA、PYTHON开发,并携带少量的架构相关语言如C、C++开发的二进制库,如HDFS应用,主体由JAVA开发,依赖的加解密算法由C语言开发,封装成动态链接库,此类应用运行时必须要有对应架构的库存在。
生产环境中存在大量架构不相关和架构半相关应用,对这类应用的优化具有现实意义。
我们将经过镜像层内剪裁、公共镜像层剪裁后剩余的层称为业务层,理想状态下,业务层只有一层,如果业务层有多层,则可以将多个业务层合并成一层,业务层的合并由镜像层合并器完成,合并逻辑如下:
从最上层镜像层开始,按照自上而下的顺序处理每个镜像层,对于每个镜像层,将镜像层文件解压到工作目录,解压时,下层的文件不能覆盖上层的同名文件,即上层文件优先级高于下层同名文件;同时处理删除标记,当上层中存在某一文件的删除标记时,下层中所有的同名文件被屏蔽,解压时将跳过这些文件,最后将工作目录中的文件压缩成一个镜像层,并更新元数据。
业务层合并会进一步减少镜像层,缩减镜像大小,业务层合并完成后的镜像,其公共镜像层已经被裁剪,镜像大小有可观的缩减,镜像占用存储通常只有原始镜像的20%~30%左右,具有非常高的分发效率。
业务层合并完成后,运行镜像层扫描器,根据业务层文件类型标识业务层架构相关性,镜像扫描器扫描逻辑如下:
如果镜像层已经标注,则跳过本次扫描;
扫描镜像层内所有二进制文件,判断文件类型,如果镜像层内所有二进制文件类型为架构相关,则将当前镜像层标识为架构强相关,将镜像层类型和架构信息写入镜像层元数据文件json中的Labe l s字段,结束当前镜像层扫描;
如果镜像层内所有二进制文件类型为架构不相关,即为JAVA、PYTHON、SHELL等语言开发的应用,则将当前镜像层标识为架构不相关,将镜像层类型和架构信息写入镜像层元数据文件json中的Labe l s字段,结束当前镜像层扫描;
如果镜像层内既包含架构相关文件、又包含架构不相关文件,且架构相关文件总数不超过配置的上限(为简化系统,当架构半相关应用中架构强相关文件数量超过阀值时,将其转换为架构强相关应用),则将当前镜像层标识为架构半相关,将镜像层类型和架构信息写入镜像层元数据文件json中的Labe l s字段,结束当前镜像层扫描;如果架构相关文件总数超过配置的上限,则将当前镜像层标识为架构强相关;
如果镜像层内只包含配置文件等文本文件,则将当前镜像层标识为架构不相关,将镜像层类型和架构信息写入镜像层元数据文件json中的Labe l s字段,结束当前镜像层扫描。
扫描完成后,同步更新镜像元数据仓库中保存的信息。
镜像层动态拼接技术适用于架构不相关和架构半相关应用,架构不相关应用,其架构相关性由基础镜像层、依赖层屏蔽,通过将架构不相关的业务层和目标架构下对应的基础镜像层、依赖层按照镜像元数据中保存的镜像层顺序合并,即可生成目标架构的镜像,动态拼接的关键是目标架构下对应基础镜像层、依赖层的检索,如果检索失败则无法拼接,以X86版本的tomcat:8.0.53镜像为例,其基础镜像采用社区发布的X86架构的openjdk:11镜像,基于X86版本的tomcat:8.0.53镜像生成ARM架构的tomcat:8.0.53镜像,流程如下:
将X86架构的openjdk:11镜像上传到镜像仓库,因openjdk:11为公网下载的镜像,属于三方镜像,镜像元数据中未保存扩展属性信息,因此在上传时选择镜像类型为基础镜像,上传过程触发镜像元数据仓库更新逻辑,根据保存在镜像中的元数据信息,向镜像元数据仓库添加openjdk:11镜像信息,镜像名称为openjdk,版本为11,架构为X86,并添加组成该镜像的镜像层信息以及镜像层关系;接着添加每个镜像层信息,镜像层类型设置为基础环境层,并添加镜像层指纹等信息;
将ARM架构的openjdk:11镜像上传到镜像仓库,上传流程同X86架构镜像;
制作X86版本的tomcat:8.0.53镜像,基础镜像选择openjdk:11,因目标镜像架构为X86,因此基础镜像将选择X86版本的openjdk:11镜像,并运行镜像层剪裁器,由于openjdk:11所有镜像层被标识为基础镜像层,因此全部被剪裁,同时更新tomcat:8.0.53镜像中被剪裁镜像层的元数据文件json,在Labe l s字段添加裁剪标记;接着运行镜像层合并器,将剩余层合并为业务层;最后运行镜像层扫描器,扫描业务层并将其类型标识为架构不相关,更新业务层元数据文件json,在Labe l s字段添加镜像层类型标记,打包、输出镜像,同时更新镜像元数据仓库;
以X86版本的tomcat:8.0.53镜像为基础,构建ARM版的tomcat:8.0.53镜像,首先检测业务层类型,tomcat:8.0.53镜像业务层为架构不相关,符合拼接要求,接着扫描剩余镜像层,本例中,除业务层外,其它镜像层均为公共镜像层且被剪裁,且公共镜像层全部来自于三方镜像openjdk:11,因三方镜像openjdk:11未使用扩展属性,因此本步骤无法通过被剪裁的镜像层功能标签,在镜像元数据仓库中检索ARM架构下具有相同功能标签的镜像层,此处需要基于被剪裁的镜像层查找对应的基础镜像,再根据基础镜像名称,查找同名的ARM架构基础镜像,最后将ARM架构的基础镜像和业务层拼接,形成目标镜像;本例中,先根据被剪裁镜像层信息找到X86架构的openjdk:11基础镜像,接着根据镜像标识openjdk:11找到ARM架构的基础镜像,最后将业务层、ARM架构的openjdk:11所有镜像层拼接为ARM架构的tomcat:8.0.53镜像。
架构半相关应用同架构不相关应用的区别在于,架构半相关应用包含部分架构强相关文件,在生成目标架构镜像时,需要提供目标架构下对应文件,为降低系统复杂性,本方案对架构强相关文件数量进行限制,考虑到现实场景中架构半相关应用通常只包含少量的架构强相关文件,因此将限制值定为20,当架构强相关文件数量超过20时,镜像层将转换为架构强相关类型,对应的应用类型转换为架构强相关应用,这样做的原因是,如果镜像层包含过多的架构强相关文件,动态拼接技术带来的收益将降低,同时系统更加复杂;为便于快速匹配目标架构的架构强相关文件,简化系统,本方案做如下规定:
架构半相关应用,其携带的架构强相关文件总数不能超过20(具体实现可以根据需要调整);
制作镜像时,特定架构的文件必须拷贝到/opt/app/dep/目录下,目录名称以架构名命名,命名遵循业界规范,如存放X86 64位架构相关文件的目录名称为amd64,存放arm64位架构相关文件的目录名称为aarch64,/opt/app/dep/arch目录为指向具体架构的符号链接,链接到目标架构目录,以在镜像运行时屏蔽架构目录差异性;
架构强相关文件可在制作镜像时写入,也可根据需要,使用工具写入,通常情况下,制作镜像时只将常见架构的架构相关文件写入,如制作X86镜像时,将X86和ARM架构相关文件写入,这样可以基于X86架构镜像快速生成ARM架构镜像,后续要支持其它架构如申威时,通过工具将申威架构相关二进制写入即可;采用本方案提供的方法构建目标架构镜像前,原始镜像中需要包含目标架构相关二进制。
仍以tomcat:8.0.53镜像为例,假设镜像内部包含二进制运维工具devtoo l,在制作X86版本镜像时,提供X86架构、ARM架构二进制devtoo l,X86版本镜像制作完成后,目录/opt/app/dep视图如图4所示;生成的ARM版本镜像,目录/opt/app/dep视图如图5所示。
架构相关文件也可在后期通过工具添加,以向X86版本tomcat:8.0.53镜像增加申威架构支持为例,运行镜像层更新器,提供申威版本二进制devtoo l,向X86版本增加申威架构,后续可以基于X86版本镜像快速生成申威架构镜像,目录/opt/app/dep视图如图6所示。
对于架构强相关应用,因为二进制和特定CPU架构相关,因此无法通过动态拼接的方式生成目标架构的镜像。
剪裁、合并后的镜像分发到目标系统后,上传到目标系统镜像仓库时,查询目标系统镜像元数据仓库,判断被剪裁的镜像层是否在,如果被剪裁的镜像层不存在,本次上传失败。
镜像架构相关性由运行在节点上的node-agent屏蔽,node-agent根据待启动镜像业务层类型的不同,采取不同的处理流程,具体如下:
架构不相关:如果待启动镜像存在业务层,且镜像元数据仓库中记录的业务层类型为架构不相关,说明该镜像可以通过动态拼接生成目标架构的镜像(业务层具有架构不相关性,因此可以和任意架构的公共镜像层拼接),node-agent查询镜像元数据仓库当前镜像是否经过剪裁,如是则判断本地仓库是否有缺失的镜像层,匹配逻辑首先根据镜像层功能标签检索目标架构下、具有相同功能标签的镜像层,如功能标签检索失败则根据缺失的镜像层检索包含被剪裁镜像层的基础镜像,根据基础镜像名称检索目标架构下的同名镜像,将目标架构下同名镜像的镜像层作为缺失的镜像层,拉取和当前节点同架构的、被剪裁的镜像层,按照镜像元数据仓库记录的镜像层顺序逐一拼接,业务层拼接到最上层,拼接完成后,启动镜像;
架构强相关:不进行动态拼接,如果镜像仓库中不存在目标架构下标识相同的同名同版本的镜像,则镜像启动失败;
架构半相关:node-agent查询镜像元数据仓库,当前镜像是否经过剪裁,如果是则查询镜像元数据仓库,检索并拉取和当前节点同架构的、被剪裁的镜像层,具体流程和架构相关应用一致,不同的是,架构半相关应用包含的架构强相关文件需要特殊处理,node-agent查询业务层目录/opt/data/dep下是否存在和目标架构相同的子目录,如是则将符号链接/opt/data/dep/arch指向目标架构目录,最后拼接、启动镜像;
业务层缺失:不进行动态拼接,如果目标镜像存在则拉取并启动,否则镜像启动失败。
作为本方案的进一步改进,S5中,在现有技术体系下,镜像拉取在节点接收到容器启动请求后才开始,极大降低了系统响应速度,无法支持高性能系统的运行,如WEB业务快速上线、AI模块的快速弹性伸缩需求等。
镜像预热技术将镜像拉取时间前移,缩减镜像启动时间,以获得良好的响应速度;镜像预热的难点在于如何精准预测镜像的启动时间,结合本发明提出的S1中引入的基于层的镜像管理技术,镜像预热可采用以下几种方案:
周期预热:周期预热用于预热公共镜像层,公共镜像层可被多个镜像引用,运行在本地节点上的node-agent定期同镜像元数据仓库交互,获取公共镜像层变更信息并生成镜像层拉取任务,当节点负载降低到预设阀值时,启动拉取任务,更新本地镜像层;
触发预热:由节点标签变化引起的镜像预热,容器通常基于标签进行调度,新增标签预示将要启动新容器,当运行在节点上的node-agent监控到当前节点标签发生变化时,node-agent基于最新标签匹配可运行在当前节点上的镜像,将可在当前节点运行的、镜像层尚未拉取完成的镜像添加到待拉取队列中,由镜像拉取模块在负载空闲时拉取到本地;
预测预热:触发预热适用于标签和镜像有强绑定关系的场景,节点上运行的镜像能够基于标签筛选确定;云平台还有一些应用,其可运行节点不完全取决于标签,容器每次启动的节点根据当前应用负载和节点剩余资源确定,此类应用通常是一些AI模型或者WEB业务,具有高度可伸缩性,平时维持少量的容器提供服务,应用负载升高时需要快速扩容,负载降低后缩容,若采用触发预热的方式会造成资源浪费,镜像拉取后,应用负载可能一直保持在低水位而不需要伸缩,或者当应用需要伸缩时,当前节点空闲资源无法满足容器运行需求。相比于触发预热,预测预热能够较为准确的预测到容器运行节点,运行在管理节点上的预测模块综合考虑应用伸缩需求和节点负载,当应用负载超过警戒值时(警戒值低于弹性伸缩阀值),预测模块根据集群节点负载和应用伸缩配置,运行预选算法,选择目标节点,将镜像拉取任务下发到目标节点上的node-agent服务,由node-agent完成镜像拉取。
镜像回收策略会影响镜像预热效果,拉取到本地的镜像由于存储紧张被清理,或者因为长时间未使用触发超时清理,由于分布式系统的动态性,被清理的镜像后续可能在相同的节点上启动,造成资源浪费。
采用基于层的优先级回收策略可以降低对镜像预热的影响,通过提高公共镜像层的优先级,延迟公共镜像层的回收时机,尽可能的在节点本地仓库中保留公共镜像层有利于提升整体资源利用率。
与现有技术相比,本发明具有如下有益效果:
1、本发明通过引入基于层的镜像管理技术,将镜像管理粒度从以镜像为单位调整为以镜像层为单位,镜像层保存特定的内容并采用唯一的指纹标识,镜像可以按需、以层为单位分离拼接,为镜像剪裁、异构镜像快速生成、镜像预热提供技术支持,基于层的镜像管理技术将镜像层信息和镜像层之间的关系存储在镜像元数据仓库中,对现有的镜像规范零侵入,兼容已有镜像,进而实现解决云原生环境下镜像存储空间占用大、镜像分发效率低下、镜像启动速度慢、适配新架构时需要重新制作镜像、多架构镜像维护成本高等问题。
附图说明
图1是本发明镜像层内剪裁图;
图2是本发明公共镜像层剪裁流程图;
图3是本发明公共镜像层剪裁示意图;
图4是本发明X86架构目录视图;
图5是本发明ARM架构目录视图;
图6是本发明增加申威架构支持后的X86架构目录视图;
图7是本发明Dockerf i l e内容示意图。
具体实施方式
下面结合附图和实施例对本发明的实施方式作进一步详细描述。以下实施例用于说明本发明,但不能用来限制本发明的范围。
本实施例中,如图1、图2、图3、图4、图5、图6和图7所示,一种基于云平台的镜像裁剪及多架构镜像构建方法,通过引入基于层的镜像管理技术,将镜像管理粒度从以镜像为单位调整为以镜像层为单位,镜像层保存特定的内容并采用唯一的指纹标识,镜像可以按需、以层为单位分离拼接,为镜像剪裁、异构镜像快速生成、镜像预热提供技术支持,基于层的镜像管理技术将镜像层信息和镜像层之间的关系存储在镜像元数据仓库中,对现有的镜像规范零侵入,兼容已有镜像。镜像裁剪及多架构镜像构建方法包括以下步骤:
本方案以Tomcat应用为例,按照镜像制作、镜像层内裁剪、公共镜像层裁剪、镜像上传、镜像预热、镜像启动的顺序说明实施过程,本示例共需2套集群:集群A和集群B,集群A信息如下:
表1集群A信息集群B信息如下:
表2集群B信息本示例需要准备的素材清单如下:
表3素材清单
镜像制作:镜像制作在集群A主节点进行,流程如下:
1、将X86架构的openjdk:11镜像上传到集群A、集群B的镜像仓库,上传时选择镜像类型为基础镜像,上传过程触发镜像元数据仓库更新逻辑,将openjdk:11信息添加到镜像元数据仓库,并将所有镜像层类型标记为基础镜像层;
2、将ARM架构的openjdk:11镜像上传到集群A、集群B的镜像仓库,上传流程同X86架构镜像;
3、在集群A主节点制作X86版本的tomcat:8.0.53镜像,基础镜像选择openjdk:11;
镜像制作使用的Dockerf i l e关键内容如图7所示。
镜像层内剪裁和公共镜像层剪裁:运行镜像层剪裁器,依次扫描所有镜像层,将镜像层内/tmp目录下文件删除,如果当前镜像层类型为公共镜像层,则将其剪裁,并更新镜像层元数据;
运行镜像层合并器,将tomcat:8.0.53剩余镜像层合并为业务层;
运行镜像层扫描器,扫描tomcat:8.0.53镜像业务层并将其类型标识为架构不相关,更新业务层元数据文件json,在Labe l s字段添加镜像层类型标记,打包、输出镜像tomcat_8.0.53-amd64.tar,同时更新镜像元数据仓库。
镜像上传:将上一步生成的tomcat_8.0.53-amd64.tar镜像上传到集群B镜像仓库,上传时会扫描所有镜像层,如果当前镜像层被剪裁,查询镜像元数据仓库被剪裁的镜像层是否存在,如果不存在则报错退出;
依次解析所有镜像层,根据镜像层json文件Labe l s字段信息,将镜像层信息更新到镜像元数据仓库。
镜像预热:本示例演示周期预热,以集群B节点node5、node6为例。
向集群B上传基础镜像openjdk:11时,运行在节点上的node-agent检测到基础镜像层更新事件,生成镜像层拉取任务,将基础镜像层拉取到当前节点,node5拉取ARM架构基础镜像层,node6拉取X86架构基础镜像层。
镜像启动:在集群B主节点上创建K8S Statefu l set,启动3个互斥的Tomcat容器(互斥指同一节点不能运行2个或以上的Tomcat容器),镜像使用tomcat:8.0.53,本示例不展示Statefu l set内容,需要的读者可参考K8S规范。以集群B node5节点为例,启动流程如下:
node5节点上的node-agent从镜像元数据仓库中获取到待启动镜像业务层类型为架构不相关,从镜像元数据仓库中获取被剪裁的公共镜像层清单,并查询被剪裁的公共镜像层在当前节点本地仓库是否存在,由于镜像预热时ARM架构的公共镜像层已经被拉取到本地,因此将跳过镜像层拉取,接着运行镜像拼接器,将ARM架构基础镜像openjdk:11的所用公共镜像层同tomcat:8.0.53业务层拼接(由于镜像层全部存在node5的本地仓库中,因此拼接时只需要更新元数据),最后启动容器。
本发明的实施例是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。
Claims (7)
1.一种基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于,镜像裁剪及多架构镜像构建方法包括以下步骤:
S1:引入基于层的管理技术,将镜像层分为保存基础运行环境的公共镜像层、保存临时文件的文件拷贝层和保存应用的业务镜像层;
S2:镜像层裁剪,镜像层生成时,通过标识并识别镜像层中的临时数据,在生成镜像时将其删除,从而减少单层镜像大小;
S3:公共镜像层裁剪,通过标识并识别镜像中的公共镜像层,将公共镜像层删除从而缩减镜像大小;
S4:异构镜像快速生成,扫描并标识业务镜像层,适配新架构时,根据业务镜像层属性快速基于一种架构生成另外一种架构镜像,多架构镜像只需维护一个业务镜像层,降低维护成本;
S5:镜像预热,通过镜像周期预热、触发预热、预测预热等预热机制,将镜像拉取时间前移,缩减镜像启动时间,以获得良好的响应速度,从而提升分布式系统的响应速度,实现容器的快速启动。
2.如权利要求1所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:S1中,基于层的镜像管理技术将镜像层按功能分为基础环境层、依赖层、文件拷贝层和业务层:
基础镜像层:保存OS、架构相关的基础运行环境;
依赖层:保存应用运行时的直接依赖,包括运行时环境、动态库等,如JAVA环境、PYTHON环境,安全类应用依赖的加解密库等;
公共镜像层:基础镜像层和依赖层统称为公共镜像层,公共镜像层属于公共资源,可被多个镜像共享;
文件拷贝层:该层保存的内容具有临时性,在镜像制作过程中起辅助作用,镜像制作完成后,该层的数据不再需要;
业务层:保存应用自身的数据和配置。
3.如权利要求1所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:S1中,引入镜像元数据仓库,支持基于层的镜像管理技术,镜像元数据仓库保存镜像元数据信息,包括镜像信息和镜像层信息,这些信息描述镜像的构成以及属性。
4.如权利要求1所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:S2中,镜像层内剪裁用于将文件拷贝层裁剪掉,将制作镜像时使用的一次性数据和临时数据保存在/tmp目录下,镜像制作完成后,运行镜像层剪裁器,将/tmp目录下的数据删除,并更新镜像元数据信息,镜像可能包含多个文件拷贝层,镜像层剪裁器依次处理所有镜像层,将镜像层/tmp目录清空。
5.如权利要求1所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:S3中,公共镜像层包括基础镜像层和依赖层,公共镜像层剪裁由镜像层剪裁器完成,镜像层裁剪器提取待剪裁镜像的元数据信息,将组成镜像的每个镜像层指纹同镜像元数据仓库中保存的指纹进行对比,如果镜像层在镜像元数据仓库中存在,且镜像层类型为基础镜像层或者依赖层,则将其剪裁,否则跳过当前镜像层。
6.如权利要求3所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:公共镜像层剪裁依赖镜像元数据仓库,当镜像元数据仓库中保存的镜像层类型为公共镜像层时,对应镜像层才能剪裁,镜像元数据仓库更新有以下两种方式:
自动更新:上传镜像时更新镜像元数据仓库,如果上传的是基础镜像,则将所有镜像层标识为基础镜像层,否则运行镜像层扫描器,根据内置的规则动态识别镜像层类型,镜像扫描器工作原理在下一小节说明;
手动更新:由管理员手动将镜像层信息写入到镜像元数据仓库中,此方式可以修正自动更新时,镜像层扫描器识别错误的情况,也可用于批量添加三方镜像。
7.如权利要求1所述基于云平台的镜像裁剪及多架构镜像构建方法,其特征在于:S4中,异构镜像快速生成基于镜像层动态拼接技术,镜像层动态拼接技术适用于架构不相关和架构半相关应用,架构不相关应用,其架构相关性由基础镜像层、依赖层屏蔽,通过将架构不相关的业务层和目标架构下对应的基础镜像层、依赖层按照镜像元数据中保存的镜像层顺序合并,即可生成目标架构的镜像;
架构半相关应用包含部分架构强相关文件,在生成目标架构镜像时,需要提供目标架构下对应文件,为降低系统复杂性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310126076.8A CN116166379A (zh) | 2023-02-16 | 2023-02-16 | 一种基于云平台的镜像裁剪及多架构镜像构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310126076.8A CN116166379A (zh) | 2023-02-16 | 2023-02-16 | 一种基于云平台的镜像裁剪及多架构镜像构建方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116166379A true CN116166379A (zh) | 2023-05-26 |
Family
ID=86421556
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310126076.8A Pending CN116166379A (zh) | 2023-02-16 | 2023-02-16 | 一种基于云平台的镜像裁剪及多架构镜像构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116166379A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116795453A (zh) * | 2023-08-28 | 2023-09-22 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
CN116954831A (zh) * | 2023-09-20 | 2023-10-27 | 中国电子科技集团公司第十五研究所 | 基于装配文件生成容器镜像包的方法及系统 |
CN117061503A (zh) * | 2023-10-11 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 镜像文件管理方法、装置、计算机可读介质及电子设备 |
CN117389690A (zh) * | 2023-12-08 | 2024-01-12 | 中电云计算技术有限公司 | 镜像包的构建方法、装置、设备及存储介质 |
-
2023
- 2023-02-16 CN CN202310126076.8A patent/CN116166379A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116795453A (zh) * | 2023-08-28 | 2023-09-22 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
CN116795453B (zh) * | 2023-08-28 | 2023-11-03 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
CN116954831A (zh) * | 2023-09-20 | 2023-10-27 | 中国电子科技集团公司第十五研究所 | 基于装配文件生成容器镜像包的方法及系统 |
CN116954831B (zh) * | 2023-09-20 | 2023-11-28 | 中国电子科技集团公司第十五研究所 | 基于装配文件生成容器镜像包的方法及系统 |
CN117061503A (zh) * | 2023-10-11 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 镜像文件管理方法、装置、计算机可读介质及电子设备 |
CN117061503B (zh) * | 2023-10-11 | 2024-01-26 | 腾讯科技(深圳)有限公司 | 镜像文件管理方法、装置、计算机可读介质及电子设备 |
CN117389690A (zh) * | 2023-12-08 | 2024-01-12 | 中电云计算技术有限公司 | 镜像包的构建方法、装置、设备及存储介质 |
CN117389690B (zh) * | 2023-12-08 | 2024-03-15 | 中电云计算技术有限公司 | 镜像包的构建方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116166379A (zh) | 一种基于云平台的镜像裁剪及多架构镜像构建方法 | |
US11150916B2 (en) | Execution of workflows in distributed systems | |
US10740093B2 (en) | Advanced packaging techniques for improving work flows | |
US7484223B2 (en) | System and method for building a run-time image from components of a software program | |
US8255363B2 (en) | Methods, systems, and computer program products for provisioning software using dynamic tags to identify and process files | |
US9542175B2 (en) | Continuous deployment | |
US8347263B1 (en) | Repository including installation metadata for executable applications | |
US11327744B2 (en) | Equivalency of revisions on modern version control systems | |
US9274783B2 (en) | Dynamic delivery and integration of static content into cloud | |
US20060282479A1 (en) | Methods, systems, and computer program products for provisioning software using local changesets that represent differences between software on a repository and a local system | |
US20030120678A1 (en) | Prototyping model for components of a software program | |
CN1968154A (zh) | 使用插件进行业务扩展的系统及其方法 | |
US20060288054A1 (en) | Methods, systems, and computer program products for provisioning software via a file repository in which a version string is used to identify branches of a tree structure | |
JP2005505034A (ja) | アプリケーション展開のためのスマートディレクトリに関する方法及び装置 | |
US11593357B2 (en) | Databases and methods of storing, retrieving, and processing data | |
US10922213B2 (en) | Embedded quality indication data for version control systems | |
CN109783107B (zh) | 一种可视化的规则生成方法、装置及电子设备 | |
CN103946794A (zh) | 数据特征的滚动升级的系统和方法 | |
US8527940B2 (en) | Integrated development environment with automatic working sets | |
CN111694750A (zh) | 一种软件测试环境的构建方法及装置 | |
Yan et al. | Systems for Big Graph Analytics | |
Clem et al. | Static analysis at github: An experience report | |
CN113553089A (zh) | 一种代码增量发布更新方法及系统 | |
CN113515303A (zh) | 一种项目转型方法、装置和设备 | |
US11941379B1 (en) | Accelerating static program analysis with artifact reuse |
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 |