具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
目前的镜像管理工具包含镜像仓库以及具有镜像查看、镜像删除功能的管理系统。用户将制作好的镜像推送到镜像仓库,镜像仓库负载存储镜像;当镜像仓库存储达到阀值后由管理员负责删除历史镜像;最后用户通过镜像拉取并基于镜像运行容器完成应用部署。并且,由于不同架构的镜像只能在对应的服务器上才能运行,所以用户需要上传不同架构但功能相同的镜像,这样需要记录多个镜像名称,使得后续下载镜像的难度加大。
基于此,本发明实施例提供一种镜像管理系统、方法及计算设备,能够满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
具体地,下面结合附图,对本发明实施例作进一步阐述。
其中,应当理解的是,本发明提供的下述实施例之间,只要不冲突,均可相互结合以形成新的实施方式。
图1示出了本发明实施例提供的镜像管理系统的结构示意图。如图1所示,该系统包括:前端模块110和后端模块120。
其中,前端模块110用于接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单;后端模块120用于根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像。通过以上方式,本发明实施例能够满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
其中,前端模块110可以为Web服务器(Web server)。前端模块110用于接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单。其中,镜像构建需求是指构建镜像时的模式、是否需要介质等需求。镜像构建需求可以由用户通过前端模块110触发。镜像构建数据是指构建镜像时所需要的数据。镜像构建数据可以由用户通过前端模块110上传。
其中,后端模块120可以包括镜像构建单元。镜像构建单元用于根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像。
其中,根据镜像构建工单,获取镜像构建数据,具体可以为:根据镜像构建工单,确定镜像构建模式,根据镜像构建模式,获取对应的镜像构建数据。镜像构建模式包括参数配置构建模式或上传文件构建模式,镜像构建数据包括参数数据或文件数据,参数配置构建模式对应的镜像构建数据为参数数据,上传文件构建模式对应的镜像构建数据为文件数据。
其中,参数数据为用户通过前端模块110输入的用于构建镜像的数据。参数数据可以包括基础镜像名称、目标镜像名称、依赖文件的下载地址、依赖文件的映射关系、需要执行的操作命令等等。例如,可以预先设置参数数据调用规则和参数模板,则用户可以参照参数模板并根据实际需求输入参数数据,以使得镜像构建模块确定镜像构建模式为参数配置构建模式后,获取参数数据,并根据预设的参数数据调用规则构建至少两种不同架构的镜像。
其中,文件数据为用户通过前端模块110上传的Dockerfile文件。Dockerfile文件内包含了构建镜像所需的所有数据,根据Dockerfile文件可以直接生成镜像。其中,Dockerfile文件可以包括FROM(指定基础镜像)、MAINTAINER(指定维护者信息)、RUN(指定要做什么)、ADD(COPY文件,会自动解压)、WORKDIR(设置当前工作目录)、VOLUME(设置卷,挂载主机目录)、EXPOSE(打开)、CMD(指定容器启动后要干的事情)等。例如,一个Dockerfile文件可以为:
FROM centos
MAINTAINER The CentOS Project<8888xxxxx@qq.com>
RUN yum-y update
RUN yum-y install httpd
EXPOSE 80
ADD index.html/var/www/html/index.html
ADD run.sh/run.sh
RUN chmod 775/run.sh
CMD["/run.sh"]
其中,至少两种不同架构的镜像是指两种或者两种以上不同CPU架构的镜像。CPU架构可以包括x86架构、ARM架构、ppc64le架构等等。构建至少两种不同架构的镜像,具体可以为:根据同一镜像构建模式和同一镜像构建数据,同时构建至少两种不同架构的镜像。例如,当确定镜像构建模式为上传文件构建模式时,并获取对应的Dockerfile文件,则在一个进程中根据Dockerfile文件按照第一架构生成第一镜像,在另一个进程中将Dockerfile文件中与第一架构有关的地方根据第二架构进行替换,根据替换后的Dockerfile文件按照第二架构生成第二镜像,从而生成两种不同架构的镜像。
其中,前端模块110和后端模块120可以设置在同一处理器上,也可以设置在不同处理器上。例如,Web服务器和App服务器可以设置在同一处理器上,为同一处理器上的两个不同进程;又例如,Web服务器和App服务器也可以分别设置在不同的处理器上。
其中,前端模块110和后端模块120采用前后端分离模式开发。前端模块110采用Vue+axios+ES实现平台交互功能,使用iview作为UI框架,后端模块120采用Go语言开发,为前台操作提供响应。前端模块110和后端模块120使用restful API进行交互。例如,可以设置在前端模块110和后端模块120之间设置代理模块(Proxy),代理模块可以采用Nginx服务,通过反向代理将请求转发到App服务器和Registry。
在一些实施例中,镜像构建数据还包括依赖文件数据,用户在上传文件数据或者输入参数数据时,会根据文件数据或者参数数据的需要决定是否上传依赖文件数据,若上传了依赖文件数据,则后端模块120在根据文件数据或者参数数据构建镜像的过程中,获取依赖文件数据。
本发明实施例通过前端模块110接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,后端模块120根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
在一些实施例中,该镜像管理系统100还包括:存储模块130。存储模块130包括镜像存储单元131,镜像存储单元131可以为Registry,Registry可以设有多个Repository,每个Repository可以储存多个镜像。镜像存储单元131用于采用同一名称储存至少两种不同架构的镜像。当后端模块120完成构建至少两种不同架构的镜像后,镜像存储单元131对镜像进行储存,并储存为同一名称。
在一些实施例中,存储模块130还包括文件单元132和数据单元133。文件单元132可以为文件服务器(File Server),文件服务器采用Apache服务,文件服务器用于储存文件数据和依赖文件数据。数据单元133可以为MySQL,MySQL用于储存参数数据和镜像构建工单。
其中,镜像存储单元131、文件单元132、数据单元133可以设置在同一存储器或者不同存储器上,当镜像存储单元131、文件单元132、数据单元133设置在不同存储器上时,能够提高数据的可靠性。
在一些实施例中,后端模块120还可以包括应用单元。应用单元可以为App服务器,App服务器响应Web服务器与镜像构建单元之间的指令。
在本实施例中,一种可选的镜像构建流程可以如图2所示。Web服务器接收镜像构建需求,并接收用户选择的镜像构建模式,若用户选择参数配置模式,则通过App服务器将参数数据上传到MySQL,若用户选择上传文件构建模式,则通过App服务器将文件数据上传到文件服务器,若用户上传依赖文件数据,则通过App服务器将依赖文件数据上传到文件服务器,从而生成镜像构建工单,并将镜像构建工单储存在MySQL;镜像构建模块扫描MySQL中未处理的镜像构建工单,根据镜像构建工单,确定镜像构建模式,若确定镜像构建模式为上传文件构建模式,则从文件服务器获取文件数据,若确定镜像构建模式为参数配置构建模式,则从MySQL获取参数数据,根据文件数据或参数数据判断是否需要依赖文件数据,若需要依赖文件数据,则从文件服务器获取依赖文件数据,并根据依赖文件数据以及文件数据或参数数据构建至少两种不同架构的镜像。
在一些实施例中,后端模块120还包括镜像推送单元。镜像推送单元用于:根据客户端发送的镜像拉取请求,确定客户端的处理架构,并根据处理架构,将至少两种不同架构的镜像中与处理架构匹配的镜像提供给客户端。其中,镜像拉取请求为用户通过客户端发送的、用于拉取镜像的请求,以基于镜像运行容器完成应用部署。不同架构的镜像需要在不同处理结构的客户端中运行,则需要根据客户端发送的镜像拉取请求,确定客户端的处理架构。若镜像的架构与处理架构为同一CPU架构,则该镜像为与处理架构匹配的镜像。例如,假设实现A功能的镜像有x86架构和ARM架构两种,若根据客户端发送的镜像拉取请求,镜像推送单元确定客户端的处理架构为x86架构,则镜像推送单元从镜像存储单元131中获取实现A功能的x86架构镜像,并将该镜像推送给客户端。
在一些实施例中,后端模块120还包括镜像分析单元。镜像分析单元用于:确定镜像的下载次数、镜像的占用比例、镜像的年龄中的一种或多种。
在本实施例中,一种可选的镜像分析流程可以如图3所示。代理模块在接收到镜像拉取请求或者镜像推送请求后,代理模块将镜像拉取请求或者镜像推送请求转发给App服务器,App服务器根据请求以及预存在MySQL中的用户信息进行访问权限校验,并记录请求个数,镜像分析模块通过对访问记录数据进行统计输出全部镜像的镜像的下载次数的排序;镜像构建完成后,镜像分析模块通过Registry服务接口获取镜像大小数据,并进行统计,输出全部镜像的镜像的占用比例的排序;镜像分析模块还通过Registry服务接口获取镜像的年龄,并进行统计,输出全部镜像的镜像的年龄的排序。
在一些实施例中,前端模块110还用于接收镜像清理请求,镜像清理请求包括年龄清理请求或数量清理请求;后端模块120还包括镜像清理单元。镜像清理单元用于:根据年龄清理请求,在镜像的年龄大于预设年龄阈值时,清除镜像,或者,根据数量清理请求,在同一名称的至少两种不同架构的镜像的数量大于预设数量阈值时,清除年龄最大的镜像。其中,镜像清理请求可以为用户通过前端模块110触发或者系统自动触发。
在本实施例中,一种可选的镜像清理流程可以如图4所示。Web服务器接收用户设置的镜像清理规则(年龄规则或者数量规则),并通过App服务器将镜像清理规则储存在MySQL,镜像清理模块接收到镜像清理请求时,从MySQL中获取镜像清理规则,确定镜像清理请求为年龄清理请求还是数量清理请求;若镜像清理模块确定镜像清理请求为年龄清理请求,则在镜像的年龄大于预设年龄阈值时,清除储存在Registry中的镜像;若镜像清理模块确定镜像清理请求为数量清理请求,则在同一名称的至少两种不同架构的镜像的数量大于预设数量阈值时,清除年龄最大的镜像。
在一些实施例中,后端模块120还包括镜像同步单元。镜像同步单元用于完成镜像在不同单元中的传输,并实现镜像备份功能,从而提高系统的可用性。
在一些实施例中,后端模块120还包括镜像扫描单元。镜像扫描单元用于:获取漏洞元数据和镜像的特征数据,并根据漏洞元数据和镜像的特征数据,对镜像进行扫描,并获取扫描结果。其中,漏洞元数据可以为从CVE(Common Vulnerabilities&Exposures)漏洞库中获取漏洞元数据。对镜像进行扫描,采用的扫描方式可以为:当镜像提交时触发增量扫描,或者,定时触发全量扫描。
在本实施例中,一种可选的镜像分析流程可以如图5所示。镜像扫描单元从CVE漏洞库中获取漏洞元数据,并将漏洞元数据储存到MySQL,进行镜像解析以获取镜像的特征数据,并将镜像的特征数据储存到MySQL,对漏洞元数据和镜像的特征数据进行关联,从而得到扫描结果。
本发明实施例通过前端模块110接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,后端模块120根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像,同时,还通过设置镜像推送单元、镜像分析单元、镜像同步单元、镜像清理单元、镜像扫描单元,实现镜像的架构匹配、镜像的分析、镜像的备份、镜像的清理、镜像的安全扫描等等,为用户提供了个性化、智能化的镜像管理手段,提升镜像管理效率,提前发现镜像漏洞,以避免不安全的镜像在生成环境扩散运行,减少因安全问题带来的损失。
图6示出了本发明实施例提供的镜像管理方法的流程图。该方法应用于上述的镜像管理系统。如图6所示,该方法还包括:
步骤201、接收镜像构建需求和镜像构建数据;
步骤202、根据镜像构建需求,生成镜像构建工单;
步骤203、根据镜像构建工单,获取镜像构建数据;
步骤204、根据镜像构建数据,构建至少两种不同架构的镜像。
在一种可选的方式中,根据镜像构建工单,获取镜像构建数据,进一步包括:根据所述镜像构建工单,确定镜像构建模式,根据所述镜像构建模式,获取对应的所述镜像构建数据。
在一种可选的方式中,该方法还包括:采用同一名称储存所述至少两种不同架构的镜像。
在一种可选的方式中,该方法还包括:根据客户端发送的镜像拉取请求,确定所述客户端的处理架构,并根据所述处理架构,将所述至少两种不同架构的镜像中与所述处理架构匹配的镜像提供给所述客户端。
在一种可选的方式中,该方法还包括:接收镜像清理请求,所述镜像清理请求包括年龄清理请求或数量清理请求;根据所述年龄清理请求,在所述镜像的年龄大于预设年龄阈值时,清除所述镜像,或者,根据所述数量清理请求,用于在同一名称的所述至少两种不同架构的镜像的数量大于预设数量阈值时,清除年龄最大的所述镜像。
在一种可选的方式中,该方法还包括:确定所述镜像的下载次数、所述镜像的占用比例、所述镜像的年龄中的一种或多种。
在一种可选的方式中,该方法还包括:获取漏洞元数据和所述镜像的特征数据,并根据所述漏洞元数据和所述镜像的特征数据,对所述镜像进行扫描,并获取扫描结果。
需要说明的是,本发明实施例提供的镜像管理方法是用于在上述镜像管理系统上执行的方法,则上述镜像管理系统的所有实施例均适用于该方法,且均能达到相同或相似的有益效果。
本发明实施例通过接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
本发明实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行上述任意方法实施例中的镜像管理方法。
本发明实施例通过前端模块接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,后端模块根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
本发明实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任意方法实施例中的镜像管理方法。
本发明实施例通过前端模块接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,后端模块根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
图7示出了本发明实施例提供的计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图7所示,该计算设备可以包括:处理器(processor)302、通信接口(Communications Interface)304、存储器(memory)306、以及通信总线308。
其中:处理器302、通信接口304、以及存储器306通过通信总线308完成相互间的通信。通信接口304,用于与其它设备比如客户端或其它服务器等的网元通信。处理器302,用于执行程序310,具体可以执行上述任意方法实施例中的镜像管理方法。
具体地,程序310可以包括程序代码,该程序代码包括计算机操作指令。
处理器302可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器306,用于存放程序310。存储器306可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
本发明实施例通过前端模块接收镜像构建需求和镜像构建数据,并根据镜像构建需求,生成镜像构建工单,后端模块根据镜像构建工单,获取镜像构建数据,并根据镜像构建数据,构建至少两种不同架构的镜像,能够在线生成镜像,满足镜像在线制作的需求,并且同时生成至少两种不同架构的镜像。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。