本发明涉及计算机,尤其涉及一种容器镜像构建方法、设备和存储介质。
背景技术:
1、随着容器技术的普及,容器镜像成为了应用程序部署的主要手段。docker是一种可以将应用程序代码以及运行环境打包成容器镜像的工具,运行环境中可以包括应用程序的各种依赖项,比如依赖库/文件等。在构建出应用程序对应的容器镜像后,可以创建容器并在容器中运行该容器镜像,从而实现应用程序的部署。
2、一般地,创建容器镜像的过程包括:开发人员编写dockerfile,之后通过dockerbuild(容器构建)指令来进行容器镜像的构建,之后通过docker run(容器运行)指令来运行容器镜像。其中,dockerfile是一个文本文件,包含了构建容器镜像所需的所有指令,比如:用于指定基础镜像的from指令、用于复制信息的copy指令、用于为容器镜像指定默认执行命令的cmd指令、用于设置环境变量的env指令、用于添加信息的add指令等。dockerfile中的每条指令的执行都会在容器镜像中增加一个镜像层,一个容器镜像的镜像层层数越多,容器镜像的体积将越大,占用的存储空间就会越多,运行时所需的资源也会越多。
3、实际应用中,由开发人员凭借经验来编写的dockerfile中,无法避免的会由于人为理解不全面、不准确等原因,导致dockerfile中存在对相同数据进行重复加载的指令,进而导致基于dockerfile构建的容器镜像体积较大。比如:一个应用程序构建项目中包含应用程序a和应用程序b这两个应用程序,且这两个应用程序可能都会对同一个函数库有依赖,那么在dockerfile中,可能针对应用程序a的依赖关系文件进行加载时,会存在加载该函数库的指令,针对应用程序b,还会存在加载该函数库的指令,导致这个函数库被重复加载,最终使得该项目对应的容器镜像体积变大。
技术实现思路
1、本发明实施例提供一种容器镜像构建方法、设备和存储介质,用以减小容器镜像体积。
2、第一方面,本发明实施例提供一种容器镜像构建方法,所述方法包括:
3、确定应用程序对应的总依赖关系图,所述总依赖关系图用于反映所述应用程序所依赖的多个模块以及所述多个模块之间的依赖关系;
4、确定所述总依赖关系图对应的多条依赖关系路径,其中,每条依赖关系路径中均包括所述总依赖关系图中的各模块;
5、确定所述多条依赖关系路径对应的多个容器镜像构建计划,以及所述多个容器镜像构建计划分别对应的镜像层数,每个容器镜像构建计划均为多阶段构建计划;
6、从所述多个容器镜像构建计划中确定出目标容器镜像构建计划;
7、根据以所述目标容器镜像构建计划生成的dockerfile,生成所述应用程序对应的容器镜像。
8、第二方面,本发明实施例提供一种容器镜像构建装置,所述装置包括:
9、确定模块,用于确定应用程序对应的总依赖关系图,所述总依赖关系图用于反映所述应用程序所依赖的多个模块以及所述多个模块之间的依赖关系;确定所述总依赖关系图对应的多条依赖关系路径,其中,每条依赖关系路径中均包括所述总依赖关系图中的各模块;确定所述多条依赖关系路径对应的多个容器镜像构建计划,以及多个容器镜像构建计划分别对应的镜像层数,每个容器镜像构建计划均为多阶段构建计划;从所述多个容器镜像构建计划中确定出目标容器镜像构建计划;
10、生成模块,用于根据以所述目标容器镜像构建计划生成的dockerfile,生成所述应用程序对应的容器镜像。
11、第三方面,本发明实施例提供一种电子设备,包括:存储器、处理器、通信接口;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器至少可以实现如第一方面所述的容器镜像构建方法。
12、第四方面,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现如第一方面所述的容器镜像构建方法。
13、第五方面,本发明实施例提供一种计算机程序产品,包括:计算机程序,当所述计算机程序被电子设备的处理器执行时,使所述处理器至少可以实现如第一方面所述的容器镜像构建方法。
14、本发明实施例提供的方案中,为某一应用程序构建容器镜像的过程包括:首先,确定应用程序对应的总依赖关系图,总依赖关系图用于反映应用程序所依赖的多个模块(也即多个依赖项,比如:文件、库、函数、组件等)以及多个模块之间的依赖关系;然后,确定总依赖关系图对应的多条依赖关系路径,其中,每条依赖关系路径中均包括总依赖关系图中的各模块;之后,确定多条依赖关系路径对应的多个容器镜像构建计划以及多个容器镜像构建计划分别对应的镜像层数,并从多个容器镜像构建计划中确定出目标容器镜像构建计划,其中,每个容器镜像构建计划均为多阶段构建计划,目标容器镜像构建计划为多个容器镜像构建计划中的一个;最后,根据以目标容器镜像构建计划生成的dockerfile,生成应用程序对应的容器镜像。
15、本方案中,通过应用程序对应的总依赖关系图对多个模块之间的依赖关系进行了简洁明了的表示,由于总依赖关系图中不存在相同的、冗余的模块,因此,基于总依赖关系图确定的多条依赖关系路径对应的多个容器镜像构建计划均不存在冗余的构建信息,从而基于本方案中的容器镜像构建计划构建容器镜像,能够有效避免由于数据的重复加载等原因导致的容器镜像体积较大。
1.一种容器镜像构建方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述目标容器镜像构建计划对应的镜像层数小于其他容器镜像构建计划对应的镜像层数。
3.根据权利要求1所述的方法,其特征在于,所述确定所述应用程序对应的总依赖关系图,包括:
4.根据权利要求3所述的方法,其特征在于,所述多个模块中包括所述应用程序的入口文件;所述确定所述多个模块各自对应的依赖关系图,包括:
5.根据权利要求3所述的方法,其特征在于,所述确定所述多个模块各自对应的依赖关系图,包括:
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求1所述的方法,其特征在于,所述确定所述多条依赖关系路径对应的多个容器镜像构建计划,包括:
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
9.根据权利要求1-8中任一项所述的方法,其特征在于,所述方法还包括:
10.一种电子设备,其特征在于,包括:存储器、处理器、通信接口;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1至9中任一项所述的容器镜像构建方法。
11.一种非暂时性机器可读存储介质,其特征在于,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至9中任一项所述的容器镜像构建方法。
12.一种计算机程序产品,其特征在于,包括:计算机程序,当所述计算机程序被电子设备的处理器执行时,使所述处理器执行如权利要求1至9中任一项所述的容器镜像构建方法。