首页> 中国专利> 一种在容器环境中基于镜像装载的镜像构建及装载方法

一种在容器环境中基于镜像装载的镜像构建及装载方法

摘要

本发明提出一种在容器环境中基于镜像装载的镜像构建及装载方法,包括如下步骤:步骤1、在镜像构建时,将基础运行环境部分和服务业务逻辑部分进行解耦;步骤2、解耦后将第一操作系统和基础软件构建为基础镜像;步骤3、将第二操作系统和服务程序部分构建为服务镜像,其中,所述第二操作系统占用的存储空间小于所述第一操作系统。将服务镜像和基础镜像分离,业务逻辑的镜像体积相对较小,有利于镜像的存储、分发。

著录项

  • 公开/公告号CN112685134A

    专利类型发明专利

  • 公开/公告日2021-04-20

    原文格式PDF

  • 申请/专利权人 中科星图股份有限公司;

    申请/专利号CN202011637535.1

  • 申请日2020-12-31

  • 分类号G06F9/455(20060101);G06F8/61(20180101);G06F8/65(20180101);G06F11/36(20060101);

  • 代理机构11251 北京科迪生专利代理有限责任公司;

  • 代理人张乾桢

  • 地址 101399 北京市顺义区临空经济核心区机场东路2号国家地理信息科技产业园1A-4星图大厦

  • 入库时间 2023-06-19 10:41:48

说明书

技术领域

本发明涉及计算机系统领域,尤其是一种基于镜像装载的镜像构建及装载方法。

背景技术

Docker image是实现应用的存储、分发载体,其依赖于很多底层的技术,包括联合文件系统,写时复制等等。

镜像分层:镜像(Image)是一堆只读层(read-only layer)的统一视角,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,是一个文件系统。

镜像调度管理工具:常见的容器调度管理工具有多种,如kubernets、swarm、mecos、等。其中,kubernetes的市场占有率最高,成为镜像调度管理工具的事实标准。Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetes的服务、支持和工具广泛可用。

微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务公用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的存储技术。

云原生:云原生是基于分布部署和统一运管的云端服务,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

云原生由微服务架构、DevOps和以容器为代表的基础架构组成。在生产实践过程中,随着微服务规模的增大,服务部署、运维过程遇到了诸多难题,诸如:镜像频繁构建,镜像体积过大,镜像有效内容占比小,镜像中程序和镜像中运行环境绑定,程序升级过程中镜像需要重做,打补丁过程中需批量替换镜像等。如何解决服务上述问题,对于简化部署运维复杂性,降低人力和时间成本至关重要。

虽然目前的一些方法可以解决大部分应用程序包更新的问题,但仍存在如下一些问题:

1、目前大部分镜像构建完成后,镜像中携带了服务运行过程中所需要的全部运行环境。比如java语言的war包程序,在运行过程中需要jvm环境和Tomcat环境等。在商业环境下,做出的镜像通常在几百兆的规模。而在对容器化不友好的一些操作系统中,镜像会达到1G甚至更大。较大的镜像会引发比如镜像构建消耗的时间更长;镜像的存储需要空间更多;镜像的传输或分发需要更多的时间等问题。特别是:镜像中真实有效的程序大小可能只有几十兆甚至几兆的大小,使得镜像中有效内容占比过小。

2、镜像过大,在镜像的分发、存储过程中,对环境提出了巨大的挑战。在分发过程中造成困难比如:在实时性有要求的场景下,镜像分发的时间消耗对于场景有决定性的作用。镜像过大势必会增大镜像分发的时间成本,进而对网络带宽提出了更高的要求。在边缘环境下,体积较大的镜像会消耗更时间,分发过程中出现网络问题的可能性更高,对于搭载服务的部署、升级等会造成操作上的困难,对网络的稳定性也提出更高的要求。在存储过程中造成困难由于边缘场景下存储有较大的限制,过大的镜像会对边缘环境下存储管理提出挑战。

3、目前镜像构建时,需要明确服务运行时的操作系统,这会引发一些不便或者问题。比如:如果构建镜像的环境中没有目标操作系统的镜像,那么就没有办法构建;镜像一经构建,就与镜像中的操作环境进行了绑定,没有办法根据实际的运行环境,根据需要灵活调整服务的操作系统,例如没有办法灵活地将程序从centos运行环境灵活的调整为更加轻量的alpine运行环境;相同的服务要适配不同的运行操作系统需要分别制作镜像,造成时间和人力成本的浪费。

