一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

容器镜像更新方法、装置、存储介质及计算机设备与流程

2021-11-10 03:06:00 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种容器镜像更新方法、装置、存储介质及计算机设备。


背景技术:

2.目前,多数企业在日常工作中,都会用到docker registry搭建的私有镜像仓库或是类似aws ecr成熟的镜像管理系统来存取公共镜像,以供开发人员进行各种开发和任务训练。
3.由于开发人员的具体任务、模型训练的要求不同,在使用公共镜像时,开发人员一般会对公共镜像提出不同的环境配置、插件工具要求,镜像管理员根据这些要求更新公共镜像的版本,并发布到私有镜像仓库,开发人员获取到更新后的公共镜像后,可以利用该公共镜像来创建容器并测试使用效果。另外,开发人员还可以在现有的容器内配置docker环境,使用户可以在容器内调试环境后直接使用官方docker commit指令进行保存,从而达到更新镜像的效果。
4.然而,当前使用公共镜像来更新镜像时,由于从镜像管理者接收用户发送的环境配置、工具更新需求,到最后验证可行的周期很长,并且,一旦有用户对于某个公共镜像有新的配置需求,当该镜像被统一更新以后,就意味着其他同时在使用该镜像的用户,在下次用该镜像跑任务时,也得被动接受新增的环境、工具,这些内容有可能会影响他们原本的跑任务方式。而另一种通过在现有的容器内配置docker环境的方式进行镜像更新时,会把新增的所有内容打包成一层镜像层,导致新增的环境配置、插件工具不具备复用性。
5.由此可见,现有技术在更新镜像时,灵活度和自由度较低,无法满足用户的个性化需求,且新增的环境配置、插件工具不具备复用性,导致工作效率降低。


技术实现要素:

