一种镜像文件的修改方法和装置与流程

文档序号:11620575阅读:182来源:国知局
一种镜像文件的修改方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种镜像文件的修改方法和装置。



背景技术:

计算机虚拟化技术由来已久,从硬件仿真到全虚拟化,再到准虚拟化和操作系统虚拟化,各种技术种类繁多。相对于全虚拟化和半虚拟化而言,容器(英文名称:container)是操作系统级别的轻量级虚拟化技术,而且它底层依赖的技术(例如linuxnamespace、linuxcgroup)完全是内核特性,没有任何中间层开销,对于资源的利用率极高,其性能接近物理机。

镜像(英文名称:image)是一个只读的模板,例如:一个镜像可以包含一个完整的操作系统环境。镜像可以用来创建容器。容器是镜像创建的运行实例,它可以被启动、开始、停止、删除,每个容器都是相互隔离的且保证安全的平台。容器为运行中的程序提供隔离环境,容器严格控制其中的程序所能访问的资源。创建并维护多个容器均需要基于镜像文件来执行,镜像文件是保存容器数据的文件,镜像文件可以保存、迁移到其它主机上运行。

容器在启动的时候可以创建一个可写的层(英文名称:lay)作为最上层,镜像文件是由一层层往上叠加覆盖的多个层形成的,每一层都实现特定的功能,包含特定的组件。在应用容器引擎docker中,每一层都包含了特定组件的镜像文件,有些层实现配置功能,上层的镜像文件会覆盖下层的镜像文件,在容器最终运行的文件系统中,如果同时存在上层的镜像文件和下层的镜像文件,处于最上层的镜像文件可以被读也可以被写,下层被覆盖的镜像文件都是只读的。

现有技术提供的镜像文件修改方法如下:在最顶层增加一个新的层,在新建的层中添加镜像文件、修改镜像文件或删除镜像文件,将新增的层提交保存到容器,实现覆盖更新。但是本发明的发明人在实现本发明的过程中发现现有技术至少存在如下问题:现有技术中的镜像文件修改方法会产生文件 冗余和层的冗余。并且随着每修改一次镜像文件,都会在原有的层上新增加一个层,而docker对总层次的数目有限制,容易导致镜像层的饱和,导致无法再继续往上增加新的层。



技术实现要素:

本发明实施例提供了一种镜像文件的修改方法和装置,用于避免增加冗余文件和冗余层的情况下实现对镜像文件的修改。

为解决上述技术问题,本发明实施例提供以下技术方案:

第一方面,本发明实施例提供一种镜像文件的修改方法,包括:

从容器中导出待修改的镜像层;

对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层;

将所述修改后的镜像层导入所述容器中。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到待修改的镜像层,将修改后的镜像文件通过修改后的镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面,在第一方面的第一种可能的实现方式中,所述待修改的镜像层,包括:第一镜像文件所在的第一镜像层,所述第一镜像文件为待修改的镜像文件;

所述对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层,包括:

对导出的所述第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,所述修改后的镜像层具体为修改后的第一镜像文件所在的第一镜像层。

在本发明的上述实施例中,第一镜像层为待修改的镜像层,导出第一镜像层之后,可以对该第一镜像层中的第一镜像文件进行修改,生成修改后的第一镜像文件所在的第一镜像层,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述对导出的所述第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,包括:

对所述第一镜像层中的所有镜像文件进行解压缩;

从所述第一镜像层中解压缩后的所有镜像文件中确定出第一镜像文件;

对所述第一镜像文件进行修改,得到修改后的第一镜像文件;

将修改后的第一镜像文件保存到所述第一镜像层中,对保存有修改后的第一镜像文件的第一镜像层进行压缩,得到修改后的第一镜像文件所在的第一镜像层。

在本发明的上述实施例中,进一步的,若第一镜像层中的镜像文件采用压缩存储时可以先解压缩然后再对第一镜像文件进行修改,修改完成之后重新压缩,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面,在第一方面的第三种可能的实现方式中,所述待修改的镜像层,包括:第二镜像层和第三镜像层,所述第二镜像层为所述容器中待删除的镜像层,所述第三镜像层为所述容器中位于所述第二镜像层之上的相邻镜像层;