4、目前镜像构建时,需要明确服务运行时的运行环境。这会引发一些不便或者问题。比如:如果构建镜像的环境中没有目标运行环境的镜像,那么就没有办法进行镜像的构建;镜像已经构建,就与镜像中的运行环境进行了绑定,没有办法根据实际的运行环境进行灵活的调整,例如java程序的war包程序没有办法灵活地从Tomcat的7.0版本调整为8.5版本,或者从Tomcat换成金蝶或者东方通等;相同的服务要适配不同的运行环境需要制作不同的镜像,造成时间和人力成本的浪费;在使用的过程中,如果要对镜像的运行环境进行扩展需要重新构建镜像,比如在镜像中添加注入远程调试或者链路追踪等需求时,需要更改运行环境的配置,传统的镜像构建方式需要重新构建镜像,更新起来较复杂;在使用的过程中,如果需要将云平台中搭载的镜像中的某种运行环境进行集体的升级,传统的使用方式需要将镜像全部重新构建,时间、人力、安全成本巨大等。

5、传统的在容器启动时,通过脚本从指定位置拉取服务程序的方式需要引入额外的组件进行支持。这会引入新的不便或问题。比如:拉取服务的过程不能进行差分传输,可能会需要较长的时间,造成容器启动后需要较长的时间才能提供业务功能,抵消了容器技术能够快速启动的优势;拉取的文件不能保证正确,整个过程的安全性存在漏洞,丢失了镜像自身具有的安全性检查和认证等优势。

发明内容

本发明提出一种在容器环境中基于装载模式的镜像构建及装载方法,采用了镜像装载的方式在容器云环境下使用镜像,解决了上述存在的几个问题。在镜像构建时,将基础运行环境部分和服务业务逻辑部分进行解耦。在容器云环境下,只需要对业务逻辑部分的镜像进行分发,装载在对应的基础镜像基座上,就能够正常运行。因为业务逻辑和基座是分离的,业务逻辑的镜像会很小,有利于镜像的存储、分发。业务逻辑镜像还能和不同的基座进行组合,装载出运行在不同环境下的服务。并且只需要对基座进行更新,就可以完成运行环境的批量更新、功能扩展等功能。本发明基于装载模式的镜像使用方法,是在镜像的构建过程中进行了优化,使用的仍然是原有的镜像分发和存储机制,没有引入新的组件,降低了系统的复杂性。

本发明的技术方案为:一种在容器环境中基于镜像装载的镜像构建方法,包括如下步骤:

步骤1、在镜像构建时,将基础运行环境部分和服务业务逻辑部分进行解耦;

步骤2、解耦后将第一操作系统和基础软件构建为基础镜像;

步骤3、将第二操作系统和服务程序部分构建为服务镜像,其中,所述第二操作系统占用的存储空间小于所述第一操作系统。

进一步的,所述步骤2中,基础镜像部分在业务场景中是能够进行复用的,用于减少存储、传输、分发过程中的数据传输量。

进一步的,运行环境中采用统一的基础镜像,且在更新时,通过远程控制,对基础镜像的批量升级或者批量功能扩展操作。

进一步的,在容器云环境下,只对业务逻辑部分的服务镜像进行分发,装载在对应的基础镜像上。

进一步的,所述服务镜像还能和不同的基础镜像进行组合,拼装成运行在不同环境下的组合,通过只对基础镜像进行更新,完成运行环境的批量更新、功能扩展。

进一步的,通过调整基础镜像,实现不同运行时环境的调整;实现不更改镜像条件下不同埋点成程序集成;实现不更改镜像条件下运行在容器云环境的远程调试。

进一步的,通过挑选携带有debug能力的基础镜像进行远程的debug,而不用专门制作相应的远程调试镜像。

根据本发明的另一方面,提出一种在容器环境中基于装载模式的镜像装载方法,包括如下步骤:

步骤1、在镜像构建时,将基础运行环境部分和服务业务逻辑部分进行解耦;

步骤2、解耦后将第一操作系统和基础软件构建为基础镜像;