6.本发明的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中在更新镜像时,灵活度和自由度较低,无法满足用户的个性化需求,且新增的环境配置、插件工具不具备复用性,导致工作效率降低的技术缺陷。
7.本发明提供了一种容器镜像更新方法,所述方法包括:
8.接收容器镜像更新请求,所述容器镜像更新请求包括基础镜像标签和镜像补丁标识;
9.在镜像补丁库中提取与所述镜像补丁标识对应的镜像补丁,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像补丁,所述镜像补丁为依据用户需求对基础镜像中的插件工具和配置环境进行扩充的脚本文件;
10.在公共镜像库中提取与所述基础镜像标签对应的基础镜像;
11.根据所述镜像补丁对所述基础镜像进行更新,得到目标镜像。
12.可选地,所述接收容器镜像更新请求的步骤之前,还包括:
13.接收镜像补丁添加请求;
14.基于所述镜像补丁添加请求,搭建镜像补丁库。
15.可选地,所述镜像补丁库包括镜像补丁数据库和云存储系统;
16.其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像补丁云存储目录,所述云存储系统中存储有不同的镜像补丁;
17.所述在镜像补丁库中提取与所述镜像补丁标识对应的镜像补丁的步骤,包括:
18.在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像补丁云存储目录;
19.根据所述镜像补丁云存储目录提取所述云存储系统中的镜像补丁。
20.可选地,所述根据所述镜像补丁对所述基础镜像进行更新,得到目标镜像的步骤之前,还包括:
21.根据所述容器镜像更新请求创建初始镜像构建文本;
22.根据所述镜像补丁对所述基础镜像进行更新,得到目标镜像的步骤,包括:
23.在所述初始镜像构建文本中写入基础镜像获取指令和镜像补丁获取指令,形成目标镜像构建文本;
24.其中,所述基础镜像获取指令用于提取所述基础镜像标签对应的基础镜像,所述镜像补丁获取指令用于提取所述镜像补丁中扩充所述基础镜像的插件工具和配置环境;
25.根据所述目标镜像构建文本创建目标镜像。
26.可选地,所述根据所述目标镜像构建文本创建目标镜像的步骤,包括:
27.执行所述目标镜像构建文本中的所述基础镜像获取指令和所述镜像补丁获取指令,提取所述基础镜像标签对应的基础镜像,以及所述镜像补丁中扩充所述基础镜像的插件工具和配置环境;
28.依据所述基础镜像和扩充所述基础镜像的插件工具和配置环境,生成目标镜像。
29.可选地,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像测试脚本,所述方法还包括:
30.在镜像补丁库中提取与所述镜像补丁标识对应的镜像测试脚本,所述镜像测试脚本用于判断所述目标镜像是否满足用户期望环境和工具配置需求;
31.利用所述目标镜像创建测试容器;
32.通过所述测试容器运行所述镜像测试脚本,得到脚本运行结果。
33.可选地,所述镜像补丁库包括镜像补丁数据库和云存储系统;
34.其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像测试脚本目录,所述云存储系统中存储有不同的镜像测试脚本;
35.所述在镜像补丁库中提取与所述镜像补丁标识对应的镜像测试脚本的步骤,包括:
36.在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像测试脚本目录;
37.根据所述镜像测试脚本目录提取所述云存储系统中的镜像测试脚本。
38.可选地,所述利用所述目标镜像创建测试容器的步骤,包括:
39.对所述目标镜像执行集群操作指令,生成测试容器。
40.可选地,所述的容器镜像更新方法,还包括:
41.若所述脚本运行结果为所述镜像测试脚本运行成功,则在镜像信息数据库中创建
新的镜像条目,以及向客户端返回运行成功信息;
42.其中,所述新的镜像条目用于写入所述基础镜像标签、所述镜像补丁标识、目标镜像标签以及写入日期;所述目标镜像标签为基于所述基础镜像标签和所述镜像补丁对应的镜像补丁标签生成的。
43.可选地,所述的容器镜像更新方法,还包括:
44.若所述脚本运行结果为所述镜像测试脚本运行错误,则向客户端返回运行错误信息,以使所述客户端用户重新发送容器镜像更新请求,重新发送的容器镜像更新请求包括新的基础镜像标签和/或新的镜像补丁标识。
45.本发明还提供了一种容器镜像更新装置,包括:
46.请求接收模块,用于接收容器镜像更新请求,所述容器镜像更新请求包括基础镜像标签和镜像补丁标识;
47.镜像补丁提取模块,用于在镜像补丁库中提取与所述镜像补丁标识对应的镜像补丁,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像补丁,所述镜像补丁为依据用户需求对基础镜像中的插件工具和配置环境进行扩充的脚本文件;
48.基础镜像提取模块,用于在公共镜像库中提取与所述基础镜像标签对应的基础镜像;
49.容器镜像更新模块,用于根据所述镜像补丁对所述基础镜像进行更新,得到目标镜像。
50.本发明还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述容器镜像更新方法的步骤。
51.本发明还提供了一种计算机设备,所述计算机设备中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述容器镜像更新方法的步骤。
52.从以上技术方案可以看出,本发明实施例具有以下优点:
53.本发明提供的容器镜像更新方法、装置、存储介质及计算机设备,当用户需要更新容器镜像时,可以发送包括基础镜像标签和镜像补丁标识的容器镜像更新请求,服务器可以根据基础镜像标签在公共镜像库中提取对应的基础镜像,以及根据镜像补丁标识在镜像补丁库中提取对应的镜像补丁,接着根据镜像补丁对基础镜像进行更新,即可得到目标镜像,该过程耗时较短,有效提高工作效率,且容器镜像的更新不需要通过公共镜像库进行统一更新,用户可以根据自身的需求发送包含不同内容的容器镜像更新请求,服务器即可根据该容器镜像更新请求获取相应的基础镜像和镜像补丁,并通过镜像补丁对基础镜像进行更新,极大地拓宽了容器镜像更新的自由度,且镜像补丁是通过镜像补丁库进行维护的,同一个镜像补丁可以用来对不同的基础镜像进行更新,使得镜像补丁具备复用性。
附图说明
54.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可
以根据这些附图获得其它的附图。
55.图1为本发明实施例提供的一种容器镜像更新方法的流程示意图;
56.图2为本发明实施例提供的镜像补丁数据库的存储记录示意图;
57.图3为本发明实施例提供的一种容器镜像更新装置的结构示意图;
58.图4为本发明实施例提供的一种计算机设备的内部结构示意图。
具体实施方式
59.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
60.由于开发人员的具体任务、模型训练的要求不同,在使用公共镜像时,开发人员一般会对公共镜像提出不同的环境配置、插件工具要求,镜像管理员根据这些要求更新公共镜像的版本,并发布到私有镜像仓库,开发人员获取到更新后的公共镜像后,可以利用该公共镜像来创建容器并测试使用效果。另外,开发人员还可以在现有的容器内配置docker环境,使用户可以在容器内调试环境后直接使用官方docker commit指令进行保存,从而达到更新镜像的效果。
61.然而,当前使用公共镜像来更新镜像时,由于从镜像管理者接收用户发送的环境配置、工具更新需求,到最后验证可行的周期很长,并且,一旦有用户对于某个公共镜像有新的配置需求,当该镜像被统一更新以后,就意味着其他同时在使用该镜像的用户,在下次用该镜像跑任务时,也得被动接受新增的环境、工具,这些内容有可能会影响他们原本的跑任务方式。而另一种通过在现有的容器内配置docker环境的方式进行镜像更新时,会把新增的所有内容打包成一层镜像层,导致新增的环境配置、插件工具不具备复用性。
62.因此,本技术主要为了解决上述技术问题,并提出如下技术方案:
63.下面将站在服务端的角度来对本技术的容器镜像更新方法的执行过程进行描述。
64.在一个实施例中,如图1所示,图1为本发明实施例提供的一种容器镜像更新方法的流程示意图;本发明提供了一种容器镜像更新方法,所述方法包括:
65.s110:接收容器镜像更新请求。
66.本步骤中,当用户想要对已有的基础镜像中的插件工具以及配置环境进行更新时,可以通过相应的客户端发送容器镜像更新请求,服务端接收到客户端发送的容器镜像更新请求后,可以根据该容器镜像更新请求中携带的参数信息来执行后续操作,该参数信息包括但不限于基础镜像标签和镜像补丁标识。
67.可以理解的是,这里的基础镜像指的是企业内部搭建的公共镜像库中存储的容器镜像,并且,公共镜像库在创建的时候,为每一个基础镜像都添加了对应的基础镜像标签,用来区别公共镜像库中存储的其他基础镜像,并方便用户选择需要的基础镜像,即用户可以通过客户端发送基础镜像标签查询请求,客户端通过api向集群内的服务器发送该请求,以使服务器根据该请求获取公共镜像库中的基础镜像标签。
68.例如,基础镜像标签的构造可以是xxx