所述对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层,包括:

将所述第二镜像层从导出的所述待修改的镜像层中删除,并将所述第三镜像层的父子层关系修改为位于所述第二镜像层之下且与所述第二镜像层相邻的第四镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:父子层关系修改后的第三镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第二镜像层和第三镜像层,将第二镜像层删除,再将第三镜像层的父子层关系修改,重新导入第三镜像层到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实 现方式中,所述将所述第二镜像层从导出的所述待修改的镜像层中删除,包括:

将所述待修改的镜像层中的第二镜像层包括的所有镜像文件以及所有的配置信息文件删除。

在本发明的上述实施例中,删除第二镜像层可以是将第二镜像层中的所有镜像文件以及所有配置信息文件都删除掉,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面,在第一方面的第五种可能的实现方式中,所述从容器中导出待修改的镜像层,包括:

确定需要在所述容器中增加的第五镜像层的位置;

根据所述第五镜像层的位置从所述容器中导出第六镜像层,所述待修改的镜像层包括:所述第六镜像层,所述第六镜像层为所述容器中位于所述第五镜像层之上的相邻镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第六镜像层,将修改后的第六镜像层和新增加的第五镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层,包括:

将所述第六镜像层的父子层关系修改为所述第五镜像层;

将所述第五镜像层和父子层关系修改后的第六镜像层保存到所述待修改的镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:所述第五镜像层和父子层关系修改后的第六镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第六镜像层,将修改后的第六镜像层和新增加的第五镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余 层。

结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层,还包括:

在所述第五镜像层中增加镜像文件和配置信息文件;

将所述第五镜像层的配置信息文件中的父子层关系配置为所述容器中位于所述第六镜像层之下且与所述第六镜像层相邻的第七镜像层。

在本发明的上述实施例中,描述了新增加的第五镜像层的实现方式,从而可以实现对容器中新增加一个镜像层,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

第二方面,本发明实施例还提供一种镜像文件的修改装置,包括:

层导出模块,用于从容器中导出待修改的镜像层;

修改模块,用于对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层;

层导入模块,用于将所述修改后的镜像层导入所述容器中。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到待修改的镜像层,将修改后的镜像文件通过修改后的镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面,在第二方面的第一种可能的实现方式中,所述待修改的镜像层,包括:第一镜像文件所在的第一镜像层,所述第一镜像文件为待修改的镜像文件;

所述修改模块,具体用于对导出的所述第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,所述修改后的镜像层具体为修改后的第一镜像文件所在的第一镜像层。

在本发明的上述实施例中,第一镜像层为待修改的镜像层,导出第一镜像层之后,可以对该第一镜像层中的第一镜像文件进行修改,生成修改后的第一镜像文件所在的第一镜像层,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述修改模块,包括:

解压缩单元,用于对所述第一镜像层中的所有镜像文件进行解压缩;

文件确定单元,用于从所述第一镜像层中解压缩后的所有镜像文件中确定出第一镜像文件;

第一文件修改单元,用于对所述第一镜像文件进行修改,得到修改后的第一镜像文件;

文件保存单元,用于将修改后的第一镜像文件保存到所述第一镜像层中,

压缩单元,用于对保存有修改后的第一镜像文件的第一镜像层进行压缩,得到修改后的第一镜像文件所在的第一镜像层。

在本发明的上述实施例中,进一步的,若第一镜像层中的镜像文件采用压缩存储时可以先解压缩然后再对第一镜像文件进行修改,修改完成之后重新压缩,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面,在第二方面的第三种可能的实现方式中,所述待修改的镜像层,包括:第二镜像层和第三镜像层,所述第二镜像层为所述容器中待删除的镜像层,所述第三镜像层为所述容器中位于所述第二镜像层之上的相邻镜像层;

所述修改模块,包括:层删除单元和第二文件修改单元,其中,

所述层删除单元,用于将所述第二镜像层从导出的所述待修改的镜像层中删除;

