容器镜像创建方法和装置、存储介质和电子设备与流程

    专利2022-07-08  101


    本公开涉及计算机技术领域,具体地,涉及一种容器镜像创建方法和装置、存储介质和电子设备。



    背景技术:

    随着容器技术的不断发展,带来了容器抽象化概念的普及,使得开发者可以构建出容器镜像用于高效地完成系统任务。容器镜像通常使用dockerfile来定义,通过声明性指令集来生成文件系统内容和元数据。容器镜像通过docker引擎的api(applicationprogramminginterface,应用程序接口)终端节点来创建,但是,docker引擎需要dockerdaemon支持,而dockerdaemon包含许多和构建镜像无关的功能,这导致了容器镜像创建过程中的系统资源利用率不高。并且,dockerdaemon要求客户端具有根访问权限才能与api及其构建终端节点进行交互,导致系统的安全性下降。



    技术实现要素:

    本公开的目的是提供一种容器镜像创建方法和装置、存储介质和电子设备,以解决上述的技术问题。

    为了实现上述目的,本公开的第一方面,提供一种容器镜像创建方法,所述方法包括:响应于容器镜像的创建指令,获取所述创建指令对应的源镜像;从镜像仓库中提取与所述创建指令对应的中间镜像层;确定所述创建指令中的创建步骤;在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    可选地,所述方法还包括:将提取得到的所述中间镜像层存储至镜像仓库。

    可选地,所述方法还包括:生成多种中间镜像层,并将生成的中间镜像层预先存储至镜像仓库。

    可选地,所述从镜像仓库中提取与所述创建指令对应的中间镜像层,包括:在所述镜像仓库中查找与所述创建指令对应的中间镜像层;在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;在所述镜像仓库中不存在所述中间镜像层的情况下,基于所述创建指令创建中间镜像层。

    可选地,所述响应于容器镜像的创建指令,获取所述创建指令对应的源镜像,包括:响应于容器镜像的创建指令,获取本地卷中预存的源镜像。

    可选地,所述创建指令中还包括存储位置,所述基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像,包括:基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,在所述存储位置中生成容器镜像。

    可选地,所述基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像,包括:基于预设的创建规则将所述创建步骤进行分组;基于分组结果,并行创建分组镜像层;将各分组对应的分组镜像层结合为所述容器镜像。

    本公开的第二方面,提供一种容器镜像创建装置,所述装置包括获取模块,用于响应于容器镜像的创建指令,获取所述创建指令对应的源镜像;提取模块,用于从镜像仓库中提取与所述创建指令对应的中间镜像层;确定模块,用于确定所述创建指令中的创建步骤;创建模块,用于在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    可选地,所属装置还包括存储模块,用于生成多种中间镜像层,并将生成的中间镜像层预先存储至镜像仓库。

    可选地,所述提取模块,用于在所述镜像仓库中查找与所述创建指令对应的中间镜像层;在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;在所述镜像仓库中不存在所述中间镜像层的情况下,从所述源镜像中提取与所述中间镜像层。

    可选地,所述提取模块,用于在所述镜像仓库中查找与所述创建指令对应的中间镜像层;在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;在所述镜像仓库中不存在所述中间镜像层的情况下,基于所述创建指令创建中间镜像层。

    可选地,所述获取模块,用于响应于容器镜像的创建指令,获取本地卷中预存的源镜像。

    可选地,所述创建指令中还包括存储位置,所述创建模块,用于基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,在所述存储位置中生成容器镜像。

    可选地,所述创建模块,用于:基于预设的创建规则将所述创建步骤进行分组,基于分组结果并行创建分组镜像层,将各分组对应的分组镜像层结合为所述容器镜像。

    本公开的第三方面,提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现本公开第一方面所述方法的步骤。

    本公开的第四方面,提供一种电子设备,包括存储装置和处理装置,存储装置上存储有计算机程序,处理装置,用于执行所述存储装置中的所述计算机程序,以实现本公开第一方面所述方法的步骤。

    通过上述技术方案,可以采用本地fork/exec模式模拟docker的客户端命令,将系统默认的用户命名空间中的id利用于容器创建过程中,减少了容器创建过程中对docker守护程序的依赖性,提升容器镜像创建的效率,并且,通过无根化的创建操作提升系统在创建容器镜像时的安全性。

    本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

    附图说明

    附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

    图1是根据一示例性公开实施例示出的一种容器镜像创建方法的流程图。

    图2是根据一示例性公开实施例示出的一种容器镜像创建装置的框图。

    图3是根据一示例性公开实施例示出的一种电子设备的框图。

    具体实施方式

    以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

    图1是根据一示例性公开实施例示出的一种容器镜像创建方法的流程图,如图1所示,所述方法包括以下步骤:

    s11、响应于容器镜像的创建指令,获取所述创建指令对应的源镜像。

    源镜像是从远程程序中调用的,也可以预先下载于本地卷中进行共享,或者响应于创建指令下载至本地卷中,以避免重复调用时对同一源镜像的多次提取带来的效率较低的问题。

    该创建指令在通常情况下可以是指rundockerfile指令,或者,在存在其他创建指令形式的情况下,也可以是指其他可以被fork或exec接口调用的容器镜像的创建指令。

    s12、从镜像仓库中提取与所述创建指令对应的中间镜像层。

    该中间镜像层可以是从远程程序、互联网、数据库种获取并存储的,还可以是预先生成的,各个中间镜像层的种类不同,可以根据不同的创建指令进行调用。

    在一种可能的实施方式中,可以根据中间镜像层的种类将各个中间镜像层分类存储在不同的镜像仓库中,以使在接收到创建指令后可以在于创建指令对应的镜像仓库中查找对应的中间镜像层,从而可以提升创建容器镜像时查找并调用中间镜像层的效率。值得说明的是,由于分类存储可能存在分类错误的可能性,在于创建指令对应的镜像仓库中未查找到对应的中间镜像层的情况下,可以在其他类型的镜像仓库中查找该中间镜像层。

    在所述镜像仓库中存在所述中间镜像层的情况下,可以直接从所述镜像仓库中提取中间镜像层,而在所述镜像仓库中不存在所述中间镜像层的情况下,可以基于所述创建指令创建中间镜像层。

    镜像缓存的导入和导出,可以灵活地将缓存的中间镜像层嵌入到镜像中,也可以导出到本地目录供以后使用。当从零开始建立构建环境而没有先前的构建历史可利用时,导入缓存的功能将发挥作用。

    s13、确定所述创建指令中的创建步骤。

    在本公开中,可以利用多阶段构建将镜像创建的步骤分离到单独的逻辑阶段,将创建步骤组装为有向非循环图,将同一dockerfile中的创建步骤按逻辑分组进行,能够确定哪些构建步骤可以并行,提供了更有效的构建执过程。另外可以将内容临时挂载在构建过程中所需的位置,能够将一些构建过程中需要内容不出现在镜像中。

    s14、在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    fork和exec为两种不同的数据调用模式,采用不同的数据调用接口,由于fork和exec可以模拟docker提供的各种客户端的命令,且可以兼容dockerbuild的参数,因此,可以通过采用fork或exec模式的形式避免容器创建过程中对docker守护程序的依赖性。

    在容器创建使用的命名空间集中利用了用户命名空间,可以将主机默认的用户命名空间中的一系列非特权用户和组的id,例如,uid(useridentification,用户身份证明)或gid(groupidentification,使用者身份证明)等,映射到与容器关联的新用户名称空间中的根用户的uid/gid,从而提供执行无根化构建的能力。

    在确定创建步骤后,可以根据创建步骤的逻辑阶段为各创建步骤及逆行分组,不同分组中的创建步骤可以并行进行,这样可以提升创建的效率,且减少重复调用的可能性。

    目前,由于指令语法注释的任何指令都会被解析器解析并用于创建新的镜像层,使得无关的中间镜像层较多,因此,可以通过上述的分组方法,将各个步骤分组,并将同一分组组合到一个dockerfile镜像创建指令中,从而可以减少无关中间层的数量,使创建的层数更少、创建的容器镜像更小。

    在一种可能的实施方式中,创建指令中还包括存储位置,可以直接在存储位置生成该容器镜像,或者,可以在生成容器镜像之后将该容器镜像发送至对应的位置,避免了目前在本地生成镜像并缓存后再上传至镜像仓库的过程中的效率低下的问题。

    通过上述技术方案,可以采用本地fork/exec模式模拟docker的客户端命令,将系统默认的用户命名空间中的id利用于容器创建过程中,减少了容器创建过程中对docker守护程序的依赖性,提升容器镜像创建的效率,并且,通过无根化的创建操作提升系统在创建容器镜像时的安全性。

    图2是根据一示例性公开实施例示出的一种容器镜像创建装置的框图。如图2所示,所述装置200包括:

    获取模块210,用于响应于容器镜像的创建指令,获取所述创建指令对应的源镜像。

    提取模块220,用于从镜像仓库中提取与所述创建指令对应的中间镜像层。

    确定模块230,用于确定所述创建指令中的创建步骤。

    创建模块240,用于在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    可选地,所属装置还包括存储模块,用于生成多种中间镜像层,并将生成的中间镜像层预先存储至镜像仓库。

    可选地,所述提取模块,用于在所述镜像仓库中查找与所述创建指令对应的中间镜像层;在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;在所述镜像仓库中不存在所述中间镜像层的情况下,从所述源镜像中提取与所述中间镜像层。

    可选地,所述提取模块,用于在所述镜像仓库中查找与所述创建指令对应的中间镜像层;在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;在所述镜像仓库中不存在所述中间镜像层的情况下,基于所述创建指令创建中间镜像层。

    可选地,所述获取模块,用于响应于容器镜像的创建指令,获取本地卷中预存的源镜像。

    可选地,所述创建指令中还包括存储位置,所述创建模块,用于基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,在所述存储位置中生成容器镜像。

    可选地,所述创建模块,用于:基于预设的创建规则将所述创建步骤进行分组,基于分组结果并行创建分组镜像层,将各分组对应的分组镜像层结合为所述容器镜像。

    关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

    通过上述技术方案,可以采用本地fork/exec模式模拟docker的客户端命令,将系统默认的用户命名空间中的id利用于容器创建过程中,减少了容器创建过程中对docker守护程序的依赖性,提升容器镜像创建的效率,并且,通过无根化的创建操作提升系统在创建容器镜像时的安全性。

    图3是根据一示例性实施例示出的一种电子设备300的框图。如图3所示,该电子设备300可以包括:处理器301,存储器302。该电子设备300还可以包括多媒体组件303,输入/输出(i/o)接口304,以及通信组件305中的一者或多者。

    其中,处理器301用于控制该电子设备300的整体操作,以完成上述的容器镜像创建方法中的全部或部分步骤。存储器302用于存储各种类型的数据以支持在该电子设备300的操作,这些数据例如可以包括用于在该电子设备300上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器302可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件303可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器302或通过通信组件305发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口304为处理器301和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件305用于该电子设备300与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g、4g、nb-iot、emtc、或其他5g等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件305可以包括:wi-fi模块,蓝牙模块,nfc模块等等。电子设备300可以操作基于存储在存储器302的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm等等。

    在一示例性实施例中,电子设备300可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的容器镜像创建方法。

    在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的容器镜像创建方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器302,上述程序指令可由电子设备300的处理器301执行以完成上述的容器镜像创建方法。

    以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

    另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

    此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。


    技术特征:

    1.一种容器镜像创建方法,其特征在于,所述方法包括:

    响应于容器镜像的创建指令,获取所述创建指令对应的源镜像;

    从镜像仓库中提取与所述创建指令对应的中间镜像层;

    确定所述创建指令中的创建步骤;

    在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

    生成多种中间镜像层,并将生成的中间镜像层预先存储至镜像仓库。

    3.根据权利要求2所述的方法,其特征在于,所述从镜像仓库中提取与所述创建指令对应的中间镜像层,包括:

    在所述镜像仓库中查找与所述创建指令对应的中间镜像层;

    在所述镜像仓库中存在所述中间镜像层的情况下,从所述镜像仓库中提取中间镜像层;

    在所述镜像仓库中不存在所述中间镜像层的情况下,基于所述创建指令创建中间镜像层。

    4.根据权利要求1所述的方法,其特征在于,所述响应于容器镜像的创建指令,获取所述创建指令对应的源镜像,包括:

    响应于容器镜像的创建指令,获取本地卷中预存的源镜像。

    5.根据权利要求1所述的方法,其特征在于,所述创建指令中还包括存储位置,所述基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像,包括:

    基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,在所述存储位置中生成容器镜像。

    6.根据权利要求1所述的方法,其特征在于,所述基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像,包括:

    基于预设的创建规则将所述创建步骤进行分组;

    基于分组结果,并行创建分组镜像层;

    将各分组对应的分组镜像层结合为所述容器镜像。

    7.一种容器镜像创建装置,其特征在于,所述装置包括:

    获取模块,用于响应于容器镜像的创建指令,获取所述创建指令对应的源镜像;

    提取模块,用于从镜像仓库中提取与所述创建指令对应的中间镜像层;

    确定模块,用于确定所述创建指令中的创建步骤;

    创建模块,用于在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。

    8.根据权利要求7所述的装置,其特征在于,所述创建模块,用于:

    基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,在所述存储位置中生成容器镜像。

    9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6中任一项所述方法的步骤。

    10.一种电子设备,其特征在于,包括:

    存储器,其上存储有计算机程序;

    处理器,用于执行所述存储器中的所述计算机程序,以实现权利要求1-6中任一项所述方法的步骤。

    技术总结
    本公开涉及一种容器镜像创建方法和装置、存储介质和电子设备,其中,所述方法包括:响应于容器镜像的创建指令,获取所述创建指令对应的源镜像;从镜像仓库中提取与所述创建指令对应的中间镜像层;确定所述创建指令中的创建步骤;在本地fork/exec模式下,通过用户命名空间,基于所述创建步骤,将与所述创建步骤对应的中间镜像层和所述源镜像结合,生成容器镜像。本公开可以提升容器镜像生成的效率。

    技术研发人员:张浩;王煜;张皓;赖新明;李瑞祥;舒南飞
    受保护的技术使用者:航天信息股份有限公司
    技术研发日:2020.12.18
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23329.html

    最新回复(0)