registry/dataplatform:cuda11,其中,xxx

registry指的是企业内部搭建的公共镜像库服务,dataplatform指的具体的公共镜像
库的库名,cuda11指的是标签。
69.需要说明的是,上述基础镜像标签的结构只是举例说明,具体可以依据用户的表达习惯等进行命名,只要符合一定的命名规则即可,在此不做限制。
70.这里的容器镜像指的是一个特殊的文件系统,该文件系统除了提供容器运行时所需的程序、库、资源配置外,还包含了一些为运行时准备的配置参数(如环境变量)。容器镜像不包含动态数据,因此,其本身内容在被用来创建新镜像后也不会改变。容器镜像的本质是多个基于镜像层依次挂载的结果,而容器的文件系统则是在以只读方式挂载镜像后增加的一个可读可写的环境。
71.进一步地,这里的容器指的是一个包含了文件资源、系统资源、开发环境依赖的标准软件单元。每个容器可以直接使用其所在的物理机上的cpu、内存、硬盘,并且性能接近于物理机性能。通过容器的操作系统层虚拟化达到所有的应用使用同一个操作系统,以此减少硬件资源的浪费,同时又能避免包括运行库在内的软件冲突。目前,在最新架构中,大多数训练任务都可以在容器中借助集群中的分布式训练工作流来完成。
72.另外,这里的镜像补丁标识指的是镜像补丁库中记录的每个镜像补丁所对应的id,通过该镜像补丁标识即可查找镜像补丁库中对应的镜像补丁,这里的镜像补丁指的是依据用户需求对基础镜像中的插件工具和配置环境进行扩充的脚本文件,其本质上是一行行用来扩充基础镜像中的插件工具和配置环境的语句组合起来的脚本文件,这些脚本文件占用空间极小,且里面的一行行语句可以直接用来拼接镜像构建文本。
73.其中,镜像补丁库可以是一个统一存取镜像补丁的仓库,也可以是一个由镜像补丁数据库和云存储系统结合而成的仓库。镜像补丁库中的每个镜像补丁都是以dockerfile语句的形式存储成文件,方便调取和复用,若镜像补丁库包含云存储系统的话,则可以将文件放在云存储系统中,而镜像补丁数据库则可以用来记录每个镜像补丁的基本信息,通过该基本信息即可在云存储系统中查找相应的镜像补丁文件。
74.s120:在镜像补丁库中提取与镜像补丁标识对应的镜像补丁。
75.本步骤中,服务端通过步骤s110接收到容器镜像更新请求,并获取到该容器镜像更新请求中包含的基础镜像标签以及镜像补丁标识后,进一步地,服务端可以根据该镜像补丁标识在镜像补丁库中提取对应的镜像补丁。
76.具体地,由于镜像补丁库中存储有不同的镜像补丁标识对应的镜像补丁,因此,当服务端获取到用户发送的容器镜像更新请求中携带的镜像补丁标识后,即可通过该镜像补丁标识在镜像补丁库中提取对应的镜像补丁。
77.进一步地,若镜像补丁库是由镜像补丁数据库和云存储系统结合而成的仓库,服务端则可以根据镜像补丁标识先在镜像补丁数据库中提取出与镜像补丁标识对应的基本信息,如镜像补丁的存储目录,接着可以根据获取到的镜像补丁的存储目录在云存储系统中提取对应的镜像补丁。
78.s130:在公共镜像库中提取与基础镜像标签对应的基础镜像。
79.本步骤中,服务端通过步骤s110接收到容器镜像更新请求,并获取到该容器镜像更新请求中包含的基础镜像标签以及镜像补丁标识后,进一步地,服务端可以根据该基础镜像标签在公共镜像库中提取对应的基础镜像。
80.由于公共镜像库在创建的时候,为每一个基础镜像都添加了对应的基础镜像标
签,用来区别公共镜像库中存储的其他基础镜像,并方便用户选择需要的基础镜像。
81.因此,用户可以事先查询公共镜像库中存储的基础镜像所对应的基础镜像标签,然后选择与自身需求匹配的基础镜像标签,当需要对容器镜像进行更新的时候,可以将该基础镜像标签以及想要更新的镜像补丁对应的镜像补丁标识共同作为容器镜像更新请求中的参数,以使服务端获取到该容器镜像更新请求后,可以根据其中的参数,如基础镜像标签,在公共镜像库中提取对应的基础镜像,无需用户上传整个基础镜像,从而极大地提升数据传输效率。
82.s140:根据镜像补丁对基础镜像进行更新,得到目标镜像。
83.本步骤,服务端通过步骤s120和步骤s130分别获取到镜像补丁和基础镜像后,即可根据镜像补丁来对基础镜像进行更新,从而得到目标镜像。
84.例如,在对基础镜像进行更新的时候,可以使用dockerfile(镜像构建脚本)来定制目标镜像,镜像构建脚本是一个用来构建镜像的文本文件,文本文件中的文本内容包含了多条构建镜像所需的指令和说明,每条指令对应操作系统终端界面的一条命令。docker程序可以通过读取镜像构建脚本来生成定制的目标镜像。该目标镜像可以放入公共镜像库中,作为下一次容器镜像更新时的基础镜像。
85.进一步地,本技术可以用镜像补丁库中不同的镜像补丁不断地对同一个基础镜像更新。比如四个用户分别上传了a、b、c、d四个镜像补丁,那么对于基础镜像x,可以使用迭代的方式将上诉和四个镜像补丁都打上,从而使得更新后的基础镜像可以结合四个镜像补丁中添加的工具。
86.更进一步地,为了确定当前构建的目标镜像是否满足用户的需求,本技术还可以通过预先设置的镜像测试脚本来对目标镜像进行测试,当测试结果运行成功后,即表示当前的目标镜像满足用户的需求。
87.上述实施例中,当用户需要更新容器镜像时,可以发送包括基础镜像标签和镜像补丁标识的容器镜像更新请求,服务器可以根据基础镜像标签在公共镜像库中提取对应的基础镜像,以及根据镜像补丁标识在镜像补丁库中提取对应的镜像补丁,接着根据镜像补丁对基础镜像进行更新,即可得到目标镜像,该过程耗时较短,有效提高工作效率,且容器镜像的更新不需要通过公共镜像库进行统一更新,用户可以根据自身的需求发送包含不同内容的容器镜像更新请求,服务器即可根据该容器镜像更新请求获取相应的基础镜像和镜像补丁,并通过镜像补丁对基础镜像进行更新,极大地拓宽了容器镜像更新的自由度,且镜像补丁是通过镜像补丁库进行维护的,同一个镜像补丁可以用来对不同的基础镜像进行更新,使得镜像补丁具备复用性。
88.上述实施例对本技术的容器镜像更新方法的过程进行展开描述,下面将对本技术中镜像补丁库的搭建过程进行说明。
89.在一个实施例中,s110中接收容器镜像更新请求的步骤之前,还可以包括:
90.s101:接收镜像补丁添加请求。
91.s102:基于所述镜像补丁添加请求,搭建镜像补丁库。
92.本实施例中,服务器在接收用户发送的容器镜像更新请求之前,可以根据用户发送的镜像补丁添加请求,来搭建相应的镜像补丁库,以便开发人员对镜像补丁库中的镜像补丁进行更新。
93.具体地,当服务器接收到镜像补丁添加请求后,可以先判断当前集群内是否搭建了镜像补丁库,若没有,则可以依据用户的镜像补丁添加请求,在集群内搭建镜像补丁库,该镜像补丁库可以用来记录每个镜像补丁的基本信息,如提交用户、镜像补丁标签、镜像补丁说明信息、镜像补丁云存储目录、镜像测试脚本目录等,以及每个镜像补丁对应的文件内容。
94.进一步地,搭建好镜像补丁库后,服务器可以返回镜像补丁库的查询入口,用户可以基于该查询入口实现对镜像补丁库的访问,并获取当前镜像补丁库中的镜像补丁列表,该镜像补丁列表表明当前镜像补丁库中记录的所有的镜像补丁的基本信息和文件内容。
95.上述实施例对本技术中镜像补丁库的搭建过程进行说明,下面将对本技术中如何提取镜像补丁的过程进行说明。
96.在一个实施例中,所述镜像补丁库可以包括镜像补丁数据库和云存储系统;其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像补丁云存储目录,所述云存储系统中存储有不同的镜像补丁。
97.本实施例中,镜像补丁数据库可以用来记录每个镜像补丁的基本信息,如提交用户、镜像补丁标签、镜像补丁说明信息、镜像补丁云存储目录、镜像测试脚本目录等;而云存储系统中可以存储不同的镜像补丁,这样将镜像补丁的基本信息与镜像补丁的存储区域分离后,可以保证镜像补丁的安全性。
98.示意性地,如图2所示,图2为本发明实施例提供的镜像补丁数据库的存储记录示意图;图2中的id指的是镜像补丁标识,user指的是提交用户,patch_tag指的是镜像补丁标签,info指的是镜像补丁说明信息,dockerfile_dir指的是镜像补丁云存储目录,test_script_dir指的是镜像测试脚本目录。
99.其中,镜像补丁标签类似基础镜像标签,是对镜像补丁的简称,用来区别镜像补丁数据库中存储的其他镜像补丁,并方便用户选择需要的镜像补丁;镜像补丁说明信息记录了该镜像补丁所包含的插件工具、环境内容;镜像补丁云存储目录指明当前镜像补丁在云存储系统中的存储目录;镜像测试脚本目录指明当前镜像测试脚本在云存储系统中的存储目录,而镜像测试脚本则是对基础镜像更新后的检测脚本,判断更新后的基础镜像是否满足用户期望的配置环境、工具配置需求。
100.进一步地,步骤s120中在镜像补丁库中提取与所述镜像补丁标识对应的镜像补丁的步骤,可以包括:
101.s121:在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像补丁云存储目录。
102.s122:根据所述镜像补丁云存储目录提取所述云存储系统中的镜像补丁。
103.本实施例中,当镜像补丁库是由镜像补丁数据库和云存储系统共同构建的仓库时,服务端可以根据镜像补丁标识先在镜像补丁数据库中查找对应的镜像补丁云存储目录,接着可以根据该镜像补丁云存储目录中的存储路径,提取云存储系统中的镜像补丁,从而得到与镜像补丁标识对应的镜像补丁。
104.上述实施例对本技术中如何提取镜像补丁的过程进行说明,下面将对本技术中如何定制目标镜像的过程进行描述。
105.在一个实施例中,步骤s140中根据所述镜像补丁对所述基础镜像进行更新,得到
目标镜像的步骤之前,还可以包括:根据所述容器镜像更新请求创建初始镜像构建文本。
106.本步骤中,当服务端接收到客户端发送的容器镜像更新请求后,可以根据该容器镜像更新请求创建初始镜像构建文本,初始镜像构建文本是一个用来构建镜像的文本文件,文本文件中的文本内容包含了多条构建镜像所需的指令和说明,每条指令对应操作系统终端界面的一条命令。docker程序可以通过读取初始镜像构建文本中的指令来生成定制的目标镜像。
107.步骤s140所述镜像补丁对所述基础镜像进行更新,得到目标镜像的步骤,可以包括:
108.s141:在所述初始镜像构建文本中写入基础镜像获取指令和镜像补丁获取指令,形成目标镜像构建文本。
109.其中,所述基础镜像获取指令用于提取所述基础镜像标签对应的基础镜像,所述镜像补丁获取指令用于提取所述镜像补丁中扩充所述基础镜像的插件工具和配置环境;
110.s142:根据所述目标镜像构建文本创建目标镜像。
111.本发明实施例中,服务端在利用镜像补丁更新基础镜像,并得到目标镜像时,可以使用镜像构建文本来生成目标镜像。
112.举例来说,服务端可以在一个空目录下,新建一个名为dockerfile的文件作为初始镜像构建文本,并在初始镜像构建文本中写入基础镜像获取指令和镜像补丁获取指令,从而形成目标镜像构建文本,通过该目标镜像构建文本来创建目标镜像。
113.需要说明的是,这里的基础镜像获取指令用于提取基础镜像,这里的镜像补丁获取指令用于提取镜像补丁中扩充基础镜像的插件工具和配置环境;其中,基础镜像获取指令可以包括from指令和run指令来,from指令表示定制的镜像都是基于from的镜像,即定制需要的基础镜像,后续的操作都是基于基础镜像;run指令用于执行后面跟着的命令行命令。
114.进一步地,在写入基础镜像获取指令和镜像补丁获取指令时,可以优先写入基础镜像获取指令,接着在基础镜像获取指令之后,再写入镜像补丁获取指令。例如,当在初始镜像构建文本中写入用于提取基础镜像的基础镜像获取指令后,接着可将镜像补丁中用于扩充配置环境、插件工具的语句拷贝在基础镜像获取指令的下面,然后在dockerfile文件的存放目录下,执行构建动作,即可构建目标镜像。
115.在一个实施例中,s142中根据所述目标镜像构建文本创建目标镜像的步骤,可以包括:
116.s1421:执行所述目标镜像构建文本中的所述基础镜像获取指令和所述镜像补丁获取指令,提取所述基础镜像标签对应的基础镜像,以及所述镜像补丁中扩充所述基础镜像的插件工具和配置环境。
117.s1422:依据所述基础镜像和扩充所述基础镜像的插件工具和配置环境,生成目标镜像。
118.本实施例中,当初始镜像构建文本中添加了用来提取基础镜像的基础镜像获取指令,以及用于扩充基础镜像的插件工具和配置环境的镜像补丁获取指令,并形成目标镜像构建文本后,接着可以对该目标镜像构建文本执行docker指令,以使目标镜像构建文本运行后,提取与基础镜像标签对应的基础镜像,以及镜像补丁中扩充基础镜像的插件工具和
配置环境,从而依据基础镜像、扩充基础镜像的插件工具和配置环境生成目标镜像。
119.上述实施例对本技术中如何定制目标镜像的过程进行描述,下面将对本技术中的测试过程进行说明。
120.在一个实施例中,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像测试脚本,所述方法还可以包括:
121.s150:在镜像补丁库中提取与镜像补丁标识对应的镜像测试脚本。
122.s160:利用目标镜像创建测试容器。
123.s170:通过测试容器运行镜像测试脚本,得到脚本运行结果。
124.本步骤中,在创建镜像补丁的过程中,还可以创建与该镜像补丁对应的镜像测试脚本,利用该镜像测试脚本对更新后的基础镜像,即对目标镜像进行测试,即可判断目标镜像是否满足用户期望环境和工具配置需求。
125.其中,镜像补丁和镜像测试脚本都放在镜像补丁库中,例如可以是集群内部的云存储系统上。测试容器通过对指定存储框(可以搜s3 bucket)挂载的方式,或是一些像aws官方服务的api来获取镜像测试脚本对应的脚本文本,并在测试容器中运行该脚本文本,得到相应的脚本运行结果。
126.需要说明的是,这里的测试容器指的是服务端根据用户的测试需求,在集群内的某一特定区域所创建的临时容器,该临时容器用于对当前创建的目标镜像进行测试。
127.进一步地,对于公共镜像库中的基础镜像,也可以配置相应的测试脚本,此时,测试容器中则会有两份测试脚本,一份与镜像补丁相对应,一份与基础镜像相对应,从而防止用户上传的镜像补丁破坏基础镜像的功能。
128.上述实施例对本技术中的测试过程进行说明,下面将对本技术中镜像测试脚本的提取过程进行描述。
129.在一个实施例中,所述镜像补丁库可以包括镜像补丁数据库和云存储系统;其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像测试脚本目录,所述云存储系统中存储有不同的镜像测试脚本。
130.本实施例中,镜像补丁数据库可以用来记录每个镜像补丁的基本信息,如提交用户、镜像补丁标签、镜像补丁说明信息、镜像补丁云存储目录、镜像测试脚本目录等;而云存储系统中可以存储不同的镜像补丁以及镜像测试脚本。
131.进一步地,步骤s150中在镜像补丁库中提取与所述镜像补丁标识对应的镜像测试脚本的步骤,可以包括:
132.s151:在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像测试脚本目录。
133.s152:根据所述镜像测试脚本目录提取所述云存储系统中的镜像测试脚本。
134.本实施例中,当镜像补丁库是由镜像补丁数据库和云存储系统共同构建的仓库时,服务端可以根据镜像补丁标识先在镜像补丁数据库中查找对应的镜像测试脚本目录,接着可以根据该镜像测试脚本目录中的存储路径,提取云存储系统中的镜像测试脚本,从而得到与镜像补丁标识对应的镜像测试脚本。
135.上述实施例对本技术中镜像测试脚本的提取过程进行描述,下面将对本技术中如何利用目标镜像创建测试容器的过程进行说明。
136.在一个实施例中,s160中利用所述目标镜像创建测试容器的步骤,可以包括:对所述目标镜像执行集群操作指令,生成测试容器。
137.本实施例中,当服务端通过docker指令拉取到基础镜像,并添加镜像补丁,创建目标镜像后,可以在集群节点上创建测试容器,通过该测试容器来运行镜像测试脚本。
138.上述实施例对本技术中如何利用目标镜像创建测试容器的过程进行说明,下面继续对本技术中的测试过程进行进一步说明。
139.在一个实施例中,所述的容器镜像更新方法,还可以包括:
140.a11:若所述脚本运行结果为所述镜像测试脚本运行成功,则在镜像信息数据库中创建新的镜像条目,以及向客户端返回运行成功信息。
141.本实施例中,当测试容器内的镜像测试脚本运行成功的话,则表示当前的镜像补丁符合用户的需求,此时服务端可以在镜像信息数据库中创建新的镜像条目,以通过该镜像条目记录当前的容器镜像更新信息,并且,服务端还可以向客户端返回运行成功信息,以使用户了解当前的更新结果。
142.其中,新的镜像条目用于写入基础镜像标签、镜像补丁标识、目标镜像标签以及写入日期;目标镜像标签为基于基础镜像标签和镜像补丁对应的镜像补丁标签生成的,如基础镜像为docker