所述第二文件修改单元,用于将所述第三镜像层的父子层关系修改为位于所述第二镜像层之下且与所述第二镜像层相邻的第四镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:父子层关系修改后的第三镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第二镜像层和第三镜像层,将第二镜像层删除,再将第三镜像层的父子层关系修改,重新导入第三镜像层到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述层删除单元,具体用于将所述待修改的镜像层中的第二镜像层包括的所有镜像文件以及所有的配置信息文件删除。

在本发明的上述实施例中,删除第二镜像层可以是将第二镜像层中的所有镜像文件以及所有配置信息文件都删除掉,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面,在第二方面的第五种可能的实现方式中,所述层导出模块,包括:

层确定单元,用于确定需要在所述容器中增加的第五镜像层的位置;

层导出单元,用于根据所述第五镜像层的位置从所述容器中导出第六镜像层,所述待修改的镜像层包括:所述第六镜像层,所述第六镜像层为所述容器中位于所述第五镜像层之上的相邻镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第六镜像层,将修改后的第六镜像层和新增加的第五镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述修改模块,包括:第三文件修改单元和层修改单元,其中,

所述第三文件修改单元,用于将所述第六镜像层的父子层关系修改为所述第五镜像层;

所述层修改单元,用于将所述第五镜像层和父子层关系修改后的第六镜像层保存到所述待修改的镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:所述第五镜像层和父子层关系修改后的第六镜像层。

在本发明的上述实施例中,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第六镜像层,将修改后的第六镜像层和新增加的第五镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述第三文件修改单元,还用于在所述第五镜像层中增加镜像文件和配置信息文件;将所述第五镜像层的配置信息文件中的父子层关系配置为所述容器中位于所述第六镜像层之下且与所述第六镜像层相邻的第七镜像层。

在本发明的上述实施例中,描述了新增加的第五镜像层的实现方式,从而可以实现对容器中新增加一个镜像层,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种镜像文件的修改方法的流程方框示意图;

图2-a为本发明实施例提供的另一种镜像文件的修改方法的流程方框示意图;

图2-b为本发明实施例提供的修改单个中间层文件的修改过程示意图;

图3-a为本发明实施例提供的另一种镜像文件的修改方法的流程方框示意图;

图3-b为本发明实施例提供的删除镜像层的过程示意图;

图4-a为本发明实施例提供的另一种镜像文件的修改方法的流程方框示意图;

图4-b为本发明实施例提供的增加镜像层的过程示意图;

图5-a为本发明实施例提供的一种镜像文件的修改装置的组成结构示意图;

图5-b为本发明实施例提供的一种修改模块的组成结构示意图;

图5-c为本发明实施例提供的另一种修改模块的组成结构示意图;

图5-d为本发明实施例提供的另一种镜像文件的修改装置的组成结构示 意图;

图6为本发明实施例提供的一种镜像文件的修改装置的组成结构示意图。

具体实施方式

本发明实施例提供了一种镜像文件的修改方法和装置,用于避免增加冗余文件和冗余层的情况下实现对镜像文件的修改。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

以下分别进行详细说明。

本发明镜像文件的修改方法的一个实施例,可应用于开源的应用容器docker中,请参阅图1所示,本发明一个实施例提供的镜像文件的修改方法,可以包括如下步骤:

101、从容器中导出待修改的镜像层。

在本发明实施例中,容器中设置有多个镜像层,在每个镜像层中都保存有镜像文件,当需要修改镜像文件时,先从容器中导出待修改的镜像层。待修改的镜像层可以根据容器中需要修改的镜像文件来确定,在具体的实现场景下可以确定出具体的待修改的镜像文件。进一步的,待修改的镜像层可以根据容器中需要修改的镜像文件的具体修改方式来确定,在具体的实现场景下可以有相应的镜像文件修改方式,在后续实施例中可以针对镜像文件的具 体修改方式来进行详细说明。

102、对待修改的镜像文件进行修改,并将修改后的镜像文件保存到待修改的镜像层从而得到修改后的镜像层。

