CN114064190A - 一种容器启动方法及装置 - Google Patents
一种容器启动方法及装置 Download PDFInfo
- Publication number
- CN114064190A CN114064190A CN202010751890.5A CN202010751890A CN114064190A CN 114064190 A CN114064190 A CN 114064190A CN 202010751890 A CN202010751890 A CN 202010751890A CN 114064190 A CN114064190 A CN 114064190A
- Authority
- CN
- China
- Prior art keywords
- container
- image
- server
- file
- mirror image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
Abstract
本申请公开了一种容器启动方法及装置,该方法包括:第一服务器接收容器启动请求,容器启动请求包含业务镜像的镜像名;第一服务器根据镜像名获取辅助镜像,辅助镜像与业务镜像一一对应;第一服务器基于辅助镜像懒加载业务镜像的部分信息,以建立进程以及进程的运行环境,部分信息包括容器启动时所需的必要文件;第一服务器基于辅助镜像指导进程在运行环境中运行,以实现启动容器。实施本申请实施例,能够实现节省容器启动时进程的初始化时间,提高容器的启动速度。
Description
技术领域
本申请计算机应用技术领域,尤其涉及一种容器启动方法及装置。
背景技术
在计算机系统中,容器(container)是一种操作系统层次上的资源的虚拟化,用以隔离进程和资源。容器技术因其具有轻量化、性能高、资源省、跨平台等技术特点,容器的应用范围也越来越广泛。容器具有自己的文件系统、CPU和内存,意味着容器能像虚拟机一样独立运行,且占用更少的资源。
容器是基于镜像产生的,容器是镜像的运行实例。容器的启动时间主要取决于镜像的下载时间以及业务启动(或称为业务初始化)时间,相关技术中通过从镜像仓库中拉取整个业务镜像写入到本地计算机的磁盘,对于大型应用,其对应的容器也大,则业务镜像的下载时间长,同时大型应用需要较长的业务启动时间,从而严重影响容器的启动速度,无法满足无服务器架构或者边缘场景下容器启动的要求。
发明内容
本申请实施例公开了一种容器启动方法及装置,能够实现节省容器启动时进程的初始化时间,提高容器的启动速度,大大减少业务的部署时间。
第一方面,本申请实施例提供了一种容器启动方法,所述方法包括:第一服务器接收容器启动请求,容器启动请求包含业务镜像的镜像名;第一服务器根据镜像名获取辅助镜像,辅助镜像与业务镜像一一对应;第一服务器基于辅助镜像懒加载业务镜像的部分信息,以建立进程以及进程的运行环境,部分信息包括容器启动时所需的必要文件;第一服务器基于辅助镜像指导进程在运行环境中运行,以实现启动容器。
可以看到,通过业务镜像的辅助镜像实现容器的快速启动,基于辅助镜像懒加载业务镜像中的部分信息,有效减少了容器启动时业务镜像的下载内容以及下载时间,基于辅助镜像指导进程在运行环境中运行,减少了容器内进程的初始化时间,从而提高了容器的启动速率,实现了容器的快速启动。
基于第一方面,在可能的实施例中,所述第一服务器根据镜像名获取辅助镜像包括:所述第一服务器根据镜像名懒加载辅助镜像。
通过懒加载的方式获取辅助镜像,即无需一次性下载辅助镜像的所有内容,而是根据辅助镜像中内容使用的实际情况按需下载辅助镜像中的对应内容,如此将辅助镜像中的内容从一次下载转变为分少量多次下载,从而降低每次下载时网络的资源占用率,减少性能开销,提高了下载速度,有效减少了容器的启动时间。
基于第一方面,在可能的实施例中,辅助镜像包含文件列表信息和快照文件,文件列表信息包含容器启动时所需的必要文件的文件名;快照文件用于指示容器启动完成时进程的运行状态;第一服务器基于辅助镜像懒加载业务镜像的部分信息包括:第一服务器基于文件列表信息懒加载业务镜像的部分信息;第一服务器基于辅助镜像指导进程在运行环境中运行包括:第一服务器基于快照文件指导进程在运行环境中运行。
辅助镜像包括文件列表信息,基于文件列表信息中的文件名从业务镜像中下载容器启动时对应的必要文件,以建立进程本身以及进程的运行环境,文件列表信息记录了容器启动时所需的必要信息,避免了业务镜像中不必要信息的加载,减少了业务镜像中内容的下载数量,从而减少了下载时间。辅助镜像中还包括快照文件,快照文件可以时容器内的进程快速达到初始化完成时的运行状态,节省了容器内进程的初始化时间,能有效提高容器的启动速率。
基于第一方面,在可能的实施例中,文件列表信息具体包括多个文件名;第一服务器基于文件列表信息懒加载业务镜像的部分数据,包括:第一服务器根据文件列表信息中多个文件名的列表顺序依次加载业务镜像中每个文件名对应的必要文件。
文件列表信息中包含多个文件名时,多个文件名的列表顺序即为容器启动时该文件名对应的必要文件被访问的顺序,以使第一服务器根据文件名的列表顺序依次加载业务镜像中对应的必要文件,有效提高了容器的启动速率,减少了容器的启动时间。
基于第一方面,在可能的实施例中,第一服务器获取辅助镜像之前,方法还包括:第一服务器向第三服务器发送查找命令,查找命令包含业务镜像的镜像名,查找命令用于指示第三服务器在镜像仓库中查找是否存在业务镜像和辅助镜像;第一服务器根据镜像名获取辅助镜像,包括:在镜像仓库存在业务镜像和辅助镜像时,第一服务器根据镜像名从第三服务器获取辅助镜像。
业务镜像和辅助镜像存储于镜像仓库中,镜像仓库部署在第三服务器上,第三服务器可以是中心服务器,能实现镜像的分发,有利于多个服务器基于镜像仓库中的辅助镜像快速启动对应的容器。
基于第一方面,在可能的实施例中,辅助镜像是第二服务器根据文件列表信息和快照文件获得的。
辅助镜像的制作可以由第二服务器执行,第二服务器将制作好的辅助镜像上传至第三服务器的镜像仓库中,有利于辅助镜像的分发实现在多个服务器上快速启动对应的容器。
基于第一方面,在可能的实施例中,文件列表信息是第二服务器基于容器启动所需的必要文件的文件名获得的;快照文件是第二服务器对容器启动完成时进程的运行状态进行快照获得的。
文件列表信息和快照文件是在业务镜像的预运行过程中获得的,文件列表信息记录了容器启动过程中所需的必要文件的文件名,快照文件记录了容器启动完成时进程的运行状态,通过文件列表信息和快照文件可以快速启动对应的容器,减少容器的启动时间。
基于第一方面,在可能的实施例中,快照文件是第二服务器采用用户态检查点保护恢复技术对首次启动完成后的容器进行快照获得的。
第二方面,本申请实施例提供了一种容器启动方法,该方法包括:第二服务器获取业务镜像;第二服务器运行业务镜像以启动容器;第二服务器根据容器获得业务镜像的辅助镜像;第二服务器将辅助镜像上传至第三服务器的镜像仓库中,以使第一服务器基于辅助镜像懒加载业务镜像的部分信息以建立进程以及进程的运行环境,以及基于辅助镜像指导进程在运行环境中运行以启动容器,部分信息包括容器启动时所需的必要文件。
第二服务器对业务镜像进行预运行操作,将业务镜像预运行过程中获得的文件列表信息和快照文件封装成该业务镜像的辅助镜像,以此实现辅助镜像的制作。第二服务器还可以将辅助镜像上传至第三服务器的镜像仓库中,以实现辅助镜像的分发,有利于多服务器基于该辅助镜像提高容器的启动速度,减少容器服务业务的部署时间。
基于第二方面,在可能的实施例中,第二服务器根据容器获得业务镜像的辅助镜像,包括:第二服务器获取容器启动时所需的必要文件的文件名以获得文件列表信息;第二服务器对容器启动完成时进程的运行状态进行快照获得快照文件;第二服务器根据文件列表信息和快照文件获得辅助镜像。
基于第二方面,在可能的实施例中,第二服务器对容器启动完成时进程的运行状态进行快照获得快照文件,包括:第二服务器采用用户态检查点保护恢复技术对容器启动完成时进程的运行状态进行快照获得快照文件。
第二服务器利用用户态检查点保护恢复技术对容器进行快照以保存容器启动完成时进程当下的运行状态,由此获得快照文件。快照文件可以使容器启动时容器内的进程快速达到初始化完成时的运行状态,节省了容器启动时进程的初始化时间,有效缩短了容器的启动时间。
第三方面,本申请实施例提供了一种应用于容器启动的装置,装置包括:接收单元,用于接收容器启动请求,容器启动请求包含业务镜像的镜像名;获取单元,用于根据镜像名获取辅助镜像,辅助镜像与业务镜像一一对应;处理单元,用于基于辅助镜像懒加载业务镜像的部分信息,以建立进程以及所述进程的运行环境,部分信息包括容器启动时所需的必要文件;处理单元,还用于基于辅助镜像指导进程在运行环境中运行,以实现启动容器。
基于第三方面,在可能的实施例中,所述获取单元具体用于:根据镜像名懒加载辅助镜像。
基于第三方面,在可能的实施例中,辅助镜像包含文件列表信息和快照文件,文件列表信息包含容器启动时所需的必要文件的文件名;快照文件用于指示容器启动完成时进程的运行状态;处理单元具体用于:基于文件列表信息懒加载业务镜像的部分信息;基于快照文件指导进程在运行环境中运行。
基于第三方面,在可能的实施例中,文件列表信息具体包括多个文件名;处理单元具体用于:根据文件列表信息中多个文件名的列表顺序依次加载业务镜像中每个文件名对应的必要文件。
基于第三方面,在可能的实施例中,装置还包括发送单元,用于向第三服务器发送查找命令,查找命令包含业务镜像的镜像名,查找命令用于指示第三服务器在镜像仓库中查找是否存在业务镜像和辅助镜像;获取单元具体用于:在镜像仓库存在业务镜像和辅助镜像时,第一服务器根据镜像名从第三服务器获取辅助镜像。
基于第三方面,在可能的实施例中,辅助镜像是第二服务器根据文件列表信息和快照文件获得的。
基于第三方面,在可能的实施例中,文件列表信息是第二服务器基于容器启动所需的必要文件的文件名获得的;快照文件是第二服务器对容器启动完成时进程的运行状态进行快照获得的。
基于第三方面,在可能的实施例中,快照文件是第二服务器采用用户态检查点保护恢复技术对首次启动完成后的容器进行快照获得的。
第四方面,本申请实施例提供了一种应用于容器启动的装置,装置包括:获取单元,用于获取业务镜像;启动单元,用于运行业务镜像以启动容器;制作单元,用于根据容器获得业务镜像的辅助镜像;发送单元,用于将辅助镜像上传至第三服务器的镜像仓库中,以使第一服务器基于辅助镜像懒加载业务镜像的部分信息以建立进程以及进程的运行环境,以及基于辅助镜像指导进程在运行环境中运行以启动容器,部分信息包括容器启动时所需的必要文件。
基于第四方面,在可能的实施例中,制作单元具体用于:获取容器启动时所需的必要文件的文件名以获得文件列表信息;对容器启动完成时进程的运行状态进行快照获得快照文件;根据文件列表信息和快照文件获得辅助镜像。
基于第四方面,在可能的实施例中,制作单元还用于:采用用户态检查点保护恢复技术对容器启动完成时进程的运行状态进行快照获得快照文件。
第五方面,本申请实施例提供了一种装置,该装置包括存储器和处理器,其中,处理器和存储器通过总线连接或者耦合在一起;其中,存储器用于存储程序指令;所述处理器调用所述存储器中的程序指令,以执行第一方面或者第一方面的任一可能的实现方式中的方法。
第六方面,本申请实施例提供了一种装置,该装置包括存储器和处理器,其中,处理器和存储器通过总线连接或者耦合在一起;其中,存储器用于存储程序指令;所述处理器调用所述存储器中的程序指令,以执行第二方面或者第二方面的任一可能的实现方式中的方法。
第七方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读介质存储用于装置执行的程序代码,所述程序代码包括用于执行第一方面或者第一方面的任一可能的实现方式中的方法的指令。
第八方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读介质存储用于装置执行的程序代码,所述程序代码包括用于执行第二方面或者第二方面的任一可能的实现方式中的方法的指令。
第九方面,本申请实施例提供了一种计算机软件产品,该计算机程序软件产品包括程序指令,当该计算机软件产品被装置执行时,该装置执行前述第一方面或者第一方面的任一可能的实施例中的所述方法。该计算机软件产品可以为一个软件安装包,在需要使用前述第一方面的任一种可能的设计提供的方法的情况下,可以下载该计算机软件产品并在装置上执行该计算机软件产品,以实现第一方面或者第一方面的任一可能的实施例中的所述方法。
第十方面,本申请实施例提供了一种计算机软件产品,该计算机程序软件产品包括程序指令,当该计算机软件产品被装置执行时,该装置执行前述第二方面或者第二方面的任一可能的实施例中的所述方法。该计算机软件产品可以为一个软件安装包,在需要使用前述第二方面的任一种可能的设计提供的方法的情况下,可以下载该计算机软件产品并在装置上执行该计算机软件产品,以实现第二方面或者第二方面的任一可能的实施例中的所述方法。
可以看到,实施本申请实施例,通过保存业务镜像预运行过程中对应容器访问的文件相关信息以及创建的容器内进程状态的快照信息实现业务镜像的辅助镜像的制作。利用辅助镜像可实现容器服务的快速部署,即在启动容器以提供相应业务服务时,通过懒加载技术大大减少镜像的下载内容以及下载时间,结合辅助镜像快速进行容器启动时必要文件的预加载和容器内进程状态的建立过程,大大减少了容器的进程初始化时间,从而减少了容器的启动时间,提升了大型业务在与服务中的部署速度。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中的一种镜像懒加载的示意图;
图2A是本申请实施例提供的一种应用的系统架构;
图2B是本申请实施例提供的又一种应用的系统架构;
图3是本申请实施例提供的一种容器引擎的示意框图;
图4是本申请实施例提供的一种辅助镜像的制作方法的流程示意图;
图5是本申请实施例提供的又一种容器启动方法的流程图;
图6A是本申请实施例提供的一种容器启动的过程示意图;
图6B是本申请实施例提供的一种容器启动的过程示意图;
图7是本申请实施例提供的又一种容器启动方法的流程图;
图8是本申请实施例提供的一种容器启动的应用场景示意图;
图9是本申请实施例提供的又一种容器启动的应用场景示意图;
图10是本申请实施例提供的一种系统的部署示意图;
图11是本申请实施例提供的一种装置的结构示意图;
图12是本申请实施例提供的一种装置的功能结构示意图;
图13是本申请实施例提供的又一种装置的功能结构示意图。
具体实施方式
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。本申请实施例中的说明书和权利要求书中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
为了便于理解,下面先对本申请实施例可能涉及的相关术语等进行介绍。
(1)镜像
镜像(Docker Image)是一种文件存储形式。镜像是一个应用轻量级且独立可执行的软件包,其包含其该镜像对应容器启动时所需的所有文件,例如,代码、系统工具、库、环境变量等。又例如,一个镜像可以包含一个完整的操作系统环境和用户需要的其他应用程序。另外,镜像是文件的只读层的集合,由多个只读的镜像层叠加而成,每个镜像层都包含若干文件和元信息数据。
Docker镜像的创建可以从Docker官方共有仓库直接拉取现有的镜像,官方共有仓库中的镜像都是原厂维护的,因此可以得到及时的更新与修护。在一些可能的实施例中,还可以自己定制镜像,例如,可以通过Dockerfile来创建docker镜像,Dockerfile是一个定制镜像内容的配置文件,同时也能在内容上体现层级关系的建立关系。
(2)容器
容器(container)是基于镜像产生,是镜像的运行实例。换句话说,镜像是容器的静态视角,容器是镜像的运行状态。容器好比软件的集装箱,它内部可以安装任何软件和库文件以及做任意的运行环境配置。容器是一种基于操作系统能力的隔离技术。容器有自己的文件系统、CPU和内存,意味着容器能像虚拟机一样独立运行,缺占用更少的资源,极大地提高了资源利用率。容器与容器之间是相互隔离、独立,互不影响的。
(3)用户空间的检查点/恢复技术
用户空间的检查点/恢复(Checkpoint/Restore In Userspace,CRIU),也可以称为用户态存档点恢复,CRIU可用于冻结或部分冻结正在运行的容器(或单个应用程序),并将该应用程序的执行状态以文件形式保存到磁盘上,然后通过保存的文件使应用程序从之前被冻结的点恢复回来继续执行。例如,使用CRIU技术冻结一个正在运行的程序,并checkpoint它到一系列文件,最后可以使用这一系列文件在任何主机上恢复这个程序到被冻结时的那个运行状态。CRIU可运行在Linux操作系统上,其显著的特点在于是在用户空间实现checkpoint和restore,不需要修改应用程序或者操作系统,并且也是内核中功能最丰富和活跃的。
(4)懒加载
懒加载(Lazy Loading、),也称为延迟加载、惰性加载,它的核心思想是把对象的实例化延迟到真正调用该对象的时候,以减轻大量对象在实例化时对资源的消耗,而不是在程序初始化时就预先将对象实例化。简单来说,即在需要执行的时候采取加载,且按需加载,效率高,有效减少性能开销。
相关技术中,部署容器服务时,运行一个容器的流程大致包括:制作镜像、上传镜像、下载镜像和业务启动四个步骤,其中制作镜像和上传镜像是前期镜像的准备工作,当然,有时也无需制作镜像,可以从现有的镜像仓库中直接拉取镜像进行下载以及后续的业务启动。由此可以看出,容器的启动时间主要取决于下载镜像和业务启动这两个步骤所消耗的时间,其中,镜像的下载速度直接影响容器的启动时间,业务的启动时间直接影响从启动容器命令的下发到对外提供服务的时间。针对镜像的下载过程,已有人提出通过懒加载的方式可以明显减少镜像的下载时间从而加快容器的启动过程,镜像懒加载的过程可参见图1所示。
参见图1,图1是现有技术中的一种镜像懒加载的过程示意图,将预设计的应用制作成分层镜像,将每层镜像压缩后上传至镜像仓库,在进行该应用服务的部署时,图1中的按需拉取镜像内容是指获取预下载的各层的镜像信息,根据该镜像信息建立各层对应的空白层从而完成镜像的下载过程,由于并未实际下载镜像内容因此大大缩短了镜像的下载时间,实际镜像内容的下载发生在容器访问应用中的具体文件时,在此情况下,根据待访问的具体文件的文件名、偏移量等寻址到该文件在分层镜像的压缩块中的具体位置,从而下载并解压获得该文件即可,上述即为镜像懒加载的具体过程。
然而,尽管通过镜像懒加载技术使得镜像内容的单次下载时间减少了,但对于大型应用(例如,Java等复杂应用)仍然需要较长的业务启动时间,业务启动也可以称之为业务的初始化过程,因此,业务启动时间长严重影响容器的启动速度。在一些场景下,尤其是Serverless(无服务器)架构或网络条件差的边缘场景,对容器服务无启动的速度要求较高,需要在下达启动服务的命令后节点能快速达到服务能够启动的状态,而现有的容器启动流程对于上述场景来说时延过长。
下面描述本申请实施例所应用的一种系统架构。参见图2A,图2A是本申请提供的一种所应用的系统架构图,如图2A所示,该系统包括容器引擎10、镜像仓库20和容器引擎30,其中,容器引擎10部署在第一服务器上,容器引擎30部署在第二服务器上,镜像仓库20部署在云服务器(或者第三服务器)上,第一服务器、第二服务器分别与云服务器通过无线的方式进行通信,因此,容器引擎10、容器引擎30分别与镜像仓库20通过无线的方式进行通信,以使容器引擎10和容器引擎30可以访问镜像仓库20。
在图2A所示的系统的架构中,容器引擎10部署在第一服务器上,容器引擎30部署在第二服务器上,镜像仓库20部署在云服务器中。容器引擎30内进一步包括辅助镜像制作模块和容器启动模块,容器启动模块用于启动从镜像仓库20中拉取的业务镜像对应的容器,辅助镜像制作模块用于在业务镜像的预运行过程中制作该业务镜像的辅助镜像,并将制作好的辅助镜像上传至镜像仓库20中以供其他服务器可以从镜像仓库中获取到该辅助镜像。容器引擎10进一步包括容器启动模块,容器启动模块用于基于镜像仓库中20中的业务镜像以及该业务镜像对应的辅助镜像启动对应的容器。在一些可能的实施例中,容器启动模块还可以用于基于从镜像仓库20中直接拉取的业务镜像启动对应的容器。也就是说,容器引擎30既可以运行相关镜像启动对应的容器,还可以制作业务镜像对应的辅助镜像,而容器引擎10只能运行相关镜像启动对应的容器。
参见图2B,图2B示例性地给出了又一种本申请实施例所应用的系统架构图。如图2B所示,该系统包括容器引擎10和镜像仓库20,其中,容器引擎10部署在第一服务器上,镜像仓库20部署在云服务器上,第一服务器和云服务器之间通过无线的方式进行通信,因此,容器引擎10与镜像仓库20之间通过无线的方式进行通信,以使容器引擎10可访问镜像仓库20。
在图2B所示的系统的架构中,容器引擎10部署在第一服务器上,镜像仓库20部署在云服务器中。容器引擎10内除了包括容器启动模块外,还包括辅助镜像制作模块。其中,容器启动模块用于启动从镜像仓库20中拉取的业务镜像对应的容器,辅助镜像制作模块用于在业务镜像的预运行过程中制作该业务镜像的辅助镜像,并将制作好的辅助镜像上传至镜像仓库20中。在一些可能的实施例中,容器启动模块还用于基于业务镜像和业务镜像对应的辅助镜像启动对应的容器。也就是说,图2B中的容器引擎10既可以运行相关镜像启动对应的容器,还可以制作业务镜像对应的辅助镜像。
图2A所示的系统架构和图2B所示的系统架构的不同之处在于:图2A中,容器引擎10在第一服务器上仅可实现启动容器的功能;而在图2B中,容器引擎10在第二服务器上可实现辅助镜像的制作以及启动容器的功能。
可选地,在图2B中,容器引擎10在第一服务器上预启动业务镜像对应的容器并制作该业务镜像对应的辅助镜像,并将辅助镜像上传至镜像仓库中,在容器使用完毕后直接将容器从第一服务器上删除以减少第一服务器上内存空间的占用,待第一服务器需要重新部署该容器时,容器引擎10再从镜像仓库中基于辅助镜像以及业务镜像重新快速启动该容器即可。
可选地,在图2A中,容器引擎30在第二服务器上预启动业务镜像对应的容器并制作该业务镜像对应的辅助镜像,并将辅助镜像上传至镜像仓库中;第一服务器上需要部署该容器,则容器引擎10从镜像仓库中找到容器引擎30上传的辅助镜像,或者,辅助镜像以及业务镜像,基于辅助镜像以及业务镜像快速启动对应的容器,从而实现容器在第一服务器上的快速部署。
需要说明的是,无论是图2A还是图2B所示的系统架构,容器引擎10和容器引擎30都具有启动容器的功能,因为,对于具有辅助镜像制作功能的容器引擎(图2A中的容器引擎30和图2B中的容器引擎10)来说,制作辅助镜像的前提是需先预启动业务镜像对应的容器。
可选地,图2A或者图2B中的辅助镜像制作模块除了可以制作业务镜像对应的辅助镜像,还可以制作该业务镜像,该业务镜像也可以是容器引擎10基于镜像仓库20中的基础镜像制作的。
在一些可能的实施例中,具有辅助镜像制作功能的容器引擎10也可以部署在镜像仓库所在的云服务器上,本申请不做具体限定。
镜像仓库20用于集中存放镜像文件,例如,官方维护的业务镜像、制作的业务镜像、制作的辅助镜像等。镜像仓库20的数量可以是多个,每个镜像仓库中又包含多了多个分层镜像,每个分层镜像具有不同的标签。镜像仓库20可以是公共镜像仓库,例如,公共镜像仓库Docker Hub、Docker Pool等;镜像仓库20也可以是私有镜像仓库,例如,用户可以使用docker-registry创建的镜像仓库,本申请不做具体限定。镜像仓库20可以位于云环境中,具体为云环境上的一个或多个计算设备上(例如:中心服务器)。云环境指示云服务提供商拥有的,用于提供计算、存储、通信资源的中心计算设备集群。
参见图3,图3是本申请实施例提供的一种容器引擎的组成框图,如图3所示,容器引擎40包括容器启动模块,容器启动模块至少包括懒加载模块,懒加载模块用于懒加载辅助镜像以及基于辅助镜像懒加载业务镜像中的部分重要信息以启动对应的容器,在此情况下,容器引擎40相当于上述图2A中的容器引擎10。除此之外,容器引擎40还包括容器管理模块、镜像管理模块和对外接口,其中,容器管理模块用于管理容器引擎40启动的容器,镜像管理模块用于管理本地运行的业务镜像,对外接口用于获取业务镜像,或者,辅助镜像以及业务镜像中的部分信息。相应地,容器引擎40所在的服务器内还包括内核开源模块(例如,用户空间文件系统FUSE内核),其可以作为懒加载模块和下述文件列表收集模块所依赖的内核模块。需要说明的是,内核开源模块在服务器内独立于容器引擎40。
在一些可能的实施例中,容器引擎40还包括辅助镜像制作模块,在此情况下,容器引擎40相当于的上述图2A中的容器引擎30或者图2B中的容器引擎10。辅助镜像制作模块至少包括辅助镜像管理模块、文件列表收集模块和用户态存档点恢复模块。其中,文件列表收集模块用于收集预运行该业务镜像以启动对应容器时该容器访问的必要文件业务镜像中必要文件的文件名以获得文件列表信息;用户态存档点恢复模块也可以称作CRIU(Checkpoint/Restore In Userspace)模块,用于获取业务镜像预运行过程中容器启动后的快照文件,该快照文件保存了业务镜像对应容器启动时的内存状态信息;辅助镜像管理模块用于根据文件列表信息和快照文件制作辅助镜像并将辅助镜像上传至镜像仓库20中,辅助镜像管理模块还用于在辅助镜像制作完成后将辅助镜像与与其对应的业务镜像进行关联。
需要说明的是,容器引擎40可以是Docker或者Rkt等,本申请不做具体限定。为了叙述的简便,下文叙述中容器引擎40不妨以Docker为例进行示例性说明,但本申请中不限定容器引擎仅为Docker。
容器引擎40可部署在边缘环境中,具体为边缘环境中的一个或多个计算设备(边缘计算设备)上,边缘计算设备可以为服务器。边缘环境指示在地理位置上距离原始数据采集设备较近的,用于提供计算、存储、通信资源的边缘计算设备集群。在一些可能的实施例中,容器引擎40也可以部署在云环境中,本申请不做具体限定。
需要说明的是,在执行本申请提供的容器启动方法之前,需要先制作业务镜像的辅助镜像,参见图4,图4是本申请提供的一种辅助镜像的制作方法的流程示意图,该方法包括但不限于以下步骤:
S101、获取业务镜像。
本申请实施例中,业务镜像是一个可执行的独立软件包,用于打包软件运行环境以及基于运行环境开发的软件。业务镜像包含运行某个应用程序所需的所有内容,包含代码、库、环境变量和配置文件。容器是业务镜像的运行实例。
业务镜像采用分层存储格式,其包含多个层layer,前一层是后一层的搭建基础,每个层有自身对应的大小和标识,业务镜像的每一层可以被共享复用,相同的镜像内容只需加载一份到内存,能有效节省磁盘空间,减少资源的消耗。
在一具体实施中,业务镜像可以直接从公有的镜像仓库(例如,Docker Hub)中获取,即业务镜像是镜像仓库中现有的已制作好的镜像。在另一具体实施中,用户设计的开发程序在镜像仓库没有与该开发程序对应的现有镜像,又或者需要对现有的某个镜像加入特定的功能,而新加入的功能在现有镜像中是没有的,在此情况下,业务镜像也可以基于Dockerfile文件创建获取到的,当然,业务镜像也可以通过其他方式进行创建,本申请不做具体限定。
Dockerfile是一个文本文件,记录了镜像构建的所有步骤。示例性地,基于Dockerfile创建业务镜像,具体为,运行docker build命令,先创建新镜像的名称以及指定目标文件build context,该目标文件包括新镜像构建所需的文件或目录,Dockerfile中的ADD、COPY等命令可以将目标文件build context中的所有文件添加或复制至镜像中以完成新镜像的创建。
需要说明的是,若业务镜像是新创建或制作的,且业务镜像是镜像仓库中没有的,则还需将创建的业务镜像上传至镜像仓库。另外,上传至镜像仓库的业务镜像均为压缩格式,例如,star.gz格式或其他自定义压缩格式等,本申请不做具体限定。需要说明的是,star.gz格式有利于后续懒加载业务镜像时可快速定位业务镜像中内容的具体位置。
S102、运行业务镜像,获得容器启动时所需的必要文件的文件名以获得文件列表信息。
本申请实施例中,运行业务镜像,运行业务镜像也可以称作启动业务镜像对应的容器,容器启动时,获取容器在启动过程中容器内进程访问的必要文件的文件名以获得文件列表信息,该文件列表信息包含业务镜像对应的容器启动时所需的必要文件的文件名。需要说明的是,此次运行业务镜像的过程可称为业务镜像的预运行过程。
需要说明的是,业务镜像由一层层的文件系统组成,通过分层进行继承。基于基础镜像,可以制作出各种具体的业务镜像。业务镜像运行时,一次联合加载多个文件系统,这多个文件系统根据继承关系进行叠加,组合成一个容器内进程可看到的统一的文件系统rootfs,rootfs是容器启动时内部进程可见的文件系统,即容器的根目录,其包含一个操作系统运行所需的文件系统,例如可能包含典型的类Unix操作系统中的目录系统,如/dev、/proc、/bin、/etc、/lib、/usr、/tmp等。
示例性地,可以利用FUSE文件系统获取容器启动时进程访问的文件列表信息,即统计容器启动时进程对文件系统的读请求并获取各个读请求中被访问的文件的文件名,获取到的各个文件名构成的集合即为容器启动过程中获得的文件列表信息。文件列表信息包含容器启动时所需的必要文件的文件名。需要说明的是,容器启动时所需的必要文件有多个时,则意味着文件列表信息包含的文件名的数量也为多个,在此情况下,这多个文件名可以按照其对应的必要文件被访问的先后顺序存储在文件列表信息中,例如,文件列表信息中各文件名以一定的列表顺序排列。
需要说明的是,容器启动时所需的必要文件包括用于构建容器内各进程本身的文件以及用于构建进程的运行环境文件。
示例性地,不妨以启动某一业务镜像对应的容器为例,若启动使用基于nginx启动的http服务器容器,则该应用程序对应的容器启动的时所需的必要文件包括nginx相关二进制文件和http服务器站点文件,其中,nginx相关二进制文件用于构建nginx进程,http服务器站点文件用于加载http服务器内容。
在一些可能的实施例中,文件列表信息是包含的文件名是根据容器内进程访问文件的先后顺序记载的,例如,文件列表信息中依次包含文件1、文件2和文件3,则说明容器在启动过程中,容器内的进程先访问文件1,再访问文件2,最后访问文件3。
S103、对容器启动完成时进程的运行状态进行快照获得快照文件。
本申请实施例中,对容器启动完成时容器内进程的运行状态进行快照获得快照文件,快照文件用于指示容器启动完成时容器内进程的运行状态。通过快照文件可以指导进程快速达到容器启动完成时进程的运行状态,缩减了容器内进程的初始化过程,从而节省了进程的初始化时间,提高了容器的启动速度。需要说明的是,启动完成的容器即可对外提供相应的服务。
示例性地,可以采用CRIU技术创建容器启动完成时容器内进程状态的快照文件。CRIU(Checkpoint/Restore In Userspace)技术又称为用户态检查点保存与恢复技术,其主要有两大功能,即检查点的保存与恢复,可参考上述关于CRIU技术的描述,在此不再赘述。在S103中,CRIU技术主要用于在容器初始化过程完成时容器内进程状态的保存。具体地,在容器内的进程完成初始化过程后,CRIU通过ptrace函数将一段特殊代码注入到容器内的dumpee进程(即待备份的程序进程),该段特殊代码用于获取dumpee进程的所有上下文信息,通过ptrace函数的ptrace_attach命令和ptrace_seize命名冻结容器内dumpee的进程树,获取dumpee的资源(包括管道参数信息、进程的核心参数、内存表等)并保存,最后清理上述注入的特殊代码并恢复容器内dumpee进程的地址空间,获得的容器内的dumpee进程的资源即为本申请内容器启动时进程的快照文件,该快照文件用于表示容器启动时进程的运行状态。
S104、根据文件列表信息和快照文件获得业务镜像的辅助镜像。
本申请实施例中,将获取到的文件列表信息和快照文件进行封装获得该业务镜像的辅助镜像。需要说明的是,辅助镜像和业务镜像一一对应。
在一些可能的实施例中,在获得业务镜像的辅助镜像后,还可以将辅助镜像上传至镜像仓库中以实现辅助镜像的保存和分发。示例性地,可通过互联网使用注册账号登录镜像仓库Docker Hub的注册中心,通过docker push命令将制作好的辅助镜像上传至Docker Hub中,上传完成后在Docker Hub的Public Repository就可看到上传成功的辅助镜像了,从而完成了辅助镜像的保存。在一些可能的实施例中,也可以将制作好的辅助镜像存储在本地存储器中。
需要说明的是,在获得业务镜像的辅助镜像后,还需将业务镜像和辅助镜像进行关联,以使业务镜像和辅助镜像一一对应。例如,使业务镜像和同一业务镜像的辅助镜像两者具有相同的镜像名。
需要说明的是,上述S101-S104可以在图2A中的第二服务器或者图2B中的第一服务器上执行。
可以看到,实施本申请实施例,通过保存业务镜像预运行过程中所需的必要文件信息以及容器启动完成时进程状态的快照信息实现业务镜像的辅助镜像的制作,辅助镜像有助于节省容器的启动时间。
参见图5,基于上文实施所描述的系统架构,下面描述本申请实施例提供的一种容器启动方法,该方法包括但不限于以下步骤:
S201、第一服务器接收容器启动请求。
本申请实施例中,接收容器启动请求,容器启动请求中携带有业务镜像的镜像名。
示例性地,容器启动请求可以是来自中心云上的控制中心,也可以是Serverless场景下用户发送的web请求,本申请不做具体限定。
需要说明的是,容器是基于镜像产生的,镜像是容器运行的基础,容器是镜像运行后的形态。因此,当接收到容器启动请求时,可从容器启动请求中获得该容器对应的业务镜像的镜像名。
S202、第一服务器根据镜像名获取辅助镜像。
本申请实施例中,在第一服务器接收到容器请求命令之后,获取容器请求命令中的镜像名,根据镜像名获取业务镜像对应的辅助镜像。具体地,即根据镜像名从镜像仓库中获取业务镜像对应的辅助镜像。
可选地,在一些可能的实施例中,所谓第一服务器根据镜像名获取辅助镜像是指:第一服务器根据镜像名从镜像仓库中下载辅助镜像到本地。在另一些可能的实施例中,所谓第一服务器根据镜像名获取辅助镜像是指:第一服务器根据镜像名懒加载辅助镜像,即根据辅助镜像中内容的实际使用情况按需加载辅助镜像中的内容,从而实现将辅助镜像中的内容分少量多次下载到本地,以减少每次下载时网络的资源占用率,减少性能开销,提高了下载速度,有效减少了容器的启动时间。
其中,业务镜像包含运行某应用程序所需的所有内容,包含代码、库、环境变量和和配置文件。辅助镜像是基于业务镜像的预运行过程产生的,业务镜像的预运行过程意味着对应容器的启动,因此,也可以说辅助镜像是基于业务镜像对应的容器获得的。辅助镜像包含文件列表信息和快照文件,其中,文件列表信息包含容器启动时所需的必要文件的文件名,快照文件用于指示容器启动完成时容器内进程的运行状态。也就是说,镜像仓库中的辅助镜像是预先制作好的,辅助镜像有助于减少业务镜像中内容的下载时间,节省容器内进程的初始化时间,从而可以提高容器的启动速度。
可以理解,辅助镜像中文件列表信息所涉及的文件数量是少于业务镜像中包含的文件数量。例如,文件列表信息中记录的必要文件有文件1、文件2和文件3,而与该辅助镜像对应的业务镜像中除了包含上述必要文件(文件1、文件2和文件3)外,还包括其他文件,例如文件4和文件5等,这些文件是为了给该应用程序增加某项功能。
镜像仓库用于存放镜像,该镜像包括业务镜像,或者,业务镜像和业务镜像的辅助镜像。镜像仓库可以实现镜像的分发,即当需要在新节点上部署容器服务时,可直接从镜像仓库中拉取对应镜像以提供容器服务。
在一些可能的实施例中,在第一服务器根据镜像名获取辅助镜像之前,还需向部署有镜像仓库的服务器发送镜像查找指令,以确定镜像仓库是否存在镜像名对应的业务镜像和辅助镜像,在镜像仓库中存在该镜像名对应的业务镜像和辅助镜像时,第一服务器再根据镜像名获取辅助镜像。
S203、第一服务器基于辅助镜像懒加载业务镜像中的部分信息,以建立进程以及进程的运行环境。
本申请实施例中,第一服务器基于辅助镜像懒加载业务镜像中的部分信息以建立进程以及进程的运行环境。所谓业务镜像中的部分信息是指容器启动时所需的必要文件。例如,必要文件包括各进程的建立文件以及用于构建进程的运行环境的文件。
由于辅助镜像的文件列表信息包含容器启动时所需的必要文件的文件名,因此,基于辅助镜像懒加载业务镜像中的部分信息具体是指:基于文件列表信息懒加载业务镜像的部分信息,也就是说,根据文件列表信息中的文件名从业务镜像中下载并运行该文件名对应的必要文件,以建立容器内的进程本身以及进程的运行环境,从而避免了将整个业务镜像下载到本地,大大节省了镜像的下载时间,有助于缩短了容器的启动时间。
需要说明的是,文件列表信息中仅包含必要文件的文件名,文件列表信息中各文件名对应的必要文件存储于业务镜像中,该业务镜像为该文件列表信息所在的辅助镜像对应的业务镜像。
在一些可能的实施例中,辅助镜像的文件列表信息中包含多个文件名,且上述多个文件名是根据容器启动时必要文件被访问的先后顺序记载的,例如,文件列表信息中依次包含文件1、文件2和文件3,则说明容器在启动过程中,容器内的进程先访问文件1,再访问文件2,最后访问文件3。那么,根据文件列表信息中的文件名从业务镜像中下载并运行该文件名对应的必要文件具体是指:根据文件列表信息中多个文件名的列表顺序依次加载业务镜像中每个文件名对应的必要文件。
示例性地,文件列表信息中必要文件的文件名的列表顺序为文件1、文件2和文件3,那么,基于文件列表信息加载对应的必要文件时,同样是按照文件列表信息中各文件名的顺序依次下载并运行的,即从业务镜像中先下载并运行文件1,接着下载并运行文件2,最后下载并运行文件3。
需要说明的是,本申请实施例中,业务镜像可采用star.gz格式,即一种可搜索的tar.gz格式,该格式的文件中每个条目具有自己的gzip流,内存中存储有业务镜像中每个层的star.gz索引,对于读取数据,索引包含整个stargz文件的每个文件的GZIP(TAR(文件数据))范围的偏移量。为了能够高效率地从大文件中读取少量数据,可以为大文件设置多个stargz索引条目。通过此方法,对于文件列表信息中的每个文件名,根据该文件名即可在业务镜像中快速定位到对应的压缩块并进行下载解析,无需下载整个业务进镜像进行解压后再寻找该文件,有效节省了必要文件的定位及下载时间。
S204、第一服务器基于辅助镜像指导进程在运行环境中运行,以启动容器。
本申请实施例中,第一服务器基于辅助镜像指导进程在运行环境中运行,以实现容器的启动。具体地,第一服务器基于辅助镜像中的快照文件指导进程在运行环境中运行,以使容器内的进程快速达到容器启动完成时容器内进程的运行状态,节省了容器内进程的初始化时间,从而减少了容器的启动时间。
示例性地,快照文件是通过CRIU(Checkpoint/Restore In Userspace)技术获得的,关于快照文件的生成过程可参考图3实施例中的相关叙述,而根据快照文件重建容器内进程的过程具体如下:解析快照文件确定进程的共享资源,例如,共享内存,则该共享资源后续由使用了该共享资源的进程还原即可,然后使用fork函数一次或多次重新创建所需进程,并恢复资源信息,即准备namespaces、重新映射所有私有内存区域、创建sockets、调用chdir函数和chroot函数等,最后通过将restorer.built-in.bin的代码注入到dumpee进程以恢复dumpee进程的上下文信息,即余下的内存区域、timers、credentials、threads的恢复。
在一些可能的实施例中,可以根据快照文件依次指导各进程在运行环境中运行,以使各进程依次达到容器启动完成时容器内进程的运行状态。示例性地,快照文件中包含进程1、进程2和进程3的运行状态,则可以先从快照文件中获取进程1的运行状态指导容器内进程1在运行环境中的运行,接着从快照文件中获取进程2的运行状态指导容器内进程2在运行环境中的运行,最后从快照文件中获取进程3的运行状态指导容器内进程3在运行环境中的运行。
结合图6A和图6B进一步说明容器启动的过程,参见图6A,用户通过容器编排框架向容器引擎下达容器A启动命令,容器引擎接收到该命令后从镜像仓库中懒加载辅助镜像和业务镜像获得必要文件和状态快照,容器引擎根据必要文件和状态快照启动容器A。参见图6B,进一步说明了容器引擎获得必要文件和快照文件的过程,即容器引擎从镜像仓库中懒加载辅助镜像A,具体地,第一步,从辅助镜像A中下载文件列表信息,然后基于文件列表信息中的文件名从业务镜像A中加载文件名对应的必要文件,以建立容器A内进程的运行环境;第二步,从辅助镜像A中下载快照文件,然后根据快照文件指导容器A内进程在运行环境中的运行状态,从而实现快速启动容器A,提高了容器的启动速度,减小了容器的启动时间(例如,基于本申请的实践表明,在网络条件受限的边缘场景下容器的启动时间可由分钟级别减小到秒级)。
需要说明的是,上述S201-S204可以在图2A中的第一服务器或者图2B中的第一服务器上执行。
可以看到,实施本申请实施例,通过业务镜像预运行过程中获取的辅助镜像实现容器服务的快速部署。即在启动容器以提供相应业务服务时,通过懒加载技术大大减少业务镜像的下载内容以及下载时间,结合辅助镜像懒加载业务镜像中的部分信息,以快速进行容器启动时所需的必要文件的预加载和容器内进程状态的建立过程,大大减少了容器内进程的初始化时间,从而减少了容器的启动时间,提升了大型业务在与服务中的部署速度。
需要说明的是,在一些可能的实施例中,上述图5实施例中的S202中第一服务器根据镜像名获取辅助镜像还可以是指:第一服务器根据镜像名通过懒加载的方式获取辅助镜像,即无需一次性将整个辅助镜像从镜像仓库中下载下来,而是采用懒加载方式加载辅助镜像,懒加载技术的实质是按需加载,以减少性能开销。具体地,在执行S203之前从镜像仓库中获取辅助镜像中的文件列表信息;在执行S204之前再从镜像仓库中获取辅助镜像中的快照文件即可,如此可以将辅助镜像中的内容分少量多次加载,从而减少每次下载时网络的资源占用率,提高了下载速度,从而减少了容器的启动时间。
参见图7,图7是本申请实施例提供的又一种容器启动的方法流程图,需要说明的是,图7实施例可以独立于图5实施例,也可以是对图5实施例的补充。该方法包括但不限于一下步骤:
S301、第一服务器接收容器启动请求。本步骤具体可参考图5实施例中S201的相关描述,这里不再赘述。
可选地,在执行S301之前,还可以先执行S300,即第二服务器将制作好的辅助镜像发送给第三服务器,相应地第三服务器接收到辅助镜像后将其存入镜像仓库中。在一些可能的实施例中,业务镜像和辅助镜像都是第二服务器预先制作好的,在此情况下,S300也可以是第二服务器将业务镜像和辅助镜像发送给第三服务器,以使第三服务器将接收到的业务镜像和辅助镜像存储至镜像仓库中。需要说明的是,第二服务器制作辅助镜像的过程可参考图4实施例所述的方法,为了说明书的简洁,在此不再赘述。
S302、第一服务器向第三服务器发送镜像查找命令。
本申请实施例中,第一服务器在接收到容器启动请求后,获取容器启动请求中的镜像名,并向第三服务器发送镜像查找命令,以使第三服务器在镜像仓库中查找是否存在业务镜像对应的辅助镜像,其中,镜像查找命令包含业务镜像对应的镜像名。相应地,第三服务器接收镜像查找命令。
S303、第三服务器根据镜像名确定镜像仓库中是否存在业务镜像对应的辅助镜像,获得查找结果。
本申请实施例中,第三服务器根据镜像查找命令中镜像名找到该镜像名对应的业务镜像,还需进一步判断镜像仓库中是否存在该业务镜像对应的辅助镜像,获得查找结果。具体地,当在镜像仓库中查找到业务镜像对应的辅助镜像时,查找结果指示镜像仓库中存在该辅助镜像;当在镜像仓库中未查找到业务镜像对应的辅助镜像时,查找结果指示镜像仓库中不存在该辅助镜像。
本申请的一种实施例中,业务镜像和该业务镜像的辅助镜像可以通过相同的镜像名进行关联以使业务镜像和辅助镜像一一对应,镜像名可以是具有一定长度的字符串,该字符串包括数字、字符中的至少一种。另外,可以通过增加一标识来区分具有相同镜像名中的业务镜像和辅助镜像,该标识可以是字母、数字等,本申请不做具体限定。
示例性地,假设镜像名为A,以“0”表示业务镜像,“1”表示辅助镜像,那么,第三服务器可在镜像仓库中根据镜像名A查找到两个镜像分别为镜像“A0”和镜像“A1”,则镜像仓库中存在镜像名A对应的业务镜像和辅助镜像,且“A0”为业务镜像,“A1”为辅助镜像。
S304、第三服务器向第一服务器发送查找结果。
本申请实施例中,第三服务器获得查找结果后,向第一服务器发送查找结果。相应地,第一服务器接收第三服务器发送的查找结果。
需要说明的是,在查找结果指示镜像仓库中不存在辅助镜像时,执行S305;在查找结果指示镜像仓库中存在辅助镜像时,执行S306。
S305、在查找结果指示镜像仓库中不存在辅助镜像时,获取业务镜像,根据业务镜像启动容器。
可选地,在一些可能的实施例中,在查找结果指示镜像仓库中不存在辅助镜像时,则说明镜像仓库中存储有该镜像名对应的业务镜像,但未存储有该业务镜像对应的辅助镜像,在此情况下,可以直接采用懒加载技术懒加载该业务镜像,直到容器开始使用时再去下载业务镜像中的实际内容建立容器内进程的运行环境以及进行进程的初始化过程以实现容器的启动,镜像懒加载技术已非常成熟且被广泛应用,在此不再赘述。
S306、在查找结果指示镜像仓库中存在辅助镜像时,第一服务器根据镜像名获取辅助镜像。本步骤具体可参考图5实施例中S202的相关描述,这里不再赘述。
S307、基于辅助镜像中的文件列表信息懒加载业务镜像中的部分信息,以建立进程以及进程的运行环境。本步骤具体可参考图5实施例中S203的相关描述,这里不再赘述。
S308、基于辅助镜像中的快照文件指导进程在运行环境中运行,以启动容器。本步骤具体可参考图5实施例中S204的相关描述,这里不再赘述。
可以看到,实施本申请实施例,辅助镜像的制作和以及借助于辅助镜像启动相应容器的过程分别在不同的服务器上执行,实现了容器在不同服务器上的快速部署。利用镜像懒加载技术和辅助镜像来进行业务镜像中必要文件的加载和进程运行状态的快速建立,减少了镜像的下载内容以及下载时间,节省了容器的进程初始化时间,从而减少了容器的启动时间,提升了大型业务在与服务中的部署速度以及业务启动后的运行速度。
下面以一些具体的应用场景来进一步说明上述实施例。
参见图8,图8是本申请提供的一种容器启动在Serverless场景下的应用示意图。Serverless场景下,用户发起web请求,API网关接收到的web请求后将其转化为事件,并将该事件转发给Function引擎,Function引擎接收到该事件后向,发起启动容器执行函数命令,容器引擎接收到命令后根据函数类型从镜像仓库中预下载该函数类型对应的函数镜像以及对应的辅助镜像,根据函数镜像和辅助镜像启动函数所在的容器以执行函数,最后,将函数的执行结果返回给Function引擎,Function引擎再将函数执行结果返回给用户。
需要说明的是,在Serverless场景下,在没有用户请求或者对应事件时,服务端无常驻内存服务侧程序等待用户请求以节省资源。当接到到用户请求产生的对应事件后,Function引擎会触发镜像懒加载、启动容器等过程,以实现在一个全新的节点上快速拉起容器应用。
参见图9,图9是本申请提供的一种容器启动在边缘场景下的应用示意图。如图9所示,控制中心和镜像仓库都部署在中心云上,容器引擎部署在边缘环境中,控制中心向边缘环境中的服务器发起新业务部署服务,例如,人脸识别应用和车牌识别应用,容器引擎从镜像仓库中下载对应的业务镜像(例如,AI镜像,AI镜像中同时包含AI推理模型和大量驱动程序,体积往往达到几个G的大小)和该业务镜像对应的辅助镜像,并根据AI镜像和辅助镜像启动容器,容器的启动过程可参考上述图5实施例,在此不再赘述,容器启动完成后即可对原始数据采集设备采集到的视频流进行处理以提供人脸识别服务和车牌识别服务。
可以看到,在Serverless环境或网络条件差的边缘环境中,实施本申请实施例提供的容器启动方法,可以有效节省业务的初始化时间,提高容器的启动速度。特别地,基于本申请的实践表明,在网络条件受限的边缘场景下容器的启动时间可由分钟级别减小到秒级,大大减少业务的部署时间。
参见图10,图10是本申请提供的一种系统的部署示意图,如图10所示,镜像仓库可部署在云环境,具体为云环境上的一个或多个计算设备上(例如:中心服务器)。容器引擎可以部署在边缘环境中,具体为边缘环境中的一个或多个计算设备(边缘计算设备)上,边缘计算设备可以为服务器。所述云环境指示云服务提供商拥有的,用于提供计算、存储、通信资源的中心计算设备集群;所述边缘环境指示在地理位置上距离原始数据采集设备较近的,用于提供计算、存储、通信资源的边缘计算设备集群。
需要说明的是,原始数据采集设备可以是用于监控的图像采集设备(例如,摄像机)、全球定位系统(Global Positioning System,GPS)传感器等。
参见图11,图11是本申请实施例提供的一种装置的结构示意图,装置30至少包括处理器110、存储器111、接收器112和发送器113,该接收器112和发送器113也可以替换为通信接口,用于为处理器110提供信息输入和/或输出。可选地,存储器111、接收器112、发送器113和处理器110通过总线连接或耦合。
接收器112用于接收客户端或者控制中心发送的容器启动请求。发送器113用于向镜像仓库发送镜像查找命令以查找镜像仓库中是否存储有业务镜像和辅助镜像。接收器112和发送器113可包括用于直接或通过空中接口与客户端或控制中心、镜像仓库等通信的天线和芯片集。发送器113和收发器112组成通信模块,通信模块可被配置为根据一个或多个其它类型的无线通信(例如,协议)来接收和发送信息,所述无线通信诸如蓝牙、IEEE802.11通信协议、蜂窝技术、全球微波互联接入(Worldwide Interoperability forMicrowave Access,WiMAX)或LTE(Long Term Evolution,长期演进)、ZigBee协议、专用短程通信(Dedicated Short Range Communications,DSRC)以及RFID(Radio FrequencyIdentification,射频识别)通信,等等。
处理器110执行各操作的具体实现可参考上述方法实施例中懒加载辅助镜像、懒加载业务镜像中的部分内容、启动容器等具体操作。在一些可能的实施例中,处理器110还可以执行运行业务镜像以启动容器、制作业务镜像对应的辅助镜像等具体操作。处理器110可以由一个或者多个通用处理器构成,例如中央处理器(Central Processing Unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(Application-SpecificIntegrated Circuit,ASIC)、可编程逻辑器件(Programmable Logic Device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)、现场可编程逻辑门阵列(Field-Programmable Gate Array,FPGA)、通用阵列逻辑(GenericArray Logic,GAL)或其任意组合。
存储器111可以包括易失性存储器(Volatile Memory),例如随机存取存储器(Random Access Memory,RAM);存储器111也可以包括非易失性存储器(Non-VolatileMemory),例如只读存储器(Read-Only Memory,ROM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD);存储器111还可以包括上述种类的组合。存储器111可以存储程序以及数据,其中,存储的程序包括:辅助镜像的制作程序、容器启动程序等,存储的数据包括:文件列表信息、快照文件、容器启动所需的必要文件等。存储器111可以单独存在,也可以集成于处理器110内部。
本申请实施例中,装置30用于实现上述图4和图5实施例所描述的方法或者图7实施例中第一服务器侧的方法。
参见图12,图12是本申请实施例提供的一种装置的功能结构示意图,装置50包括接收单元410、获取单元411和处理单元412。该装置50可以通过硬件、软件或者软硬件结合的方式来实现。
其中,接收单元410,用于接收容器启动请求,容器启动请求包含业务镜像的镜像名;获取单元411,用于获取辅助镜像,辅助镜像与业务镜像一一对应;处理单元412,用于基于辅助镜像懒加载业务镜像的部分信息,以建立进程以及进程的运行环境,部分信息表示容器启动时所需的必要文件;处理单元412,用于基于辅助镜像指导进程在运行环境中运行,以实现启动容器。
该装置50的各功能模块可用于实现图5实施例所描述的方法。在图5实施例中,接收单元410可用于执行S201,获取单元411可用于执行S202,处理单元412可用于执行S203和S204。该装置50的各功能模块还可以用于执行图7实施例中第一服务器侧的方法,为了说明书的简洁,在此不再赘述。
参见图13,图13是本申请实施例提供的一种装置的功能结构示意图,装置51包括获取单元510、启动单元511、制作单元512和发送单元513。该装置51可以通过硬件、软件或者软硬件结合的方式来实现。
其中,获取单元510,用于获取业务镜像;启动单元511,用于运行业务镜像以启动容器;制作单元512,用于对根据容器获得业务镜像对应的辅助镜像;发送单元513,用于将辅助镜像上传至第三服务器的镜像仓库中,以使第一服务器基于辅助镜像懒加载业务镜像的部分信息以建立进程以及进程的运行环境,以及基于辅助镜像指导进程在运行环境中运行以启动容器,部分信息包括容器启动时所需的必要文件。
该装置51的各功能模块可用于实现图4实施例所描述的方法。在图4实施例中,获取单元510可用于执行S101,启动单元511可用于执行S102,制作单元512可用于执行S102-S104。发送单元513可用于执行S300。该装置51的各功能模块还可以用于图7实施例中第二服务器侧所述的方法,为了说明书的简洁,在此不再赘述。
在本文上述的实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
需要说明的是,本领域普通技术人员可以看到上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质包括只读存储器(Read-Only Memory,ROM)、随机存储器(Random AccessMemory,RAM)、可编程只读存储器(Programmable Read-only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、一次可编程只读存储器(One-time Programmable Read-Only Memory,OTPROM)、电子抹除式可复写只读存储(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是个人计算机,服务器,或者网络设备、机器人、单片机、芯片、机器人等)执行本申请各个实施例所述方法的全部或部分步骤。
Claims (20)
1.一种容器启动方法,其特征在于,所述方法包括:
第一服务器接收容器启动请求,所述容器启动请求包含业务镜像的镜像名;
所述第一服务器根据所述镜像名获取辅助镜像,所述辅助镜像与所述业务镜像一一对应;
所述第一服务器基于所述辅助镜像懒加载所述业务镜像的部分信息,以建立进程以及所述进程的运行环境,所述部分信息包括容器启动时所需的必要文件;
所述第一服务器基于所述辅助镜像指导所述进程在所述运行环境中运行,以实现启动所述容器。
2.根据权利要求1所述的方法,其特征在于,所述辅助镜像包含文件列表信息和快照文件,所述文件列表信息包含所述容器启动时所需的所述必要文件的文件名;所述快照文件用于指示所述容器启动完成时所述进程的运行状态;
所述第一服务器基于所述辅助镜像懒加载所述业务镜像的部分信息,所述第一服务器基于所述辅助镜像指导所述进程在所述运行环境中运行,包括:
所述第一服务器基于所述文件列表信息懒加载所述业务镜像的部分信息;
所述第一服务器基于所述快照文件指导所述进程在所述运行环境中运行。
3.根据权利要求2所述的方法,其特征在于,所述文件列表信息具体包括多个文件名;所述第一服务器基于所述文件列表信息懒加载所述业务镜像的部分数据,包括:
所述第一服务器根据所述文件列表信息中所述多个文件名的列表顺序依次加载所述业务镜像中每个文件名对应的必要文件。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述第一服务器获取辅助镜像之前,所述方法还包括:
所述第一服务器向第三服务器发送查找命令,所述查找命令包含所述业务镜像的镜像名,所述查找命令用于指示所述第三服务器在镜像仓库中查找是否存在所述业务镜像和所述辅助镜像;
所述第一服务器根据所述镜像名获取辅助镜像,包括:
在所述镜像仓库存在所述业务镜像和所述辅助镜像时,所述第一服务器根据所述镜像名从所述第三服务器获取所述辅助镜像。
5.根据权利要求2-4任一项所述的方法,其特征在于,所述辅助镜像是第二服务器根据所述文件列表信息和所述快照文件获得的。
6.根据权利要求5所述的方法,其特征在于,所述文件列表信息是所述第二服务器基于所述容器启动所需的所述必要文件的文件名获得的;所述快照文件是所述第二服务器对所述容器启动完成时进程的运行状态进行快照获得的。
7.根据权利要求6所述的方法,其特征在于,所述快照文件是所述第二服务器采用用户态检查点保护恢复技术对所述首次启动完成后的容器进行快照获得的。
8.一种容器启动方法,其特征在于,所述方法包括:
第二服务器获取业务镜像;
所述第二服务器运行所述业务镜像以启动容器;
所述第二服务器根据所述容器获得所述业务镜像的辅助镜像;
所述第二服务器将所述辅助镜像上传至第三服务器的镜像仓库中,以使第一服务器基于所述辅助镜像懒加载所述业务镜像的部分信息以建立进程以及所述进程的运行环境,以及基于所述辅助镜像指导所述进程在所述运行环境中运行以启动所述容器,所述部分信息包括所述容器启动时所需的必要文件。
9.根据权利要求8所述的方法,其特征在于,所述第二服务器根据所述容器获得所述业务镜像的辅助镜像,包括:
所述第二服务器获取所述容器启动时所需的所述必要文件的文件名以获得文件列表信息;
所述第二服务器对所述容器启动完成时所述进程的运行状态进行快照获得快照文件;
所述第二服务器根据所述文件列表信息和所述快照文件获得所述辅助镜像。
10.根据权利要求9所述的方法,其特征在于,所述第二服务器对所述容器启动完成时进程的运行状态进行快照获得快照文件,包括:
所述第二服务器采用用户态检查点保护恢复技术对所述容器启动完成时进程的运行状态进行快照获得所述快照文件。
11.一种用于容器启动的装置,其特征在于,该装置包括:
接收单元,用于接收容器启动请求,所述容器启动请求包含业务镜像的镜像名;
获取单元,用于根据所述镜像名获取辅助镜像,所述辅助镜像与所述业务镜像一一对应;
处理单元,用于基于所述辅助镜像懒加载所述业务镜像的部分信息,以建立进程以及所述进程的运行环境,所述部分信息包括容器启动时所需的必要文件;
所述处理单元,还用于基于所述辅助镜像指导所述进程在所述运行环境中运行,以实现启动所述容器。
12.根据权利要求11所述的装置,其特征在于,所述辅助镜像包含文件列表信息和快照文件,所述文件列表信息包含所述容器启动时所需的所述必要文件的文件名;所述快照文件用于指示所述容器启动完成时所述进程的运行状态;
所述处理单元具体用于:
基于所述文件列表信息懒加载所述业务镜像的部分信息;
基于所述快照文件指导所述进程在所述运行环境中运行。
13.根据权利要求12所述的装置,其特征在于,所述文件列表信息具体包括多个文件名;所述处理单元具体用于:
根据所述文件列表信息中所述多个文件名的列表顺序依次加载所述业务镜像中每个文件名对应的必要文件。
14.根据权利要求11-13任一项所述的装置,其特征在于,所述装置还包括发送单元,用于向第三服务器发送查找命令,所述查找命令包含所述业务镜像的镜像名,所述查找命令用于指示所述第三服务器在镜像仓库中查找是否存在所述业务镜像和所述辅助镜像;
所述获取单元具体用于:在所述镜像仓库存在所述业务镜像和所述辅助镜像时,所述第一服务器根据所述镜像名从所述第三服务器获取所述辅助镜像。
15.根据权利要求12-14任一项所述的装置,其特征在于,所述辅助镜像是第二服务器根据所述文件列表信息和所述快照文件获得的。
16.根据权利要求15所述的装置,其特征在于,所述文件列表信息是所述第二服务器基于所述容器启动所需的所述必要文件的文件名获得的;所述快照文件是所述第二服务器对所述容器启动完成时进程的运行状态进行快照获得的。
17.根据权利要求16所述的装置,其特征在于,所述快照文件是所述第二服务器采用用户态检查点保护恢复技术对所述首次启动完成后的容器进行快照获得的。
18.一种用于容器启动的装置,其特征在于,所述装置包括:
获取单元,用于获取业务镜像;
启动单元,用于运行所述业务镜像以启动容器;
制作单元,用于根据所述容器获得所述业务镜像的辅助镜像;
发送单元,用于将所述辅助镜像上传至第三服务器的镜像仓库中,以使第一服务器基于所述辅助镜像懒加载所述业务镜像的部分信息以建立进程以及所述进程的运行环境,以及基于所述辅助镜像指导所述进程在所述运行环境中运行以启动所述容器,所述部分信息包括所述容器启动时所需的必要文件。
19.根据权利要求18所述的装置,其特征在于,所述制作单元具体用于:
获取所述容器启动时所需的所述必要文件的文件名以获得文件列表信息;
对所述容器启动完成时所述进程的运行状态进行快照获得快照文件;
根据所述文件列表信息和所述快照文件获得所述辅助镜像。
20.根据权利要求19所述的装置,其特征在于,所述制作单元还用于:
采用用户态检查点保护恢复技术对所述容器启动完成时进程的运行状态进行快照获得所述快照文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010751890.5A CN114064190A (zh) | 2020-07-30 | 2020-07-30 | 一种容器启动方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010751890.5A CN114064190A (zh) | 2020-07-30 | 2020-07-30 | 一种容器启动方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114064190A true CN114064190A (zh) | 2022-02-18 |
Family
ID=80227178
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010751890.5A Pending CN114064190A (zh) | 2020-07-30 | 2020-07-30 | 一种容器启动方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064190A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780210A (zh) * | 2022-05-17 | 2022-07-22 | 江苏安超云软件有限公司 | 一种提高集群服务器资源使用率的实现方法及系统 |
CN115145683A (zh) * | 2022-06-22 | 2022-10-04 | 北京火山引擎科技有限公司 | 云服务实现方法及装置 |
WO2023168875A1 (zh) * | 2022-03-10 | 2023-09-14 | 北京百度网讯科技有限公司 | 启动模型服务的方法、装置、设备、介质及产品 |
CN116880897A (zh) * | 2023-09-06 | 2023-10-13 | 中国电子科技集团公司第十研究所 | 面向航天测运控信息系统的集装箱式软件包管理方法 |
-
2020
- 2020-07-30 CN CN202010751890.5A patent/CN114064190A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023168875A1 (zh) * | 2022-03-10 | 2023-09-14 | 北京百度网讯科技有限公司 | 启动模型服务的方法、装置、设备、介质及产品 |
CN114780210A (zh) * | 2022-05-17 | 2022-07-22 | 江苏安超云软件有限公司 | 一种提高集群服务器资源使用率的实现方法及系统 |
CN115145683A (zh) * | 2022-06-22 | 2022-10-04 | 北京火山引擎科技有限公司 | 云服务实现方法及装置 |
WO2023246398A1 (zh) * | 2022-06-22 | 2023-12-28 | 北京火山引擎科技有限公司 | 云服务实现方法及装置 |
CN116880897A (zh) * | 2023-09-06 | 2023-10-13 | 中国电子科技集团公司第十研究所 | 面向航天测运控信息系统的集装箱式软件包管理方法 |
CN116880897B (zh) * | 2023-09-06 | 2023-12-08 | 中国电子科技集团公司第十研究所 | 面向航天测运控信息系统的集装箱式软件包管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114064190A (zh) | 一种容器启动方法及装置 | |
Ma et al. | Efficient live migration of edge services leveraging container layered storage | |
CN107797767B (zh) | 一种基于容器技术部署分布式存储系统及其存储方法 | |
CN101719073B (zh) | 一种基于智能客户端的按需下载实现方法 | |
CN111930473B (zh) | 在容器云上部署图像识别服务的方法与设备 | |
CN113448837B (zh) | 开发及测试环境部署方法、系统、电子设备及介质 | |
CN111124286A (zh) | 一种基于Libcloud的多云管理实现方法 | |
US20240111549A1 (en) | Method and apparatus for constructing android running environment | |
CN111651168A (zh) | 一种面向云原生应用场景的操作系统定制方法 | |
CN112231052A (zh) | 一种高性能分布式容器镜像分发系统及方法 | |
CN112306621A (zh) | 容器分层部署方法及系统 | |
CN116860746A (zh) | 用于轻量大数据的处理系统 | |
Glass | ObjectSpace voyager—the agent ORB for Java | |
US20190095261A1 (en) | Software resource management | |
CN114489833B (zh) | 一种在应用程序中提交flink作业到yarn集群的实现方法与装置 | |
CN114860344A (zh) | 容器启动方法、装置、计算机设备和存储介质 | |
US11709749B1 (en) | Diagnostic data collection for kubernetes | |
CN115357198A (zh) | 存储卷的挂载方法及装置、存储介质及电子设备 | |
CN111949378B (zh) | 虚拟机启动模式切换方法和装置、存储介质及电子设备 | |
CN111381833B (zh) | 一种容器化的openstack数据初始化方法 | |
CN113434244B (zh) | 实例创建和数据处理方法、设备、系统及存储介质 | |
CN114035890A (zh) | 一种基于容器技术的ci/cd服务部署方法、装置、设备及介质 | |
US11238013B2 (en) | Scalable access to shared files in a distributed system | |
CN116991331B (zh) | 日志文件的存储方法及装置、存储介质及电子装置 | |
US20230401080A1 (en) | Reducing deployment time for container clones in computing environments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |