CN111045783B - 生成容器镜像的方法、装置、存储介质及电子设备 - Google Patents
生成容器镜像的方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111045783B CN111045783B CN201911143586.6A CN201911143586A CN111045783B CN 111045783 B CN111045783 B CN 111045783B CN 201911143586 A CN201911143586 A CN 201911143586A CN 111045783 B CN111045783 B CN 111045783B
- Authority
- CN
- China
- Prior art keywords
- container
- image
- mirror
- layer
- mirror 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000004590 computer program Methods 0.000 claims description 14
- 238000012986 modification Methods 0.000 description 12
- 230000004048 modification Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
-
- 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
-
- 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
Abstract
本公开涉及一种生成容器镜像的方法、装置、存储介质及电子设备,以解决相关技术中无法合并容器镜像的问题。该方法包括:加载第一容器镜像和第二容器镜像,其中,第一容器镜像和第二容器镜像中的数据是通过层级结构进行存储的,第一容器镜像为本地容器镜像;以第一容器镜像为参照,确定第二容器镜像与第一容器镜像之间的差异镜像层;生成差异镜像层对应的dockerfile命令,并将dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,初始dockerfile文件为第一容器镜像对应的dockerfile文件;根据目标dockerfile文件,生成容器镜像。
Description
技术领域
本公开涉及计算机技术领域,具体地,涉及一种生成容器镜像的方法、装置、存储介质及电子设备。
背景技术
在Docker中,容器是一个标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境可靠快速地运行到另一个计算环境。容器镜像是一个轻量的独立的可执行的软件包,包含应用程序运行时所需的各种资源,比如代码、运行时间、系统工具、系统库和设置等等。为了使用便利性和运维便利性等各种考虑,需要在单一容器下运行原有两个容器运行的应用程序,因此需要对原有两个容器的容器镜像进行合并。
现有技术主要是通过合并容器镜像分别对应的dockerfile文件实现容器镜像的合并。但是,待合并的容器镜像可能来自于公网镜像仓库或来自于其他镜像制作人,以至于可能无法获取到该待合并容器镜像的完整dockerfile文件,从而无法将该待合并容器镜像与原有本地容器镜像进行合并。
发明内容
本公开的目的是提供一种生成容器镜像的方法、装置、存储介质及电子设备,以解决相关技术中无法合并容器镜像的问题。
为了实现上述目的,第一方面,本公开提供一种生成容器镜像的方法,所述方法包括:
加载第一容器镜像和第二容器镜像,其中,所述第一容器镜像和所述第二容器镜像中的数据是通过层级结构进行存储的,所述第一容器镜像为本地容器镜像;
以所述第一容器镜像为参照,确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层;
生成所述差异镜像层对应的dockerfile命令,并将所述dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,所述初始dockerfile文件为所述第一容器镜像对应的dockerfile文件;
根据所述目标dockerfile文件,生成容器镜像。
可选地,在确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层之前,所述方法还包括:
确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
可选地,所述确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层,包括:
确定所述第一容器镜像与所述第二容器镜像之间的同源镜像层;
确定所述第一容器镜像中除所述同源镜像层外的第一差异镜像层,并确定所述第二容器镜像中除所述同源镜像层外的第二差异镜像层;
若所述第一差异镜像层与所述第二差异镜像层不存在相同的镜像层,则确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
可选地,所述方法还包括:
确定所述第一容器镜像或所述第二容器镜像中是否存在针对同一数据文件进行数据操作的多个镜像层;
若所述第一容器镜像或所述第二容器镜像中存在针对同一文件进行数据操作的多个镜像层,则在所述多个镜像层中确定生成时间最晚的目标镜像层,并将所述目标镜像层对应的数据操作确定为针对所述数据文件的数据操作。
可选地,所述加载第一容器镜像和第二容器镜像,包括:
获取所述第二容器镜像的dockerfile文件;
若获取到的所述dockerfile文件不是所述第二容器镜像的完整dockerfile文件,则加载所述第一容器镜像和所述第二容器镜像。
第二方面,本公开还提供一种生成容器镜像的装置,所述装置包括:
加载模块,用于加载第一容器镜像和第二容器镜像,其中,所述第一容器镜像和所述第二容器镜像中的数据是通过层级结构进行存储的,所述第一容器镜像为本地容器镜像;
第一确定模块,用于以所述第一容器镜像为参照,确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层;
第一生成模块,用于生成所述差异镜像层对应的dockerfile命令,并将所述dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,所述初始dockerfile文件为所述第一容器镜像对应的dockerfile文件;
第二生成模块,用于根据所述目标dockerfile文件,生成容器镜像。
可选地,所述装置还包括:
第二确定模块,用于在确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层之前,确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
可选地,所述第二确定模块用于:
确定所述第一容器镜像与所述第二容器镜像之间的同源镜像层;
确定所述第一容器镜像中除所述同源镜像层外的第一差异镜像层,并确定所述第二容器镜像中除所述同源镜像层外的第二差异镜像层;
若所述第一差异镜像层与所述第二差异镜像层不存在相同的镜像层,则确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
第三方面,本公开还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述方法的步骤。
第四方面,本公开还提供一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现第一方面中任一项所述方法的步骤。
通过上述技术方案,可以加载第一容器镜像和第二容器镜像,然后以第一容器镜像为参照,确定第二容器镜像与第一容器镜像之间的差异镜像层。接着,生成该差异镜像层对应的dockerfile命令,并将该dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,其中,初始dockerfile文件是第一容器镜像对应的dockerfile文件,从而在该初始dockerfile文件结合上述生成的dockerfile命令,可以得到完整的dockerfile文件。也即是说,本公开中生成容器镜像的方法可以从容器镜像切入,对两个容器镜像之间的差异镜像层进行反向工程,生成对应的dockerfile命令,再结合两个容器镜像中本地容器镜像的dockerfile文件,可以获取到用于合并容器镜像的完整dockerfile文件,克服了相关技术中无法合并容器镜像的问题。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是相关技术中合并容器镜像的过程示意图;
图2是根据本公开一示例性实施例示出的一种生成容器镜像的方法的流程图;
图3是根据本公开一示例性实施例示出的一种生成容器镜像的方法中第一容器镜像和第二容器镜像的层级结构示意图;
图4是根据本公开一示例性实施例示出的一种生成容器镜像的方法的流程图;
图5是根据本公开一示例性实施例示出的一种生成容器镜像的装置的框图;
图6是根据本公开一示例性实施例示出的一种电子设备的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
在Docker中,容器是一个标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境可靠快速地运行到另一个计算环境。容器镜像是一个轻量的独立的可执行的软件包,包含应用程序运行时所需的各种资源,比如代码、运行时间、系统工具、系统库和设置等等。为了使用便利性和运维便利性等各种考虑,需要在单一容器下运行原有两个容器运行的应用程序,因此需要对原有两个容器的容器镜像进行合并。
dockerfile文件包括用于生成容器镜像的dockerfile命令,通过读取dockerfile文件中的命令可以自动生成容器镜像,因此,相关技术主要是通过合并容器镜像分别对应的dockerfile文件实现容器镜像的合并。具体的,参照图1,相关技术在合并两个容器镜像时,是先分别获取容器镜像A和容器镜像B,然后确定容器镜像A对应的dockerfile文件A、以及容器镜像B对应的dockerfile文件B。接着,合并dockerfile文件A和dockerfile文件B,得到dockerfile文件A_B。最后,基于合并后的dockerfile文件A_B制作新的容器镜像。
但是,相关技术中,待合并的容器镜像可能来自于公网镜像仓库或来自于其他镜像制作人,以至于可能无法获取到该待合并容器镜像的完整dockerfile文件,从而无法将该待合并容器镜像与本地容器镜像进行合并。比如,上述容器镜像A为本地容器镜像,容器镜像B为来自于公网镜像仓库的容器镜像,那么在按照相关技术中对容器镜像A和容器镜像B进行合并时,可能由于无法获取到容器镜像B的完整dockerfile文件而导致无法对容器镜像A和容器镜像B进行合并。
有鉴于此,本公开实施例提供一种生成容器镜像的方法、装置、存储介质及电子设备,以解决相关技术中无法合并容器镜像的问题。
图2是根据本公开一示例性实施例示出的一种生成容器镜像的方法的流程图。参照图2,该方法可以包括以下步骤:
步骤S201,加载第一容器镜像和第二容器镜像。其中,第一容器镜像和第二容器镜像中的文件是通过层级结构进行存储的,第一容器镜像为本地容器镜像。
在Docker中,每运行一个dockerfile命令会创建一个镜像层,后运行的dockerfile命令对应的镜像层可以叠加在先运行的dockerfile命令对应的镜像层上,类似于叠积木的过程,最终形成层级结构。因此,第一容器镜像和第二容器镜像可以分别包括多个镜像层,每个镜像层对应一个dockerfile命令。
示例地,可以通过Docker中加载容器镜像的控制命令加载第一容器镜像和第二容器镜像,进一步的过程与相关技术类似,这里不再赘述。在加载第一容器镜像和第二容器镜像之后,由于第一容器镜像为本地容器镜像,因此可以从本地获取到第一容器镜像的完整dockerfile文件,从而可以根据该完整dockerfile文件进行后续容器镜像的合并。
步骤S202,以第一容器镜像为参照,确定第二容器镜像与第一容器镜像之间的差异镜像层。
容器镜像中各镜像层对应不同的dockerfile命令,而通过dockerfile命令可以自动生成容器镜像,因此在本公开实施例中可以在加载容器镜像之后,确定第一容器镜像与第二容器镜像之间的差异镜像层,该差异镜像层可以用于表征第一容器镜像与第二容器镜像包括的dockerfile命令的差异,从而结合本地容器镜像的dockerfile文件可以得到用于合并容器镜像的完整dockerfile文件。
示例地,确定第二容器镜像与第一容器镜像之间的差异镜像层可以是:将第一容器镜像作为参照,然后将第二容器镜像的各镜像层与第一容器镜像的各镜像层进行逐一比对,比如可以将第二容器镜像与第一容器镜像中各镜像层包括的dockerfile命令进行逐一比对,或者如果预先设定镜像层的层ID相同则镜像层对应的dockerfile命令相同,那么还可以将第二容器镜像与第一容器镜像中各镜像层的层ID进行逐一比对,等等,本公开实施例对此不作限定。最后,将第二容器镜像中存在但第一容器镜像中不存在的所有镜像层作为差异镜像层。例如,预先设定镜像层的层ID相同则镜像层对应的dockerfile命令相同,且第一容器镜像与第二容器镜像的各镜像层如图3所示,以第一容器镜像为参照进行比对,镜像层ID为8a8b8c6、8a8b8c7和8a8b8c8的镜像层只存在于第二容器镜像中,那么可以确定第二容器镜像与第一容器镜像之间的差异镜像层为层ID为8a8b8c6、8a8b8c7和8a8b8c8的镜像层。
步骤S203,生成差异镜像层对应的dockerfile命令,并将该dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件。其中,初始dockerfile文件为第一容器镜像对应的dockerfile文件。
示例地,由于第一容器镜像为本地容器镜像,因此可以获取到第一容器镜像的完整dockerfile文件作为初始dockerfile文件。然后,在得到第一容器镜像与第二容器镜像之间的差异镜像层之后,可以通过将该差异镜像层导入到docker运行环境中运行dockerhistory命令生成该差异镜像层对应的dockerfile命令。最后,可以将该dockerfile命令添加到第一容器镜像的dockerfile文件(初始dockerfile文件)中,得到用于合并第一容器镜像和第二容器镜像的目标dockerfile文件。
步骤S204,根据目标dockerfile文件,生成容器镜像。应当理解的是,根据目标dockerfile文件,生成容器镜像的过程与相关技术中类似,这里不再赘述。
通过上述方式,可以从容器镜像切入,对两个容器镜像之间的差异镜像层进行反向工程,生成对应的dockerfile命令,再结合两个容器镜像中本地容器镜像的dockerfile文件,可以获取到用于合并容器镜像的完整dockerfile文件,克服了相关技术中无法合并容器镜像的问题。
另外,由于容器镜像的元数据信息,比如环境变量,是存储在dockerfile文件中,而不是存储在镜像层文件中,因此,如果只合并镜像层文件以实现容器镜像的合并,合并后的容器镜像会没有对应的元数据信息,从而可能导致合并后的容器镜像无法正常运行。而通过本公开中结合镜像层文件和dockerfile文件的方式进行容器镜像的合并,还可以克服上述问题,使得合并后的容器镜像包括元数据信息,保证了合并后容器镜像的功能完整性。
为了使本领域技术人员更加理解本公开中生成容器镜像的方法,下面对上述各步骤进行详细举例说明。
在一种可能的方式中,步骤S201可以是先获取第二容器镜像的dockerfile文件。若获取到的dockerfile文件不是第二容器镜像的完整dockerfile文件,则加载第一容器镜像和所述第二容器镜像。
也即是说,在本公开实施例中,可以先检测是否可以获取到第二容器镜像的完整dockerfile文件,如果不能获取到第二容器镜像的完整dockerfile文件,则可以通过本公开中的方法对第一容器镜像和第二容器镜像进行合并。反之,如果获取到第二容器镜像的完整dockerfile文件,则可以通过相关技术中的方法对第一容器镜像和第二容器镜像进行合并。
当然,在具体实施的过程中,还可以根据用户的选择进行容器镜像的合并操作。比如用户选择均通过本公开的方法进行容器镜像的合并,那么步骤S201可以直接加载第一容器镜像和第二容器镜像。或者,用户选择根据不同的情况进行容器镜像的合并,那么步骤S201可以先检测是否可以获取到第二容器镜像的完整dockerfile文件,然后按照上述方式根据检测结果进行不同的操作,等等,本公开实施例对此不作限定。
在一种可能的方式中,在步骤S202确定第一容器镜像与第二容器镜像之间的差异镜像层之前,还可以确定第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层。
如果第一容器镜像和第二容器镜像有修改同样文件系统的操作,即第一容器镜像与第二容器镜像之间存在文件修改冲突,那么将这两个容器镜像合并后,则无法确定应该以哪一个容器进行的文件修改操作为准,从而降低了合并后的容器镜像的可用性。因此,在本公开实施例中,在合并第一容器镜像和第二容器镜像之前,为了提高合并后容器镜像的可用性,可以先对第一容器镜像与第二容器镜像进行冲突检测,以确定第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层。
在一种可能的方式中,可以先确定第一容器镜像与第二容器镜像之间的同源镜像层,然后确定第一容器镜像中除同源镜像层外的第一差异镜像层,并确定第二容器镜像中除同源镜像层外的第二差异镜像层。若第一差异镜像层与第二差异镜像层不存在相同的镜像层,则确定第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层。
示例地,同源镜像层可以是不同容器镜像中层ID相同的镜像层。也即是说,如果两个镜像层的层ID相同,那么可以认为这两个镜像层是同源镜像层。例如,参照图3,镜像层ID为8a8b8c1的镜像层同时出现在第一容器镜像和第二容器镜像,那么可以确定第一容器镜像中层ID为8a8b8c1的镜像层与第二容器镜像中层ID为8a8b8c1的镜像层为同源镜像层。同样地,镜像层ID为8a8b8c2的镜像层同时出现在第一容器镜像和第二容器镜像,那么可以确定第一容器镜像中层ID为8a8b8c2的镜像层与第二容器镜像中层ID为8a8b8c2的镜像层为同源镜像层。
在本公开实施例中,可以将第一容器镜像与第二容器镜像的各镜像层的层ID逐一进行比对,确定第一容器镜像与第二容器进行的同源镜像层。然后,在第一容器镜像中确定除同源镜像层外的第一差异镜像层,并在第二容器镜像中确定除同源镜像层外的第二差异镜像层。例如,参照图3,同源镜像层为层ID为8a8b8c1和8a8b8c2的镜像层,那么第一容器镜像中除同源镜像层外的第一差异镜像层可以包括层ID为8a8b8c3、8a8b8c4和8a8b8c5的镜像层,第二容器镜像中除同源镜像层外的第二差异镜像层可以包括层ID为8a8b8c6、8a8b8c7和8a8b8c8的镜像层。
在确定第一差异镜像层和第二差异镜像层后,可以确定第一差异镜像层与第二差异镜像层中是否存在相同的镜像层。若第一差异镜像层与第二差异镜像层不存在相同的镜像层,则说明第一容器镜像和第二容器镜像中不存在dockerfile命令相同的镜像层,从而可以确定第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层。
反之,如果第一差异镜像层与第二差异镜像层存在相同的镜像层,则说明第一容器镜像和第二容器镜像中存在dockerfile命令相同的镜像层,那么第一容器镜像中可能存在与第二容器镜像针对同一数据文件进行数据操作的镜像层,如果将第一容器镜像和第二容器镜像进行合并,合并后容器镜像的可用性可能不高,因此可以停止合并容器镜像的过程。
通过上述方式,在合并第一容器镜像和第二容器镜像之前,可以对第一容器镜像和第二容器镜像进行冲突检测,如果第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层,则合并第一容器镜像和第二容器镜像,从而保证合并后容器镜像的可用性。
在其他可能的情况下,单容器镜像的各镜像层之间也可能存在文件修改冲突,即单容器镜像内可能存在针对同一数据文件进行数据操作的多个镜像层。在此种情况下,为了提高合并容器镜像的效率,可以先在单容器镜像内部消除此种文件修改冲突。具体地,可以先确定第一容器镜像或第二容器镜像中是否存在针对同一数据文件进行数据操作的多个镜像层。若第一容器镜像或第二容器镜像中存在针对同一文件进行数据操作的多个镜像层,则在多个镜像层中确定生成时间最晚的目标镜像层,并将目标镜像层对应的数据操作确定为针对该数据文件的数据操作。
在前文中已说明,在Docker中,每运行一个dockerfile命令会创建一个镜像层,后运行的dockerfile命令对应的镜像层可以叠加在先运行的dockerfile命令对应的镜像层上,类似于叠积木的过程,最终形成层级结构。因此,生成时间较晚的目标镜像层可以是该层级结构中的高层,那么按照上述方式,当单容器镜像出现文件修改冲突时,高层的镜像层可以覆盖低层的镜像层。也即是说,在本公开实施例中,当单容器镜像出现文件修改冲突时,可以将高层的镜像层对应的数据操作确定为针对数据文件的数据操作。例如,在第一容器镜像中,层ID为8a8b8c4和8a8b8c5的镜像层对应的dockerfile命令均是针对run.sh文件的修改,则以层ID为8a8b8c5的镜像层修改后的run.sh文件为准。
应当理解的是,如果第一容器镜像或第二容器镜像中不存在针对同一文件进行数据操作的多个镜像层,则说明单容器镜像内的各镜像层之间不存在文件修改冲突,因此可以继续执行后续容器镜像的合并过程。
通过上述方式,可以检测容器镜像内的文件修改冲突,并在合并容器镜像之前通过高层镜像层覆盖底层镜像的方式消除此种文件修改冲突,提高合并容器镜像的效率,保证合并后容器镜像的可用性。
下面通过另一示例性实施例对本公开中生成容器镜像的方法进行说明。参照图4,该方法可以包括以下步骤:
步骤S401,加载第一容器镜像和第二容器镜像。其中,第一容器镜像为本地容器镜像。
步骤S402,确定第一容器镜像或第二容器镜像中是否存在针对同一数据文件进行数据操作的多个镜像层,如果是,则进入步骤S403,否则进入步骤S404。
步骤S403,在多个镜像层中确定生成时间最晚的目标镜像层,并将目标镜像层对应的数据操作确定为针对数据文件的数据操作。
步骤S404,确定第一容器镜像与第二容器镜像之间的同源镜像层。
步骤S405,确定第一容器镜像中除同源镜像层外的第一差异镜像层,并确定第二容器镜像中除同源镜像层外的第二差异镜像层。
步骤S406,确定第一差异镜像层与第二差异镜像层是否存在相同的镜像层,如果是,则结束生成容器镜像的过程,否则进入步骤S407。
步骤S407,确定第一容器镜像中不存在与第二容器镜像针对同一数据文件进行数据操作的镜像层。
步骤S408,以第一容器镜像为参照,确定第二容器镜像与第一容器镜像之间的差异镜像层。
步骤S409,生成差异镜像层对应的dockerfile命令,并将dockerfile命令添加到第一容器镜像对应的dockerfile文件中,得到目标dockerfile文件。
步骤S410,根据目标dockerfile文件,生成容器镜像。
上述各步骤的具体实施方式已在上文进行详细举例说明,这里不再赘述。另外应当理解的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受上文所描述的动作顺序的限制。其次,本领域技术人员也应该知悉,上文所描述的实施例属于优选实施例,所涉及的步骤并不一定是本公开所必须的。
通过上述方式,可以从容器镜像切入,对两个容器镜像之间的差异镜像层进行反向工程,生成对应的dockerfile命令,再结合两个容器镜像中本地容器镜像的dockerfile文件,可以获取到用于合并容器镜像的完整dockerfile文件,克服了相关技术中无法合并容器镜像的问题。并且,通过结合镜像层文件和dockerfile文件的方式,使得合并后的容器镜像包括容器镜像的元数据信息,保证了合并后容器镜像的功能完整性。
基于同一发明构思,参照图5,本公开实施例还提供一种生成容器镜像的装置500。该装置可以通过软件、硬件或两者结合的方式成为电子设备的部分或全部。参照图5,该装置500可以包括:
加载模块501,用于加载第一容器镜像和第二容器镜像,其中,所述第一容器镜像和所述第二容器镜像中的文件是通过层级结构进行存储的,所述第一容器镜像为本地容器镜像;
第一确定模块502,用于确定所述第一容器镜像与所述第二容器镜像之间的差异镜像层;
第一生成模块503,用于生成所述差异镜像层对应的dockerfile命令,并将所述dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,所述初始dockerfile文件为所述第一容器镜像对应的dockerfile文件;
第二生成模块504,用于根据所述目标dockerfile文件,生成容器镜像。
可选地,所述装置500还包括:
第二确定模块,用于在将所述第一容器镜像的各镜像层与所述第二容器镜像的各镜像层进行比对,得到所述第一容器镜像与所述第二容器镜像之间的差异镜像层之前,确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
可选地,所述第二确定模块用于:
确定所述第一容器镜像与所述第二容器镜像之间的同源镜像层;
确定所述第一容器镜像中除所述同源镜像层外的第一差异镜像层,并确定所述第二容器镜像中除所述同源镜像层外的第二差异镜像层;
若所述第一差异镜像层与所述第二差异镜像层不存在相同的镜像层,则确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
可选地,所述装置500还包括:
第三确定模块,用于确定所述第一容器镜像或所述第二容器镜像中是否存在针对同一数据文件进行数据操作的多个镜像层;
第四确定模块,用于当所述第一容器镜像或所述第二容器镜像中存在针对同一文件进行数据操作的多个镜像层时,在所述多个镜像层中确定生成时间最晚的目标镜像层,并将所述目标镜像层对应的数据操作确定为针对所述数据文件的数据操作。
可选地,所述加载模块501用于:
获取所述第二容器镜像的dockerfile文件;
若获取到的所述dockerfile文件不是所述第二容器镜像的完整dockerfile文件,则加载所述第一容器镜像和所述第二容器镜像。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
通过上述任一装置,可以从容器镜像切入,对两个容器镜像之间的差异镜像层进行反向工程,生成对应的dockerfile命令,再结合两个容器镜像中本地容器镜像的dockerfile文件,可以获取到用于合并容器镜像的完整dockerfile文件,克服了相关技术中无法合并容器镜像的问题。
基于同一发明构思,本公开实施例还提供一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现上述任一生成容器镜像的方法的步骤。
在可能的方式中,该电子设备的框图可以如图6所示。参照图6,电子设备600可以被提供为一服务器,可以包括处理器622,其数量可以为一个或多个,以及存储器632,用于存储可由处理器622执行的计算机程序。存储器632中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器622可以被配置为执行该计算机程序,以执行上述的生成容器镜像的方法。
另外,电子设备600还可以包括电源组件626和通信组件650,该电源组件626可以被配置为执行电子设备600的电源管理,该通信组件650可以被配置为实现电子设备600的通信,例如,有线或无线通信。此外,该电子设备600还可以包括输入/输出(I/O)接口658。电子设备600可以操作基于存储在存储器632的操作系统,例如Windows ServerTM,Mac OSXTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的生成容器镜像的方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器632,上述程序指令可由电子设备600的处理器622执行以完成上述的生成容器镜像的方法。
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的生成容器镜像的方法的代码部分。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
Claims (10)
1.一种生成容器镜像的方法,其特征在于,所述方法包括:
加载第一容器镜像和第二容器镜像,其中,所述第一容器镜像和所述第二容器镜像中的数据是通过层级结构进行存储的,所述第一容器镜像为本地容器镜像;
以所述第一容器镜像为参照,确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层,所述差异镜像层用于表征所述第二容器镜像中存在但所述第一容器镜像中不存在的所有镜像层;
生成所述差异镜像层对应的dockerfile命令,并将所述dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,所述初始dockerfile文件为所述第一容器镜像对应的dockerfile文件;
根据所述目标dockerfile文件,生成容器镜像。
2.根据权利要求1所述的方法,其特征在于,在确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层之前,所述方法还包括:
确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
3.根据权利要求2所述的方法,其特征在于,所述确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层,包括:
确定所述第一容器镜像与所述第二容器镜像之间的同源镜像层;
确定所述第一容器镜像中除所述同源镜像层外的第一差异镜像层,并确定所述第二容器镜像中除所述同源镜像层外的第二差异镜像层;
若所述第一差异镜像层与所述第二差异镜像层不存在相同的镜像层,则确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
4.根据权利要求1-3任一所述的方法,其特征在于,所述方法还包括:
确定所述第一容器镜像或所述第二容器镜像中是否存在针对同一数据文件进行数据操作的多个镜像层;
若所述第一容器镜像或所述第二容器镜像中存在针对同一文件进行数据操作的多个镜像层,则在所述多个镜像层中确定生成时间最晚的目标镜像层,并将所述目标镜像层对应的数据操作确定为针对所述数据文件的数据操作。
5.根据权利要求1-3任一所述的方法,其特征在于,所述加载第一容器镜像和第二容器镜像,包括:
获取所述第二容器镜像的dockerfile文件;
若获取到的所述dockerfile文件不是所述第二容器镜像的完整dockerfile文件,则加载所述第一容器镜像和所述第二容器镜像。
6.一种生成容器镜像的装置,其特征在于,所述装置包括:
加载模块,用于加载第一容器镜像和第二容器镜像,其中,所述第一容器镜像和所述第二容器镜像中的数据是通过层级结构进行存储的,所述第一容器镜像为本地容器镜像;
第一确定模块,用于以所述第一容器镜像为参照,确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层,所述差异镜像层用于表征所述第二容器镜像中存在但所述第一容器镜像中不存在的所有镜像层;
第一生成模块,用于生成所述差异镜像层对应的dockerfile命令,并将所述dockerfile命令添加到初始dockerfile文件中,得到目标dockerfile文件,所述初始dockerfile文件为所述第一容器镜像对应的dockerfile文件;
第二生成模块,用于根据所述目标dockerfile文件,生成容器镜像。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于在确定所述第二容器镜像与所述第一容器镜像之间的差异镜像层之前,确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
8.根据权利要求7所述的装置,其特征在于,所述第二确定模块用于:
确定所述第一容器镜像与所述第二容器镜像之间的同源镜像层;
确定所述第一容器镜像中除所述同源镜像层外的第一差异镜像层,并确定所述第二容器镜像中除所述同源镜像层外的第二差异镜像层;
若所述第一差异镜像层与所述第二差异镜像层不存在相同的镜像层,则确定所述第一容器镜像中不存在与所述第二容器镜像针对同一数据文件进行数据操作的镜像层。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-5中任一项所述方法的步骤。
10.一种电子设备,其特征在于,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现权利要求1-5中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911143586.6A CN111045783B (zh) | 2019-11-20 | 2019-11-20 | 生成容器镜像的方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911143586.6A CN111045783B (zh) | 2019-11-20 | 2019-11-20 | 生成容器镜像的方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111045783A CN111045783A (zh) | 2020-04-21 |
CN111045783B true CN111045783B (zh) | 2023-12-15 |
Family
ID=70232805
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911143586.6A Active CN111045783B (zh) | 2019-11-20 | 2019-11-20 | 生成容器镜像的方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111045783B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112269738B (zh) * | 2020-10-26 | 2023-04-07 | 杭州光通天下网络科技有限公司 | Ctf靶场调试方法、装置、电子设备及介质 |
CN112799711B (zh) * | 2021-01-29 | 2022-04-05 | 广州文远知行科技有限公司 | 合并容器镜像的方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227579A (zh) * | 2016-07-12 | 2016-12-14 | 深圳市中润四方信息技术有限公司 | 一种Docker容器构建方法及Docker管理控制台 |
CN106528224A (zh) * | 2016-11-03 | 2017-03-22 | 腾讯科技(深圳)有限公司 | 一种Docker容器的内容更新方法、服务器及系统 |
CN106886455B (zh) * | 2017-02-23 | 2019-02-22 | 北京图森未来科技有限公司 | 一种实现用户隔离的方法及系统 |
CN110019013A (zh) * | 2017-12-08 | 2019-07-16 | 中国电信股份有限公司 | 镜像存储方法、装置和计算机可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10303657B2 (en) * | 2016-09-30 | 2019-05-28 | International Business Machines Corporation | Docker layer deduplication with layer referencing |
-
2019
- 2019-11-20 CN CN201911143586.6A patent/CN111045783B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227579A (zh) * | 2016-07-12 | 2016-12-14 | 深圳市中润四方信息技术有限公司 | 一种Docker容器构建方法及Docker管理控制台 |
CN106528224A (zh) * | 2016-11-03 | 2017-03-22 | 腾讯科技(深圳)有限公司 | 一种Docker容器的内容更新方法、服务器及系统 |
CN106886455B (zh) * | 2017-02-23 | 2019-02-22 | 北京图森未来科技有限公司 | 一种实现用户隔离的方法及系统 |
CN110019013A (zh) * | 2017-12-08 | 2019-07-16 | 中国电信股份有限公司 | 镜像存储方法、装置和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111045783A (zh) | 2020-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10936293B2 (en) | Container image layer reordering | |
RU2725760C1 (ru) | Способ и устройство определения состояния базы данных и способ и устройство верификации согласованности | |
CN108768728B (zh) | 运维任务处理方法、装置、计算机设备和存储介质 | |
JP6198939B2 (ja) | ドライバをロードする方法及び組み込みデバイス | |
CN106886434B (zh) | 一种分布式应用安装方法与装置 | |
US10083030B1 (en) | Asynchronous dependency resolution | |
CN111045783B (zh) | 生成容器镜像的方法、装置、存储介质及电子设备 | |
US8806510B2 (en) | Determining operator partitioning constraint feasibility | |
US20220109605A1 (en) | Implementing Affinity and Anti-Affinity with Kubernetes | |
US8515942B2 (en) | System and method for generating dynamic queries | |
CN110955715A (zh) | Erp系统和目标平台的数据转换方法、装置以及电子设备 | |
US20120159515A1 (en) | Sharing object representations | |
US11271895B1 (en) | Implementing advanced networking capabilities using helm charts | |
CN112395039A (zh) | 一种Kubernetes集群的管理方法和装置 | |
CN115658237A (zh) | 一种容器应用自动部署方法、设备、装置、设备及介质 | |
CN113672353B (zh) | 一种基于容器的任务执行方法及装置 | |
CN111666088A (zh) | Pod的更替方法、装置、电子设备及计算机可读存储介质 | |
CN104517067A (zh) | 访问数据的方法、装置及系统 | |
CN104252413A (zh) | 一种自动化脚本生成方法、装置及系统 | |
CN112540805B (zh) | 集成项目打包方法、装置、设备、存储介质以及程序产品 | |
CN111552494B (zh) | 一种容器组的管理方法、设备、系统及介质 | |
CN115115062B (zh) | 机器学习模型建立方法、相关装置及计算机程序产品 | |
CN113051245A (zh) | 用于迁移数据的方法、装置及系统 | |
US20170185325A1 (en) | Allocating storage in a distributed storage system | |
US9218165B2 (en) | System and method for an object instance acquirer |
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 |