在本发明实施例中,从容器中导出待修改的镜像层之后,可以对预先确定的待修改的镜像文件进行修改,例如,对镜像文件的修改可以包括:将容器中的镜像文件的数据内容进行修改,或者将容器中的镜像文件删除,或者在容器中新增加镜像文件,详细后续实施例中对不同修改方式的具体说明。当待修改的镜像文件修改完成之后得到修改后的镜像文件,则可以将修改后的镜像文件保存到待修改的镜像层从而得到修改后的镜像层,修改后的镜像层是是在从容器中导出的待修改的镜像层上添加修改后的镜像文件得到的镜像层。本发明实施例中对容器中镜像文件的修改是通过对镜像层从容器中导出后进行操作的,而不需要按照现有技术在原有的镜像层之上新增加一个层来保存修改后的镜像文件。

103、将修改后的镜像层导入容器中。

在本发明实施例中,通过步骤102得到修改后的镜像层,修改后的镜像层包括有修改后的镜像文件,只需要确定修改层次上下层接口的兼容就可以将该修改后的镜像层导入到容器中,从而可以完成容器中多个镜像层的镜像文件的修改。本发明实施例提供的镜像文件的修改方式是将镜像层从容器中导出后进行修改最后再导入,这种方式不同于现有技术中采用直接增加新的镜像层的方式,因此不会带来冗余文件和冗余层。

通过前述实施例对本发明的描述说明可知,首先从容器中导出待修改的镜像层,然后对待修改的镜像文件进行修改,并将修改后的镜像文件保存到待修改的镜像层从而得到修改后的镜像层,最后将修改后的镜像层导入容器中。由于本发明实施例中采用从容器中对镜像层导出的方式获取到待修改的镜像层,将修改后的镜像文件通过修改后的镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

接下来以对待修改的镜像文件进行数据内容的修改为例进行说明,请参阅如图2-a所示,本发明实施例提供的镜像文件的修改方法可以包括如下步 骤:

201、从容器中导出第一镜像文件所在的第一镜像层,第一镜像文件为待修改的镜像文件。

在本发明实施例中,以对容器中的第一镜像文件的数据内容修改为例,首先确定该第一镜像文件所在的镜像层为第一镜像层,从容器中导出该第一镜像层,然后执行步骤202。

202、对导出的第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,修改后的镜像层具体为修改后的第一镜像文件所在的第一镜像层。

在本发明实施例中,第一镜像层为待修改的镜像层,导出第一镜像层之后,可以对该第一镜像层中的第一镜像文件进行修改,生成修改后的第一镜像文件所在的第一镜像层,则前述实施例中步骤102中所述的修改后的镜像层具体为修改后的第一镜像文件所在的第一镜像层。

在本发明的一些实施例中,步骤202对导出的第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,包括:

a1、对第一镜像层中的所有镜像文件进行解压缩;

a2、从第一镜像层中解压缩后的所有镜像文件中确定出第一镜像文件;

a3、对第一镜像文件进行修改,得到修改后的第一镜像文件;

a4、将修改后的第一镜像文件保存到第一镜像层中,对保存有修改后的第一镜像文件的第一镜像层进行压缩,得到修改后的第一镜像文件所在的第一镜像层。

其中,从第一镜像层中解压该层所有的镜像文件,确定出第一镜像文件,然后用目标文件来修改替换该第一镜像文件,得到修改后的第一镜像文件,再将该修改后的第一镜像文件保存到第一镜像层,打包修改后的第一镜像层。将打包修改后的第一镜像层导入到容器中,形成修改后的容器。请参阅如图2-b所示,为本发明实施例提供的修改单个中间层文件的修改过程示意图,以docker容器中建立有四个镜像层为例,各个镜像层中保存的镜像文件分别为四种不同的应用程序,例如四种应用程序分别为:debian、samba、vim、apache,若待修改的镜像文件为vim,则可以从docker容器中导出vim所在的第三个 镜像层,导出vim所在的第三个镜像层之后,可以对该镜像层进行修改,层修改完成之后,再将vim所在的第三个镜像层导入到docker容器中,从而可以完成对vim镜像文件的修改。若按照现有技术的镜像文件修改方法,就需要在最上层(即apache所在的第四个镜像层)之上再新增加一个镜像层,新增加的镜像层用于保存newvim镜像文件,从而docker容器就包括五个镜像层,随着对docker容器的多次修改,docker容器的总层数会不断增加,不但会带来冗余文件和冗余层,还会导致docker容器的总层数达到最大限制的层数,此时就无法再修改docker容器中的镜像文件了。