registry/cuda11,镜像补丁标签为rdma,则目标镜像标签可以是docker

registry/cuda11

rdma。
143.示意性地,如下表1所示,表1为镜像信息数据库中创建的镜像条目:
[0144][0145]
表1镜像信息数据库中创建的镜像条目
[0146]
其中,id表示镜像条目标识,image_tag表示目标镜像标签,base_image表示基础镜像标签,patch_id表示镜像补丁标识,date表示写入日期。表1中的镜像条目表示在2021

04

09 00:36:38创建了一个新镜像docker

registry/base_image_clang11,其基础镜像标签为docker

registry/base_image,镜像补丁标签为clang11,即该新镜像在原镜像基础上安装了clang11的环境。
[0147]
在一个实施例中,所述的容器镜像更新方法,还可以包括:
[0148]
a12:若所述脚本运行结果为所述镜像测试脚本运行错误,则向客户端返回运行错误信息,以使所述客户端用户重新发送容器镜像更新请求,重新发送的容器镜像更新请求包括新的基础镜像标签和/或新的镜像补丁标识。
[0149]
本实施例中,在测试容器中运行镜像测试脚本时,若镜像测试脚本运行出错的话,则可以向客户端返回运行错误信息,用户会根据这些信息决定是否上传新的镜像补丁和镜像测试脚本,或改变基础镜像和镜像补丁的组合。
[0150]
下面对本技术实施例提供的容器镜像更新装置进行描述,下文描述的容器镜像更新装置与上文描述的容器镜像更新方法可相互对应参照。
[0151]
在一个实施例中,如图3所示,图3为本发明实施例提供的一中容器镜像更新装置的结构示意图;本发明还提供了一种容器镜像更新装置,包括请求接收模块210、镜像补丁提取模块220、基础镜像提取模块230和容器镜像更新模块240,具体包括如下:
[0152]
请求接收模块210,用于接收容器镜像更新请求,所述容器镜像更新请求包括基础镜像标签和镜像补丁标识。
[0153]
镜像补丁提取模块220,用于在镜像补丁库中提取与所述镜像补丁标识对应的镜像补丁,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像补丁,所述镜像补丁为依据用户需求对基础镜像中的插件工具和配置环境进行扩充的脚本文件。
[0154]
基础镜像提取模块230,用于在公共镜像库中提取与所述基础镜像标签对应的基础镜像。
[0155]
容器镜像更新模块240,用于根据所述镜像补丁对所述基础镜像进行更新,得到目标镜像。
[0156]
上述实施例中,当用户需要更新容器镜像时,可以发送包括基础镜像标签和镜像补丁标识的容器镜像更新请求,服务器可以根据基础镜像标签在公共镜像库中提取对应的基础镜像,以及根据镜像补丁标识在镜像补丁库中提取对应的镜像补丁,接着根据镜像补丁对基础镜像进行更新,即可得到目标镜像,该过程耗时较短,有效提高工作效率,且容器镜像的更新不需要通过公共镜像库进行统一更新,用户可以根据自身的需求发送包含不同内容的容器镜像更新请求,服务器即可根据该容器镜像更新请求获取相应的基础镜像和镜像补丁,并通过镜像补丁对基础镜像进行更新,极大地拓宽了容器镜像更新的自由度,且镜像补丁是通过镜像补丁库进行维护的,同一个镜像补丁可以用来对不同的基础镜像进行更新,使得镜像补丁具备复用性。
[0157]
在一个实施例中,所述请求接收模块210之前,还可以包括:
[0158]
添加补丁请求接收模块,用于接收镜像补丁添加请求。
[0159]
搭建镜像补丁库模块,用于基于所述镜像补丁添加请求,搭建镜像补丁库。
[0160]
在一个实施例中,所述镜像补丁库可以包括镜像补丁数据库和云存储系统;其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像补丁云存储目录,所述云存储系统中存储有不同的镜像补丁。
[0161]
所述镜像补丁提取模块220可以包括:
[0162]
第一目录查找模块,用于在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像补丁云存储目录。
[0163]
第一提取模块,用于根据所述镜像补丁云存储目录提取所述云存储系统中的镜像补丁。
[0164]
在一个实施例中,所述容器镜像更新模块240之前,还可以包括:
[0165]
文本创建模块,用于根据所述容器镜像更新请求创建初始镜像构建文本。
[0166]
所述容器镜像更新模块240可以包括:
[0167]
写入模块,用于在所述初始镜像构建文本中写入基础镜像获取指令和镜像补丁获取指令,形成目标镜像构建文本。
[0168]
其中,所述基础镜像获取指令用于提取所述基础镜像标签对应的基础镜像,所述镜像补丁获取指令用于提取所述镜像补丁中扩充所述基础镜像的插件工具和配置环境。
[0169]
创建模块,用于根据所述目标镜像构建文本创建目标镜像。
[0170]
在一个实施例中,所述创建模块可以包括:
[0171]
指令执行模块,用于执行所述目标镜像构建文本中的所述基础镜像获取指令和所述镜像补丁获取指令,提取所述基础镜像标签对应的基础镜像,以及所述镜像补丁中扩充所述基础镜像的插件工具和配置环境。
[0172]
镜像生成模块,用于依据所述基础镜像和扩充所述基础镜像的插件工具和配置环境,生成目标镜像。
[0173]
在一个实施例中,所述镜像补丁库中存储有不同的镜像补丁标识对应的镜像测试脚本,所述方法还可以包括:
[0174]
测试脚本提取模块,用于在镜像补丁库中提取与所述镜像补丁标识对应的镜像测试脚本,所述镜像测试脚本用于判断所述目标镜像是否满足用户期望环境和工具配置需求。
[0175]
容器创建模块,用于利用所述目标镜像创建测试容器。
[0176]
运行模块,用于通过所述测试容器运行所述镜像测试脚本,得到脚本运行结果。
[0177]
在一个实施例中,所述镜像补丁库可以包括镜像补丁数据库和云存储系统;其中,所述镜像补丁数据库中存储有不同的镜像补丁标识对应的镜像测试脚本目录,所述云存储系统中存储有不同的镜像测试脚本。
[0178]
所述测试脚本提取模块可以包括:
[0179]
第二目录查找模块,用于在所述镜像补丁数据库中查找与所述镜像补丁标识对应的镜像测试脚本目录;
[0180]
第二提取模块,用于根据所述镜像测试脚本目录提取所述云存储系统中的镜像测试脚本。
[0181]
在一个实施例中,所述容器创建模块可以包括:
[0182]
执行模块,用于对所述目标镜像执行集群操作指令,生成测试容器。
[0183]
在一个实施例中,所述的容器镜像更新方法,还可以包括:
[0184]
成功返回模块,用于若所述脚本运行结果为所述镜像测试脚本运行成功,则在镜像信息数据库中创建新的镜像条目,以及向客户端返回运行成功信息。
[0185]
其中,所述新的镜像条目用于写入所述基础镜像标签、所述镜像补丁标识、目标镜像标签以及写入日期;所述目标镜像标签为基于所述基础镜像标签和所述镜像补丁对应的镜像补丁标签生成的。
[0186]
在一个实施例中,所述的容器镜像更新方法,还可以包括:
[0187]
错误返回模块,用于若所述脚本运行结果为所述镜像测试脚本运行错误,则向客户端返回运行错误信息,以使所述客户端用户重新发送容器镜像更新请求,重新发送的容器镜像更新请求包括新的基础镜像标签和/或新的镜像补丁标识。
[0188]
在一个实施例中,本发明还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述容器镜像更新方法的步骤。
[0189]
在一个实施例中,本发明还提供了一种计算机设备,所述计算机设备中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器
执行如上述实施例中任一项所述容器镜像更新方法的步骤。
[0190]
示意性地,如图4所示,图4为本发明实施例提供的一种计算机设备的内部结构示意图,该计算机设备300可以被提供为一服务器。参照图4,计算机设备300包括处理组件302,其进一步包括一个或多个处理器,以及由存储器301所代表的存储器资源,用于存储可由处理组件302的执行的指令,例如应用程序。存储器301中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件302被配置为执行指令,以执行上述任意实施例的容器镜像更新方法。
[0191]
计算机设备300还可以包括一个电源组件303被配置为执行计算机设备300的电源管理,一个有线或无线网络接口304被配置为将计算机设备300连接到网络,和一个输入输出(i/o)接口305。计算机设备300可以操作基于存储在存储器301的操作系统,例如windows server tm、mac os xtm、unix tm、linux tm、free bsdtm或类似。
[0192]
本领域技术人员可以理解,图4中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0193]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0194]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
[0195]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献