发明内容
考虑到上述问题而提出了本发明。本发明之目的是提供一种新的项目交付发布包及其生成和运行方法,以及执行上述方法的可读存储介质,能够避免繁琐的软件安装配置,在任意支持Docker的主机上均可运行该发布包来启动整个项目,无需二次配置。
根据本发明一方面,提供了一种新的项目交付发布包的生成和运行方法,包括:步骤1:生成项目应用程序中服务的服务镜像,其中,服务镜像的存储结构为具有多个数据层的分层存储结构;步骤2:将服务镜像打散并去除重复数据层,以优化发布包的大小;步骤3:将配置文件、初始化数据和服务镜像整合到一起,形成一个完整的项目应用的发布包。
作为优选方式,新的项目交付发布包的生成和运行方法还包括:步骤4:在任意支持Docker的主机上运行项目应用的发布包。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,在步骤1中生成了多个服务镜像,多个服务镜像中的至少两个服务镜像的存储结构具有相同的公共层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,服务镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,公共层还包括第三数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,公共层为Linux镜像存储结构,包括CentOS镜像存储结构、Ubuntu镜像存储结构或Alpine镜像存储结构。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,多个Web镜像均具有相同的公共层且每个Web镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Web镜像的服务层还包括Tomcat与JDK层和/或War层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Web镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Web镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Web镜像的公共层还包括第三数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Database镜像的服务层还包括Mysql层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Database镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Database镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,Database镜像的公共层还包括第三数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的服务层还包括Tomcat与JDK层和/或War层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括第一数据层和第二数据层;Web镜像的公共层还包括第三数据层。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤3包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册整合到一起,形成一个完整的项目应用的发布包。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤3包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据、项目的Logo整合到一起,形成一个完整的项目应用的发布包。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤1包括:生成索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像;
步骤2包括:将索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像打散并去除重复的Linux***层,以优化发布包的大小;
步骤3包括:将配置文件、初始化数据、服务镜像整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤3还包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤3还包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据、项目的Logo整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤4包括:步骤41:通过容器启动模块来加载配置文件;步骤42:根据配置文件自动运行项目的应用程序。
作为优选方式,新的项目交付发布包的生成和运行方法,其中,步骤42包括:步骤421:加载配置文件读取客户端的服务对应的初始化配置;步骤422:根据初始化配置来初始化服务;步骤423:根据配置文件确定服务之间的依赖关系并确定服务启动的顺序;步骤424:按照服务启动的顺序调用Docker命令启动相应的服务。
作为优选方式,新的项目交付发布包,包括配置文件、初始化数据和服务镜像,其中,初始化数据用于初始化相应的服务;配置文件用于更改初始化数据来初始化相应的服务和确定服务运行的顺序,以自动运行项目的应用程序;并且,服务镜像用于分层存储完整的服务程序。
作为优选方式,新的项目交付发布包,还包括说明性文档、技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据和/或项目的Logo。
作为优选方式,新的项目交付发布包,其中,多个服务镜像中的至少两个服务镜像的存储结构具有相同的公共层。
作为优选方式,新的项目交付发布包,其中,服务镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
作为优选方式,新的项目交付发布包,其中,公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包,其中,公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包,其中,公共层还包括第三数据层。
作为优选方式,新的项目交付发布包,其中,公共层为Linux镜像存储结构,包括CentOS镜像存储结构、Ubuntu镜像存储结构或Alpine镜像存储结构。
作为优选方式,新的项目交付发布包,其中,多个Web镜像均具有相同的公共层且每个Web镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包,其中,Web镜像的服务层包括Tomcat与JDK层和/或War层。
作为优选方式,新的项目交付发布包,其中,Web镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包,其中,Web镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包,其中,Web镜像的公共层还包括第三数据层。
作为优选方式,新的项目交付发布包,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层。
作为优选方式,新的项目交付发布包,其中,Database镜像的服务层包括Mysql层。
作为优选方式,新的项目交付发布包,其中,Database镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包,其中,Database镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包,其中,Database镜像的公共层还包括第三数据层。
作为优选方式,新的项目交付发布包,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的服务层还包括Tomcat与JDK层和/或War层。
作为优选方式,新的项目交付发布包,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括至少两个数据层。
作为优选方式,新的项目交付发布包,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括第一数据层和第二数据层。
作为优选方式,新的项目交付发布包,其中,至少一个Database镜像与至少一个Web镜像均具有相同的公共层且每个Database镜像与每个Web镜像均包括至少一个服务层;Web镜像的公共层包括第一数据层和第二数据层;Web镜像的公共层还包括第三数据层。
作为优选方式,一种计算机可读存储介质,其上存储有计算机可执行指令,当计算机可执行指令被计算装置执行时,可操作来执行权利要求1-30的方法。
本发明一方面将项目中的各个软件做成配置文件、服务镜像和初始化数据的容器,去除服务镜像的重复层,大幅降低了项目整体的存储空间。
另一方面,通过为服务镜像和初始化数据整体设置配置文件,描述各个软件之间的依赖调用关系,并且,利用Docker技术运行各个镜像,达到了避免繁琐的软件安装配置,移植后项目整体的软件直接运行的目的。
具体实施方式
为了使得本发明的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。基于本发明中描述的本发明实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本发明的保护范围之内。
首先,参照图1来描述本发明的新的项目交付发布包的第一存储结构示意图。
如图1所示,本发明提供了一种新的项目交付发布包,包括配置文件、初始化数据和服务镜像。初始化数据用于初始化相应的服务。配置文件用于更改初始化数据来初始化相应的服务和确定服务运行的顺序,以自动运行项目的应用程序。服务镜像用于分层存储完整的服务程序。
在本发明中,可以通过容器技术将所有项目应用软件及描述其运行环境的配置文件一同打包,封装成一个完整的,可以独立运行的容器。部署实施时,只需要将容器运行起来即可,项目应用软件本身所依赖的运行环境都是由容器内部自己提供,极大的简化了部署,并缩短交付周期,更快的为客户创造价值。容器之间通过Linux自身的namespace和ccgroup机制,实现资源隔离,也有效的保证了应用的隔离性与安全性。
本发明生成的容器可以采用Docker容器技术来启动,其中,发布包可以设置有多个服务镜像,每一个镜像可以看做是一个压缩包,主要包含两部分:数据层和配置数据,其中,数据层可以以文件夹形式分层存储,配置数据存储在配置文件中。数据层的id是由存储的内容进行SHA计算得出,所以如果两个数据层id一样,则数据一致。在本发明中,镜像的数据层可以包括公共层和服务层。
本发明的镜像集合中的每一个镜像是不包含Linux内核的层的集合,Linux中的unionFS会将镜像中的各个层挂到一起,实现一套虚拟机的文件***。本发明的容器能通过服务镜像创建实例并运行。在生成容器后通过智能设备的处理器加载容器即可直接运行可用,并且,通过分层存储所有数据层之间都相互隔离存储互不影响,镜像与镜像之间的区别服务层也相互独立,兼容性高。
本发明生成的发布包可以运行在任意支持Docker的主机上。该主机具有Linux***,或具有支持Docker容器技术的处理器。该处理器可以为中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元。中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元。
制作新的镜像时都需要一个基础镜像,做出自己个性化的修改,而自己修改的部分则会产生新的层(可能是一层或多层),与之前基础镜像的层一起构成新的镜像。多个服务镜像都共用同一基础镜像,因此这样生成的服务镜像就可能包括重复的层,因此,通过在生成发布包时检测重复的层,并且在只保留一个重复的层做为这些服务镜像的公共层来存储。服务镜像均可以包括至少一个服务层。
例如在本实施例中,一种新的项目交付发布包如下,包括配置文件images(例如images可以包括web.config和db.config,其中,web.config用于配置网络服务,db.config用于配置数据库服务)、初始化数据(volumes)和服务镜像layers,其中,初始化数据用于初始化相应的服务;配置文件用于更改初始化数据来初始化相应的服务和确定服务运行的顺序,以自动运行项目的应用程序;并且,服务镜像用于分层存储完整的服务程序。服务镜像均可以包括至少一个服务层。多个服务镜像中的至少两个服务镜像的存储结构具有相同的公共层。参见图4,公共层包括多个数据层(例如数据层可以表示为layer1、layer2····layerN,N大于等于2)。本发明在生成发布包时,自动匹配并去除多个镜像相同的公共层,从而优化发布包的大小。例如,在生成发布包时,可以通过比较SHA值来确定层与层是否相同,当SHA值相同时,自动删除相同的层。服务镜像可以均包括至少一个服务层,例如在本实施例中,网络服务层可以包括Tomcat+JDK层(Tomcat与JDK层)和War层,数据库服务层可以包括Mysql层。公共层为Linux镜像存储结构,可以包括CentOS镜像存储结构、Ubuntu镜像存储结构或Alpine镜像存储结构。上述发布包的格式可以表示为:
该项目发布包还可以包含初始化数据,例如数据库的初始化数据,可以采用volumes来实现,在发布包中,初始化数据可以生成为zip包存储(例如db_vol.zip),该发布包的格式例如:
为了简单方便,可以通过***自动把上述格式的发布包打成一个名为A.zip的压缩包,这是一个最简版的应用发布包的范例,格式如下:
因为***在生成镜像时,能去除镜像的重复层,只保留一个公共层,在启动服务镜像的服务时,这些共用同一个公共层的服务层都调用同样的公共层,依然可以运行相应的服务。因此,这样极大的优化了发布包(例如A.zip)的大小,从而节省了存储空间。
在本实施例中,在步骤1中生成了多个服务镜像,多个服务镜像中的至少两个服务镜像的存储结构具有相同的公共层。服务镜像均包括至少一个服务层。服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。公共层为Linux镜像存储结构,包括CentOS镜像存储结构、Ubuntu镜像存储结构或Alpine镜像存储结构。
具体地,公共层可以包括至少两个数据层,例如公共层可以包括第一数据层、第二数据层和第三数据层。
参照图5来描述用于实现本发明实施例的新的项目交付发布包的服务镜像的第一结构示意图。示例性地,服务镜像包括Web镜像和Database镜像。Web镜像和Database镜像的公共层为CentOS镜像存储结构。Web镜像包括Tomcat与JDK层、War层、公共层。Database镜像包括Mysql层、公共层。本领域技术人员应理解,服务镜像的组成、具体配置文件的撰写方式和初始化数据的结构不仅仅限于本实施例的介绍,无论是什么样的服务镜像、配置文件和初始化数据对本发明的实施均不造成影响。
在本实施例中,Web镜像和Database镜像之间、多个Web镜像之间和/或多个Database镜像之间共用同一个公共层。本发明在生成发布包时,自动匹配并去除多个镜像相同的公共层,从而优化发布包的大小。例如,在生成发布包时,可以通过比较SHA值来确定层与层是否相同,当SHA值相同时,自动删除相同的层。Web镜像的服务层可以包括Tomcat与JDK层、War层等。Database镜像的服务层可以包括Mysql层、Mongo层等。并且,公共层可以包括至少两个数据层。
参照图6来描述用于实现本发明实施例的新的项目交付发布包的服务镜像的第二结构示意图。在本实施例中,服务镜像包括3个Web镜像,2个Database镜像(一个包括Mysql层,一个包括Mongo层),1个索引镜像,其中,3个Web镜像共用同一个公共层。
参照图7来描述用于实现本发明实施例的新的项目交付发布包的服务镜像的第三结构示意图。本实施例优选地,服务镜像的公共层包括多个数据层,可以表示为layer1、layer2····layerN。
参照图8来描述用于实现本发明实施例的新的项目交付发布包的服务镜像的第四结构示意图。本实施例优选地,服务镜像的公共层可以包括第一数据层layer1、第二数据层layer2和第三数据层layer3。
在本实施例中,服务镜像的组成结构可以为例如:项目A,包含两个软件,一份初始化数据。一个Web镜像,一个数据库(Database)镜像以及初始数据data(原始资源文件)。为了简单明了,在下文中,每个层的ID用layer1、layer2、layer3、Tomcat+JDK、War、Mysql代替。
公共层包含了原始资源文件形成的layer1(第一数据层)、layer2(第二数据层)、layer3(第三数据层)三个层。Web镜像可以在公共层的基础上增加两个数据层,这两个数据层分别为Tomcat+JDK层和War层。Database镜像可以在公共层的基础上增加一个数据层,该数据层为Mysql层。
生成的发布包,包括Web镜像和Database镜像、配置文件和初始化数据。
配置文件用于适配不同的***环境,包括镜像配置。镜像配置包括各个服务的内存、CPU、工作参数、端口、账号和密码的配置,以及各个服务之间的依赖关系,其中服务包括Web服务和Database服务。配置文件例如Web镜像配置和Database镜像配置,用于自动配置并运行Web镜像和Database镜像对应的服务,以启动整个项目。
本实施例的服务镜像分层存储时,将服务镜像打散并去除重复数据层。该服务镜像打散时,可以包括如下数据层例如:多个重复的第一数据层、多个重复的第二数据层、多个重复的第三数据层、Tomcat与JDK层、War层和Mysql层。本发明可以自动识别并去除重复的数据层,例如去除本实施例中的多余的第一数据层、第二数据层和第三数据层。生成的发布包仅仅包括一个第一数据层、一个第二数据层、一个第三数据层、一个Tomcat与JDK层、一个War层和一个Mysql层。
参照图2来描述用于实现本发明实施例的新的项目交付发布包的第二存储结构示意图。图1的发布包的第一存储结构中只包含了项目最有用的数据,而缺少项目的一些基本信息,例如项目名称、版本号、使用方式等。如图2所示,为解决上述缺陷,发布包除了服务镜像、服务的配置文件和初始化数据之外,还可以包括说明性文档和使用手册(例如,A使用手册.doc),例如:
A使用手册.doc
参照图3来描述用于实现本发明实施例的新的项目交付发布包的第三存储结构示意图。本实施例优选地,该发布包还包括额外数据配置、项目配置描述文件、项目说明信息、额外数据和/或项目的Logo。额外数据配置用于运行镜像服务以外的其他功能。
示例性地,根据本发明实施例的新的项目交付发布包可以包括项目配置描述文件。并且,可以将项目配置描述文件写入info.xml,方便扩展,合并config.yaml到这个文件。配置描述文件info.xml,用于描述卷和容器的对应关系,以及卷映射到容器内部的路径信息。卷为一个有着别名的目录***的目录,主要是用来存放数据,容器可以通过别名映射到容器内部,从而达到访问卷内数据的目的。该发布包的结构可以为如下结构:
A使用手册.doc
info.xml
在该发布包中,此时info.xml内容可以例如:
发布包还可以包含项目说明信息(例如,readme.md)和项目Logo(例如,logo.jpg)其中,项目说明信息可以采用markdown格式编写,例如:
A使用手册.doc
info.xml
readme.md
logo.jpg
在上述发布包的实施例中:
images表示存放服务所使用的镜像配置,每个配置中记录了还原该镜像的数据层的信息。
layers表示镜像的数据层。
volumes表示项目的额外数据。
resources表示项目的额外文档或其他资料,例如说明性文档和技术手册。
info.xml表示项目配置描述文件。
readme.md表示项目说明信息。
logo.jpg表示项目的Logo。
此时对应的info.xml中yaml内容,描述了卷和容器的对应关系,以及卷映射到容器内部的路径信息,可以修改为:
在上述文件中:
services:定义项目中包含了哪些服务,上述文件中,包含了web(网络)服务和db(数据库)服务,这两个服务的名称是Web和Database的别名。
image表示服务所对应的镜像。
mem_limit表示服务所使用的内存最大限制。
mem_res表示服务独占的内存,这个值和最大内存之间的差值为共享内存。
cpu_limit表示最大可使用的CPU核数。
cpu_reservation表示独占CPU。
environment表示给服务内设置的环境变量。
depends_on表示依赖的服务。
本发明一方面将项目中的各个软件做成配置文件、服务镜像和初始化数据的容器,去除服务镜像的重复层,大幅降低了项目整体的存储空间。
另一方面,通过为服务镜像和初始化数据整体设置配置文件,描述各个软件之间的依赖调用关系,并且,利用Docker技术运行各个镜像,达到了避免繁琐的软件安装配置,移植后项目整体的软件直接运行的目的。
示例性地,用于实现根据本发明实施例的新的项目交付发布包可以被运行在诸如智能手机、平板电脑等支持容器技术的智能设备上。
下面,将参考图9描述根据本发明实施例的新的项目交付发布包的第一生成方法。
首先,在步骤S1,生成项目应用程序中服务的服务镜像,其中,服务镜像的存储结构为具有多个数据层的分层存储结构。然后,在步骤S2,将服务镜像打散并去除重复数据层,以优化发布包的大小。之后,在步骤S3,将配置文件、初始化数据和服务镜像整合到一起,形成一个完整的项目应用的发布包。
可以通过本地***扫描需要打包的所有服务,并将服务分别生成服务镜像,该服务镜像包括多个数据层。配置文件可以通过用户将特殊的配置数据输入模板来生成。配置文件记录了初始化服务和服务调配的方式和顺序等。除此之外,配置文件还可以链接一些额外数据。
发布包形成的容器可以记录所有数据层的结构,用于存放服务所使用的镜像数据,每个镜像数据中记录了还原该镜像或运行相应服务所需要调用的数据层的层信息。
在本实施例中,在步骤1中生成了多个服务镜像,多个服务镜像中的至少两个服务镜像的存储结构具有相同的公共层。服务镜像均包括至少一个服务层。服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。公共层为Linux镜像存储结构,包括CentOS镜像存储结构、Ubuntu镜像存储结构或Alpine镜像存储结构。
具体地,公共层可以包括至少两个数据层,例如公共层可以包括第一数据层、第二数据层和第三数据层。
例如,服务镜像的Web镜像和Database镜像之间、多个Web镜像之间和/或多个Database镜像之间共用同一个公共层。本发明在生成发布包时,自动匹配并去除多个镜像相同的公共层,从而优化发布包的大小。例如,在生成发布包时,可以通过比较SHA值来确定层与层是否相同,当SHA值相同时,自动删除相同的层。
Database镜像的服务层可以包括Mysql层。并且,Database镜像的公共层包括至少两个数据层,例如Database镜像的公共层可以包括第一数据层、第二数据层和第三数据层。
Web镜像的服务层还包括Tomcat与JDK层和/或War层。并且,Web镜像的公共层包括至少两个数据层,例如Web镜像的公共层可以包括第一数据层、第二数据层和第三数据层。
在本实施例中,例如,如果一个发布包的服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。那么本发明的生成方法可以包括如下步骤:
步骤1:生成索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像;
步骤2:将索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像打散并去除重复的Linux***层,以优化发布包的大小;
步骤3:将配置文件、初始化数据、服务镜像整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
并且,在上述生成方法中,用户可以根据需要在步骤3生成发布包时加入其他的数据,例如,步骤3还可以包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
再例如,步骤3还可以包括:将配置文件、初始化数据、服务镜像、说明性文档和技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据、项目的Logo整合到一起,形成一个完整的项目应用的发布包,其中,服务镜像包括索引镜像、缓存镜像、计算镜像、Web镜像和/或Database镜像。
参照图10来描述本发明的新的项目交付发布包的第二生成方法。
在本实施例中,该实施例与第一生成方法的区别仅在于步骤3。在步骤3生成发布包时,该实施例中,除了整合第一生成方法中涉及的配置文件、初始化数据、服务镜像之外,还一并整合说明性文档和技术手册,以形成发布包。
参照图11来描述本发明的新的项目交付发布包的第三生成方法。
在本实施例中,该实施例与第一生成方法和第二生成方法的区别仅在于步骤3。在步骤3生成发布包时,该实施例中,除了整合第一生成方法中涉及的配置文件、初始化数据、服务镜像之外,还一并整合说明性文档和技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据、项目的Logo,以形成发布包。
下面,将参考图12描述根据本发明实施例的新的项目交付发布包的第一生成和运行方法。发布包的第一生成和运行方法与发布包的第一生成方法的区别仅在于生成和运行方法还包括运行发布包的方法。该运行发布包的方法步骤S4包括在任意支持Docker的主机上运行项目应用的发布包。本发明的发布包的容器在根据配置文件运行相应的服务时,能够解析相应的服务镜像,调用相应的数据。发布包项目可以通过Docker技术来运行。
在步骤S1生成镜像时,可以采用Dockerfile来生成镜像,例如可以设置为如下Dockerfile:
FROM centos
ADD ROOT.war/opt/tomcat/webapps
可以通过Docker命令构建出一个自己的镜像。制作新的镜像时都需要一个基础镜像(例如,本实施例的Dockerfile中,是以centos为基础镜像),做出自己个性化的修改,而自己修改的部分则会产生新的层(可能是一层或多层),与之前基础镜像的层一起构成新的镜像。多个服务镜像都共用同一基础镜像,因此这样生成的服务镜像就可能包括重复的层,因此,通过在生成发布包时检测重复的层,并且在只保留一个重复的层做为这些服务镜像的公共层来存储。
虽然,这样生成Web镜像和Database镜像等服务镜像可以来减少原本在部署实施时的软件安装工作。但仍有缺陷,例如需要根据服务之间的依赖关系,先启动数据库,再启动Web,还需要配置内存、CPU,配置,配置端口、账号、密码等。
为了解决上述缺陷,本发明在配置文件中可以设置描述文件。该描述文件用于根据服务之间的依赖关系,例如自动先启动数据库(Database)服务后启动Web服务等。该描述文件还可以自动配置内存、CPU,配置,配置端口、账号、密码等。配置文件格式可以例如:
生成服务镜像,在配置文件中配置好服务之间的依赖关系,就可以在任意一台支持Docker技术的主机上正常启动发布包的应用程序。启动应用时会分析配置文件,确定依赖关系,以及每个服务配置的内存,CPU等信息,按照依赖顺序分别调用Docker命令启动。
参照图13来描述本发明的新的项目交付发布包的第二生成和运行方法。
在本实施例中,该实施例与第一生成和运行方法的区别仅在于步骤3。在步骤3生成发布包时,该实施例中,除了整合第一生成和运行方法中涉及的配置文件、初始化数据、服务镜像之外,还一并整合说明性文档和技术手册,以形成发布包。
参照图14来描述本发明的新的项目交付发布包的第三生成和运行方法。
在本实施例中,该实施例与第一生成和运行方法和第二生成和运行方法的区别仅在于步骤3。在步骤3生成发布包时,该实施例中,除了整合第一生成和运行方法中涉及的配置文件、初始化数据、服务镜像之外,还一并整合说明性文档和技术手册、额外数据配置、项目配置描述文件、项目说明信息、额外数据、项目的Logo,以形成发布包。
参照图15来描述本发明的新的项目交付发布包的生成和运行方法的启动示意性流程图。在本实施例的生成和运行方法的启动步骤可以用在第一生成和运行方法、第二生成和运行方法和第三生成和运行方法的步骤4中。示例性地,在其它支持Docker技术的主机上运行本发明时,包括如下步骤:
首先,在步骤S41,通过容器启动模块来加载配置文件;
然后,在步骤S42,根据配置文件自动运行项目的应用程序。
参照图16来描述本发明的新的项目交付发布包的生成和运行方法的更详细的启动示意性流程图。在上述步骤S4的步骤S42中,可以包括如下步骤:
首先,在步骤S421,加载配置文件读取客户端的服务对应的初始化配置。然后在步骤S422,根据初始化配置来初始化服务;
之后,在步骤S423:根据配置文件确定服务之间的依赖关系并确定服务启动的顺序;
最后,在步骤S424,按照服务启动的顺序调用Docker命令启动相应的服务。
更具体地,首先,在步骤S421,加载配置文件读取客户端的网络服务和数据库服务对应的初始化配置。然后在步骤S422,根据初始化配置来初始化网络服务和数据库服务。之后,在步骤S423,根据配置文件确定网络服务和数据库服务之间的依赖关系并确定网络服务和数据库服务启动的顺序。最后,在步骤S424,按照网络服务和数据库服务启动的顺序调用Docker命令启动相应的服务。初始化配置可以包括各个服务对应的内存、CPU,基本配置、端口、账号和密码。
启动镜像时,可以通过Docker Run命令来实现。在执行Docker Run命令创建这个镜像实例并启动镜像时,利用分层存储技术,根据每个镜像的配置文件中层的顺序进行挂载,形成一个完整的文件***,再利用Linux的namespace技术进行容器隔离(文件***隔离、进程隔离、网络隔离等),达到每个容器都是相互独立的目的。
本发明一方面将项目中的各个软件做成配置文件、服务镜像和初始化数据的容器,去除服务镜像的重复层,大幅降低了项目整体的存储空间。
另一方面,通过为服务镜像和初始化数据整体设置配置文件,描述各个软件之间的依赖调用关系,并且,利用Docker技术运行各个镜像,达到了避免繁琐的软件安装配置,移植后项目整体的软件直接运行的目的。
应了解,生成Web镜像和/或Database镜像等服务镜像,以及打散镜像去除重复层可以并行同步处理。这样能够极大的提高数据处理的效率,有效地防止***延迟。
示例性地,根据本发明实施例的新的项目交付发布包的生成和运行方法可以在具有存储器和处理器的设备、装置或者***中实现。
应了解本发明不受具体采用的服务镜像、配置文件、初始化数据、镜像生成和运行方法和容器启动技术的限制,无论是现有技术还是将来开发的技术,都可以应用于根据本发明实施例的新的项目交付发布包的生成和运行方法中,并且也应包括在本发明的保护范围内。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本发明的新的项目交付发布包的***,可以包括一个或多个容器生成模块、一个或多个容器启动模块,其中,容器生成模块设置在要移植项目的第一智能设备的原***中,容器启动模块可以包含在第二智能设备的目标***中。第一智能设备和第二智能设备之间可以通过网络相互连接。第一智能设备通过原***将生成的容器通过网络发送到第二智能设备,通过第二智能设备的目标***加载并运行容器,直接运行移植的项目。容器生成模块和容器启动模块可以集成在一起,也可以相互独立,通过总线***和/或其它形式的连接机构互连。
根据本发明实施例,第一智能设备和第二智能设备均包括存储器,在存储器上存储了程序指令,在程序指令被计算机或处理器运行时用于执行本发明实施例的新的项目交付发布包的生成和运行方法的相应步骤。存储器例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、或者上述存储器的任意组合。计算机可读存储器可以是一个或多个计算机可读存储器的任意组合。
在一个实施例中,一种计算机可读存储介质,其上存储有计算机可执行指令,当计算机可执行指令被计算装置执行时,可操作来执行本发明的方法。计算机程序指令在被计算机运行时,可以执行根据本发明实施例的方法。
根据本发明实施例的新的项目交付发布包的***的各部件的功能可以通过运行在存储器中存储的计算机程序指令来实现,或者可以在根据本发明实施例的计算机程序产品的计算机可读存储器中存储的计算机指令被计算机运行时实现。
本发明一方面将项目中的各个软件做成配置文件、服务镜像和初始化数据的容器,去除服务镜像的重复层,大幅降低了项目整体的存储空间。
另一方面,通过为服务镜像和初始化数据整体设置配置文件,描述各个软件之间的依赖调用关系,并且,利用Docker技术运行各个镜像,达到了避免繁琐的软件安装配置,移植后项目整体的软件直接运行的目的。
尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本发明的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本发明的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本发明的范围之内。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,或一些特征可以忽略,或不执行。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该本发明的的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如相应的权利要求书所反映的那样,其发明点在于可以用少于某个公开的单个实施例的所有特征的特征来解决相应的技术问题。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域的技术人员可以理解,除了特征之间相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明设备中的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。
以上,仅为本发明的具体实施方式或对具体实施方式的说明,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以权利要求的保护范围为准。