203、将修改后的第一镜像文件所在的第一镜像层导入容器中。

在本发明实施例中,通过步骤202得到修改后的第一镜像文件所在的第一镜像层,再将修改后的第一镜像文件所在的第一镜像层导入到容器中,从而可以完成容器中镜像层包括的镜像文件的修改。本发明实施例提供的镜像文件的修改方式是将镜像层从容器中导出后进行修改最后再导入,这种方式不同于现有技术中采用直接增加新的镜像层的方式,因此不会带来冗余文件和冗余层。

通过前述实施例对本发明的描述说明可知,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第一镜像层,将修改后的第一镜像文件通过修改后的第一镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

接下来以对待修改的镜像文件从容器中删除为例进行说明,请参阅如图3-a所示,本发明实施例提供的镜像文件的修改方法可以包括如下步骤:

301、从容器中导出待修改的镜像层,待修改的镜像层包括:第二镜像层和第三镜像层,第二镜像层为容器中待删除的镜像层,第三镜像层为容器中位于第二镜像层之上的相邻镜像层。

在本发明实施例中,以对容器中第二镜像层的删除为例,首先确定待修改的镜像层包括:第二镜像层和第三镜像层,第三镜像层和第二镜像层是容器中位置相邻的上下两个镜像层,从容器中导出待修改的镜像层然后执行步骤302。

302、将第二镜像层从导出的待修改的镜像层中删除,并将第三镜像层的父子层关系修改为位于第二镜像层之下且与第二镜像层相邻的第四镜像层从而得到修改后的镜像层,修改后的镜像层包括:父子层关系修改后的第三镜像层。

在本发明实施例中,第二镜像层和第三镜像层为待修改的镜像层,导出待修改的镜像层之后,可以将第二镜像层从导出的待修改的镜像层中删除,并将第三镜像层的父子层关系修改为位于第二镜像层之下且与第二镜像层相邻的第四镜像层从而得到修改后的镜像层,则前述实施例中步骤102中所述的修改后的镜像层具体包括:父子层关系修改后的第三镜像层。第三镜像层、第二镜像层、第四镜像层是容器中位置相邻的上下三个镜像层,当处于第三镜像层和第四镜像层之间的第二镜像层被删除掉之后,第三镜像层和第四镜像层成了相邻的上下两个镜像层,则第三镜像层的父子层关系需要被修改为第四镜像层。从容器中导出的待修改的镜像层包括:第二镜像层和第三镜像层,修改后的镜像层只包括第三镜像层,从而完成对第二镜像层的删除,

在本发明的一些实施例中,步骤302中将第二镜像层从导出的待修改的镜像层中删除,具体包括如下步骤:

b1、将待修改的镜像层中的第二镜像层包括的所有镜像文件以及所有的配置信息文件删除。

其中,删除第二镜像层可以是将第二镜像层中的所有镜像文件以及所有配置信息文件都删除掉。接下来进行说明。例如,从容器中导出整个容器中镜像文件所有层,然后根据层配置信息找到待删除的第二镜像层,然后将该第二镜像层的镜像文件和配置信息文件都删除,最后修改第三镜像层的父子层配置信息文件,配置删除后正确的父子层关系,打包形成新的容器。请参阅如图3-b所示,为本发明实施例提供的删除镜像层的过程示意图,以docker容器中建立有四个镜像层为例,各个镜像层中保存的镜像文件分别为四种不同的应用程序,例如四种应用程序分别为:debian、samba、vim、apache,若待删除的镜像层为vim所在的镜像层,则可以从docker容器中导出所有的镜像层,可以对vim所在的镜像层进行删除,层删除完成之后,再将apache所在的镜像层的配置信息文件中的父子层关系进行重新配置,将apache所在 的镜像层的父子层修改为samba所在的镜像层,并将apache所在的镜像层导入到docker容器中,从而可以完成对vim所在镜像层的修改。若按照现有技术的镜像文件修改方法,就需要在最上层(即apache所在的第四个镜像层)之上再新增加一个镜像层,新增加的镜像层用于保存对vim镜像文件所在镜像层的删除,从而docker容器就包括五个镜像层,随着对docker容器的多次修改,docker容器的总层数会不断增加,不但会带来冗余文件和冗余层,还会导致docker容器的总层数达到最大限制的层数,此时就无法再修改docker容器中的镜像文件了。