步骤3、将第二操作系统和服务程序部分构建为服务镜像,其中,所述第二操作系统占用的存储空间小于所述第一操作系统。

步骤4、在容器云环境启动时,同时启动基础镜像和服务镜像,服务镜像和基础镜像进行目录共享,通过装载模式,完成服务镜像和基础镜像的组装。

进一步的,用户在一种运行环境中构建服务镜像,能够同时运行在多种运行环境。

进一步的,通过替换原有基础镜像的方式来实现装载模式运行环境的批量更新。

进一步的,通过镜像的解耦,减少了镜像分发时对带宽的要求。

有益效果:

本发明提出的一种在容器环境中基于装载模式的镜像构建及装载方法,相对于传统技术的主要优点有:

1、传统镜像构建时,包含了大量与镜像业务程序相关的内容。这些内容是业务程序启动并运行所必需的,但是这部分内容具有极大的通用性。通过将传统镜像拆分成两部分:服务镜像和基础镜像。基础镜像可以广泛的复用。服务镜像的体积基本上和服务程序大小相等。极大的减少了镜像的大小,解决了镜像体积过大的痛点。

2、传统的镜像因为携带了服务运行所需要的全部运行环境,体积较大。构建出来的镜像常常达到1G甚至更大的规模。而镜像中真实有效的程序可能只有几十M甚至几M大小。将服务镜像和基础镜像分离,业务逻辑的镜像体积相对较小,有利于镜像的存储、分发。

3、分拆后的基础镜像可以根据容器云的业务场景进行灵活的替换。比如,调整基础镜中基础组件的版本。因为镜像是经过拆分的,所以变化只和基础镜像有关。服务镜像不需要重新构建。减少了大量的人力、时间成本。

4、分拆后的业务运行可以根据容器云的业务场景灵活地挑选基础镜像来组合成完整的镜像提供服务。比如:在边缘场景下对存储容量受到限制,这时挑选体积较小的基础镜像(alpine)作为装载的底座可以减少镜像分发的时间。再比如:可以挑选携带有debug能力的基础镜像进行远程的debug,而不用专门制作相应的远程调试镜像。

附图说明

图1:本发明的系统框图;

图2:装载模式结构业务场景示意图;

图3:装载模式结构业务场景的示例;

图4:基于容器的服务装载过程;

图5:传统镜像和装载模式镜像在不同运行环境下的运行区别;

图6:传统镜像和装载模式镜像在不同运行环境下的运行区别示例;

图7:传统镜像和装载模式镜像在批量更新时的区别;

图8:传统镜像和装载模式镜像在批量更新时的区别示例。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。

本发明提供了一种在容器环境中基于镜像装载的镜像构建方法及装载方法,系统运行的整体流程图如图1所示,包括如下步骤:

步骤1、在镜像构建时,将基础运行环境部分和镜像业务逻辑部分进行解耦;

步骤2、解耦后将第一操作系统和基础软件构建为基础镜像;

步骤3、将第二操作系统和服务程序部分构建为服务镜像,其中,所述第二操作系统占用的存储空间小于所述第一操作系统。

步骤4、在容器云环境启动时,同时启动基础镜像和服务镜像,服务镜像和基础镜像进行目录共享,通过装载模式,完成服务镜像和基础镜像的组装。

根据本发明的一个实施例,通过将服务程序和基础运行环境分别构建镜像的方式;以实现基础运行环境的复用、批量升级、批量扩展等功能。

如图2所示,在业务场景中,通常需要有确定的操作系统、基础软件和服务程序共同组成。然而,操作系统和基础软件通常都是一样的,如果将操作系统和基础软件都封装到镜像中,会造成镜像体积的庞大,进而引起存储,传输,分发等一些列问题。在容器技术中,操作系统可以做到很小,已知的最小的操作系统busybox镜像可以做到只有4M大小甚至更小。如果将服务程序单独和操作系统封装在一起就可以组成一个较小的镜像。这样将常规的镜像拆分成了两部分,一部分称为基础镜像(由原有的操作系统和基础软件部分组成);一部分称为服务镜像(由体积小的另一种操作系统和服务程序部分组成)。由于基础镜像部分在业务场景中是可以进行复用的,所以可以减少存储、传输、分发过程中的一系列问题。并且因为运行环境中采用的是统一的基础镜像,也方便进行对基础镜像的批量升级或者批量功能扩展等操作。