303、将父子层关系修改后的第三镜像层导入容器中。

在本发明实施例中,通过步骤302得到父子层关系修改后的第三镜像层,再将父子层关系修改后的第三镜像层导入到容器中,从而可以完成容器中镜像层包括的镜像文件的修改。本发明实施例提供的镜像文件的修改方式是将镜像层从容器中导出后进行修改最后再导入,这种方式不同于现有技术中采用直接增加新的镜像层的方式,因此不会带来冗余文件和冗余层。

通过前述实施例对本发明的描述说明可知,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第二镜像层和第三镜像层,将第二镜像层删除,再将第三镜像层的父子层关系修改,重新导入第三镜像层到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

接下来以将待修改的镜像文件增加到容器为例进行说明,请参阅如图4-a所示,本发明实施例提供的镜像文件的修改方法可以包括如下步骤:

401、确定需要在容器中增加的第五镜像层的位置。

402、根据第五镜像层的位置从容器中导出第六镜像层,待修改的镜像层包括:第六镜像层,第六镜像层为容器中位于第五镜像层之上的相邻镜像层。

在本发明实施例中,首先定义在容器中需要增加的镜像层为第五镜像层,可以按照业务组件的划分方式确定需要增加的第五镜像层的位置,然后根据第五镜像层的位置确定出第六镜像层,以对容器中的第六镜像层修改为例,从容器中导出该第六镜像层,然后执行步骤403。

403、将第六镜像层的父子层关系修改为第五镜像层。

其中,在容器中第六镜像层的父子层关系描述的是插入第五镜像层之前与该第六镜像层相邻的下一个镜像层,例如位于第六镜像层之下且与第六镜像层相邻的是第七镜像层,若第五镜像层插入在第六镜像层之下,则该第六镜像层的父子层关系需要从第七镜像层修改为第五镜像层。

404、将第五镜像层和父子层关系修改后的第六镜像层保存到待修改的镜像层从而得到修改后的镜像层,修改后的镜像层包括:第五镜像层和父子层关系修改后的第六镜像层。

在本发明实施例中,第六镜像层为待修改的镜像层,导出第六镜像层之后,可以将第五镜像层和父子层关系修改后的第六镜像层保存到待修改的镜像层从而得到修改后的镜像层,则前述实施例中步骤102中所述的修改后的镜像层具体为第五镜像层和父子层关系修改后的第六镜像层。

在本发明的一些实施例中,本发明实施例提供的镜像文件的修改方法除了包括步骤401至步骤405之外,还可以包括如下步骤:

c1、在第五镜像层中增加镜像文件和配置信息文件;

c2、将第五镜像层的配置信息文件中的父子层关系配置为容器中位于第六镜像层之下且与第六镜像层相邻的第七镜像层。

其中,步骤c1至步骤c2中描述了第五镜像层的生成方式,可以先在第五镜像层中增加镜像文件和配置信息文件,然后再对该配置信息文件进行修改,例如将第五镜像层的配置信息文件中的父子层关系配置为容器中位于第六镜像层之下且与第六镜像层相邻的第七镜像层。接下来进行说明。例如,确定增加的第五镜像层的位置,一般按业务组件合理划分,将新增层的所有镜像文件都放在层数据中,新建层配置信息文件,描述该第五镜像层,然后配置增加层的上下层关系并配置到层信息文件中,将增加层的镜像文件和配置信息文件都打包到第五镜像层里面。导出增加层的上一层(即第六镜像层)配置信息,配置上一层的的父层为新增的层。将修改后的层全部导入到容器,重新打包形成新的容器。请参阅如图4-b所示,为本发明实施例提供的增加镜像层的过程示意图,以docker容器中建立有三个镜像层为例,各个镜像层中保存的镜像文件分别为三种不同的应用程序,例如三种应用程序分别为:debian、samba、apache,若待增加的镜像层为vim所在的镜像层,待增加的 vim所在的镜像层为samba所在的镜像层和apache所在的镜像层之间,apache所在的镜像层为位于vim所在的镜像层之上,则可以从docker容器中导出apache所在的镜像层,可以将vim所在的镜像层和apache所在的镜像层进行打包,将apache所在的镜像层的配置信息文件中的父子层关系进行重新配置,在原容器中apache所在的镜像层的父子层为samba所在的镜像层,将apache所在的镜像层的父子层修改为vim所在的镜像层,并将apache所在的镜像层和vim所在的镜像层导入到docker容器中,从而可以完成对vim所在镜像层的增加。若按照现有技术的镜像文件修改方法,就需要在最上层(即apache所在的镜像层)之上再新增加一个镜像层,新增加的镜像层用于保存对vim镜像文件所在镜像层的增加,从而docker容器就包括四个镜像层,随着对docker容器的多次修改,docker容器的总层数会不断增加,不但会带来冗余文件和冗余层,还会导致docker容器的总层数达到最大限制的层数,此时就无法再修改docker容器中的镜像文件了。

405、将第五镜像层和父子层关系修改后的第六镜像层导入容器中。

在本发明实施例中,通过步骤404得到第五镜像层和父子层关系修改后的第六镜像层,再将第五镜像层和父子层关系修改后的第六镜像层导入到容器中,从而可以完成容器中镜像层包括的镜像文件的修改。本发明实施例提供的镜像文件的修改方式是将镜像层从容器中导出后进行修改最后再导入,这种方式不同于现有技术中采用直接增加新的镜像层的方式,因此不会带来冗余文件和冗余层。

通过前述实施例对本发明的描述说明可知,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第六镜像层,将修改后的第六镜像层和新增加的第五镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免在原有的所有层之上再新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例 均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。

请参阅图5-a所示,本发明实施例提供的一种镜像文件的修改装置500,该镜像文件的修改装置可以应用于docker容器的文件系统中,该镜像文件的修改装置500可以包括:层导出模块501、修改模块502和层导入模块503,其中,

层导出模块501,用于从容器中导出待修改的镜像层;

修改模块502,用于对待修改的镜像文件进行修改,并将修改后的镜像文件保存到所述待修改的镜像层从而得到修改后的镜像层;

层导入模块503,用于将所述修改后的镜像层导入所述容器中。

在本发明的一些实施例中,所述待修改的镜像层,包括:第一镜像文件所在的第一镜像层,所述第一镜像文件为待修改的镜像文件;

所述修改模块502,具体用于对导出的所述第一镜像层中的第一镜像文件进行修改从而得到修改后的第一镜像文件所在的第一镜像层,所述修改后的镜像层具体为修改后的第一镜像文件所在的第一镜像层。

在本发明的一些实施例中,如图5-b所示,所述修改模块502,包括:

解压缩单元5021,用于对所述第一镜像层中的所有镜像文件进行解压缩;

文件确定单元5022,用于从所述第一镜像层中解压缩后的所有镜像文件中确定出第一镜像文件;

第一文件修改单元5023,用于对所述第一镜像文件进行修改,得到修改后的第一镜像文件;

文件保存单元5024,用于将修改后的第一镜像文件保存到所述第一镜像层中,

压缩单元5025,用于对保存有修改后的第一镜像文件的第一镜像层进行压缩,得到修改后的第一镜像文件所在的第一镜像层。

在本发明的一些实施例中,所述待修改的镜像层,包括:第二镜像层和第三镜像层,所述第二镜像层为所述容器中待删除的镜像层,所述第三镜像层为所述容器中位于所述第二镜像层之上的相邻镜像层;

如图5-c所示,所述修改模块502,包括:层删除单元5026和第二文件修改单元5027,其中,