根据本发明的一个实施例,如图3所示,一个基于java开发的jar包程序,在实际部署的时候,可以在centos6.7系统上运行,需要该环境中有jre1.8环境。传统的镜像构建时,会将这两部分封装到统一个镜像中。而使用装载方式构建镜像时,会构建出两个镜像,其中,基础镜像中包含centos6.7操作系统,jre1.8环境;服务镜像中包含busybox操作系统和程序jar包。因为基础镜像可以进行复用,所以在实际使用过程中,相同的基础镜像只用拉取一次,减少了对网络带宽的需求。得益于基础镜像和服务镜像的解耦,如果需要对基础镜像进行升级,可以替换基础镜像到新的版本上即可。而对于功能扩展,如通过调整基础镜像中jre为jdk并开启Tomcat进行远程调试的设置,可以扩展镜像中服务的远程调试功能。如通过在基础镜像中添加业务追踪踩点工具如skywalking或pinpoint,可以实现对java程序的业务调用链条的跟踪和分析,以此实现功能扩展。这些操作,都是在不修改程序或镜像的前提下执行的,大大简化了运维管理的难度。

根据本发明的一个实施例,如图4所示,在容器云环境启动时,同时启动基础镜像和服务镜像。由于服务镜像实例和基础镜像实例进行了目录共享,所以此时基础镜像实例实际上等同于未进行装载模式拆分时的完整镜像。

根据本发明的一个实施例,提出一种将服务镜像和基础镜像进行组装的装载模式。方便用户可以在一种运行环境中构建镜像,同时运行在多种运行环境的目标。

根据本发明的一个实施例,如图5所示,将镜像拆分成基础镜像和服务镜像后,实际上服务镜像已经和基础镜像进行了逻辑上的解耦。在业务的组装时,只要基础镜像中提供了服务镜像所需要的基础软件的要求,那么这两种镜像就可以进行装载。

根据本发明的一个实施例,如图6:一个基于java开发的jar包程序,在实际部署的时候,可以在centos6.7系统上运行,需要该环境中有jre1.8环境。使用装载方式构建镜像时,会构建出两个镜像,其中,基础镜像中包含centos6.7操作系统,jre1.8环境;服务镜像中包含busybox操作系统和程序jar包。而对于另一个基础镜像(包含centos7.2操作系统,jre1.10环境)因为满足了服务镜像所需要的运行环境要求,也是可以组装成一个新的业务场景模板。推而广之,在x86环境下,也可以构建出arm环境下运行需要的服务镜像,进而将服务镜像推广到多种运行环境中去。

根据本发明的一个实施例,提出一种基于装载模式的批量更新镜像中运行环境的方法。方便在测试或者生产环境中对基础运行组件的升级工作。

如图7所示,镜像拆分为基础镜像和服务镜像后,服务镜像和原有的基础镜像已经进行了解耦。只要基础镜像中携带的基础软件能够和服务镜像的需求进行匹配,那么就可以供服务镜像所装载。基于这一特点,可以通过替换原有基础镜像的方式来实现装载模式的批量更新。

举例如图8所示:在生产环境中,jre发现了bug需要进行版本的更新,传统的镜像如果遇到这一情景,需要生产环境中所有的镜像重新构建。而在装载方式的镜像中,只需要更新基础镜像就可实现运行环境的批量更新。

本发明装载方式的使用方法将原有的一个镜像分拆成了两个镜像:基础镜像和服务镜像。基础镜像具有很大的通用性,所以可以广泛的复用。

本发明将服务镜像和基础镜像分离,业务逻辑的镜像体积相对较小,有利于镜像的存储、分发。

本发明装载方式运行在容器云环境的服务,因为基础镜像是复用的,那么由于基础镜像中运行组件的升级、补丁等原因造成的服务升级可以被限定在对基础镜像的升级,而与业务逻辑部分无关。

以装载方式运行在容器云环境的服务,可以借助基础镜像和业务逻辑是分开的这一特点,发展处新的业务形式。比如,通过调整基础镜像,实现不同运行时环境的调整;实现不更改镜像条件下不同埋点程序集成;实现不更改镜像条件下运行在容器云环境的远程调试。

尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,且应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号