所述层删除单元5026,用于将所述第二镜像层从导出的所述待修改的镜像层中删除;

所述第二文件修改单元5027,用于将所述第三镜像层的父子层关系修改为位于所述第二镜像层之下且与所述第二镜像层相邻的第四镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:父子层关系修改后的第三镜像层。

在本发明的一些实施例中,所述层删除单元5026,具体用于将所述待修改的镜像层中的第二镜像层包括的所有镜像文件以及所有的配置信息文件删除。

在本发明的一些实施例中,如图5-d所示,所述层导出模块501,包括:

层确定单元5011,用于确定需要在所述容器中增加的第五镜像层的位置;

层导出单元5012,用于根据所述第五镜像层的位置从所述容器中导出第六镜像层,所述待修改的镜像层包括:所述第六镜像层,所述第六镜像层为所述容器中位于所述第五镜像层之上的相邻镜像层。

进一步的,所述修改模块502,包括:第三文件修改单元5028和层修改单元5029,其中,

所述第三文件修改单元5028,用于将所述第六镜像层的父子层关系修改为所述第五镜像层;

所述层修改单元5029,用于将所述第五镜像层和父子层关系修改后的第六镜像层保存到所述待修改的镜像层从而得到修改后的镜像层,所述修改后的镜像层包括:所述第五镜像层和父子层关系修改后的第六镜像层。

在本发明的一些实施例中,所述第三文件修改单元5028,还用于在所述第五镜像层中增加镜像文件和配置信息文件;将所述第五镜像层的配置信息文件中的父子层关系配置为所述容器中位于所述第六镜像层之下且与所述第六镜像层相邻的第七镜像层。

需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实 施例相同,具体内容可参见本发明前述所示的方法实施例中的叙述,此处不再赘述。

通过前述实施例对本发明的描述说明可知,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第一镜像层,将修改后的第一镜像文件通过修改后的第一镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。

接下来介绍本发明实施例提供的另一种镜像文件的修改装置,请参阅图6所示,镜像文件的修改装置600包括:

接收器601、发射器602、处理器603和存储器604(其中镜像文件的修改装置600中的处理器603的数量可以一个或多个,图6中以一个处理器为例)。在本发明的一些实施例中,接收器601、发射器602、处理器603和存储器604可通过总线或其它方式连接,其中,图6中以通过总线连接为例。

存储器604可以包括只读存储器和随机存取存储器,并向处理器603提供指令和数据。存储器604的一部分还可以包括非易失性随机存取存储器(英文全称:non-volatilerandomaccessmemory,英文缩写:nvram)。存储器604存储有操作系统和操作指令、可执行模块或者数据结构,或者它们的子集,或者它们的扩展集,其中,操作指令可包括各种操作指令,用于实现各种操作。操作系统可包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。

处理器603控制镜像文件的修改装置的操作,处理器603还可以称为中央处理单元(英文全称:centralprocessingunit,英文简称:cpu)。具体的应用中,镜像文件的修改装置的各个组件通过总线系统耦合在一起,其中总线系统除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都称为总线系统。

上述本发明实施例揭示的方法可以应用于处理器603中,或者由处理器603实现。处理器603可以是一种集成电路芯片,具有信号的处理能力。在实 现过程中,上述方法的各步骤可以通过处理器603中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器603可以是通用处理器、数字信号处理器(英文全称:digitalsignalprocessing,英文缩写:dsp)、专用集成电路(英文全称:applicationspecificintegratedcircuit,英文缩写:asic)、现成可编程门阵列(英文全称:field-programmablegatearray,英文缩写:fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器604,处理器603读取存储器604中的信息,结合其硬件完成上述方法的步骤。

本发明实施例中,处理器603用于执行前述任意方法实施例中描述的镜像文件的修改方法。

通过前述实施例对本发明的描述说明可知,由于本发明实施例中采用从容器中对镜像层导出的方式获取到第一镜像层,将修改后的第一镜像文件通过修改后的第一镜像层导入到容器中,从而可以实现对容器中镜像文件的修改,避免通过新增加层的方式来修改镜像文件,从而不会产生冗余文件和冗余层。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本 发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1