CN113687915B - 容器运行方法、装置、设备及存储介质 - Google Patents
容器运行方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113687915B CN113687915B CN202110934711.6A CN202110934711A CN113687915B CN 113687915 B CN113687915 B CN 113687915B CN 202110934711 A CN202110934711 A CN 202110934711A CN 113687915 B CN113687915 B CN 113687915B
- Authority
- CN
- China
- Prior art keywords
- container
- image file
- file
- target image
- file cache
- 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.)
- Active
Links
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/45566—Nested virtual machines
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种容器运行方法、装置、设备及存储介质,属于计算机技术领域。该方法包括:启动文件缓存容器,所述文件缓存容器由第一容器启动;响应于所述第一容器的嵌套容器构建指令,将目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;响应于所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。本申请实施例中,可直接在文件缓存容器中获取目标镜像文件,进而基于目标镜像文件运行第二容器,避免因无法获取目标镜像文件而导致第二容器运行的失败,提高容器运行成功率。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种容器运行方法、装置、设备及存储介质。
背景技术
目前,开发人员可通过开源应用容器引擎(docker)打包应用以及依赖包至可移植容器中,使其运行在任何环境。嵌套容器(dockerindocker)是指在开发过程中,开发人员需在某一容器内进行镜像构建或运行其他容器的技术。
在容器运行时,需基于镜像文件运行。而在嵌套容器运行场景中,容器共享主机上的docker的守护进程(docker daemon),由于容器的隔离性,其仅能获取docker daemon所在主机的镜像文件。
然而,在嵌套容器运行过程存在需要获取被嵌套容器中部分镜像文件的情况,而由于权限问题被嵌套容器中镜像文件无法成功获取,进而导致嵌套容器运行的失败。
发明内容
本申请实施例提供了一种容器运行方法、装置、设备及存储介质。所述技术方案如下:
一方面,本申请实施例提供了一种容器运行方法,所述方法包括:
启动文件缓存容器,所述文件缓存容器由第一容器启动;
响应于所述第一容器的嵌套容器构建指令,将目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;
响应于所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。
另一方面,本申请实施例提供了一种容器运行装置,所述装置包括:
启动模块,用于启动文件缓存容器,所述文件缓存容器由第一容器启动;
存储模块,用于响应于所述第一容器的嵌套容器构建指令,将目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;
运行模块,用于响应于所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。
另一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括处理器和存储器;所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的容器运行方法。
另一方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现如上述方面所述的容器运行方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备实现上述方面的各种可选实现方式中提供的容器运行方法。
本申请实施例中,通过启动文件缓存容器,当在第一容器内构建第二容器时即在嵌套容器的场景下,则将运行第二容器所需的位于第一容器之内的目标镜像文件存储至文件缓存容器,当第二容器运行时,可直接在文件缓存容器中获取目标镜像文件,进而基于目标镜像文件运行第二容器,避免因无法在第一容器中获取目标镜像文件而导致第二容器运行的失败,提高容器运行成功率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的容器部署架构的架构示意图;
图2是本申请一个示例性实施例提供的容器运行方法的流程图;
图3是本申请另一个示例性实施例提供的容器运行方法的流程图;
图4是本申请一个示例性实施例提供的获取目标镜像文件的结构示意图;
图5是本申请另一个示例性实施例提供的容器运行方法的流程图;
图6是本申请一个示例性实施例提供的启动文件缓存容器的流程图;
图7是本申请一个示例性实施例提供的容器运行装置的结构框图;
图8是本申请一个示例性实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
如图1所示,docker采用客户端与服务端分离的方式进行部署。其中,docker客户端101(dockerclient)是docker的命令行工具,其与docker守护进程102(dockerdaemon)进行通信,向指定的docker守护进程发送容器构建、运行等请求。docker守护进程102用于接收并处理docker客户端101的请求,进行容器管理的进程。当构建镜像时,docker客户端101向docker守护进程102发送构建镜像命令(dockerbuild),docker守护进程102进行镜像的构建;当拉取镜像时,docker客户端101向docker守护进程102发送拉取镜像命令(dockerpull),docker守护进程102在仓库103中拉取镜像;当运行容器时,docker客户端101向docker守护进程102发送运行容器命令(dockerrun),docker守护进程102基于镜像运行容器(containers)。
相关技术中,可能需在docker容器(container)内进行docker的构建与运行,即存在嵌套容器。而嵌套容器与被嵌套的容器共享主机(dockerhost)的dockerdaemon,而主机中dockerdaemon仅可访问主机中的文件***,而被嵌套容器对其他容器不可见。以图1为例,主机中的dockerdaemon仅可访问主机中的镜像文件105,而无法访问docker容器104中的镜像文件。当在docker容器104中构建容器时,将产生嵌套容器,在运行docker容器104中容器时,可能需获取docker容器104中的镜像文件,而由于权限问题,主机中dockerdaemon无法成功获取docker容器104的镜像文件,造成容器运行失败。
图2示出了本申请一个示例性实施例提供的容器运行方法的流程图。本实施例以该方法用于安装有docker的计算机设备为例进行说明,该方法包括如下步骤:
步骤201,启动文件缓存容器,文件缓存容器由第一容器启动。
本申请实施例中,第一容器是指被嵌套的容器,即在第一容器中进行容器的构建与运行。
在一种可能的实施方式中,通过第一容器内的dockerclient向主机的dockerdaemon发送容器启动命令,dockerdaemon将根据容器启动命令启动文件缓存容器,其中,文件缓存容器用于存储第一容器新建的镜像文件。
相关技术中,第一容器对其他容器不可见,造成无法获取第一容器中的镜像文件,而由于文件缓存容器是由第一容器启动,因此,在启动过程中可设置文件缓存可被其他容器访问,进而获取其中存储的镜像文件。
步骤202,响应于第一容器的嵌套容器构建指令,将目标镜像文件存储至文件缓存容器,嵌套容器构建指令用于指示在第一容器中构建第二容器,目标镜像文件用于支持第二容器的运行。
可选的,嵌套容器构建指令用于指示在第一容器中构建第二容器,即本申请实施例中,第二容器指嵌套的容器,其位于第一容器之内。且对第一容器以及第二容器的管理操作均通过主机中的docker daemon执行。
由于在第二容器的运行过程中,可能需要获取第一容器内的镜像文件,而dockerdaemon其仅能访问主机的文件***,即仅可获取主机中的镜像文件,无法获取第一容器内的镜像文件,因此,为使第二容器在运行过程中,可获取到第一容器内的目标镜像文件,本申请实施例中,将第二容器运行所需的目标镜像文件存储在文件缓存容器中,从而便于第二容器获取目标镜像文件,其中,目标镜像文件是第一容器内的镜像文件。
可选的,文件缓存容器与第一容器相对应,即文件缓存容器仅用于存储唯一第一容器中的镜像文件。示意性的,当在第一容器A1中构建第二容器时,则将第一容器A1中的目标镜像文件存储至文件缓存容器A2中,文件缓存容器A2由第一容器A1启动;而当在第一容器B1中构建第二容器时,则将第一容器B1中的目标镜像文件存储至文件缓存容器B2中,文件缓存容器B2由第一容器B1启动。
步骤203,响应于第二容器的运行指令,在文件缓存容器中获取目标镜像文件,并基于目标镜像文件运行第二容器。
可选的,第二容器在运行时,将向dockerdaemon发送运行指令,而在此过程中,由于目标镜像文件已存储至文件缓存容器,而文件缓存容器可被访问,因此,将在文件缓存容器中获取第二容器所需的目标镜像文件,进而基于该目标镜像文件运行第二容器。
可选的,目标镜像文件是运行第二容器所需的全部镜像文件或部分镜像文件。
本申请实施例中,通过启动文件缓存容器,当在第一容器内构建第二容器时即在嵌套容器的场景下,则将运行第二容器所需的位于第一容器之内的目标镜像文件存储至文件缓存容器,当第二容器运行时,可直接在文件缓存容器中获取目标镜像文件,进而基于目标镜像文件运行第二容器,避免因无法在第一容器中获取目标镜像文件而导致第二容器运行的失败,提高容器运行成功率。
为确保成功获取文件缓存容器中的目标镜像文件,在一种可能的实施方式中,在启动文件缓存容器时,为文件缓存容器设置启动参数,从而在后续获取文件缓存容器中的目标镜像文件时,可基于文件缓存容器的启动参数获取,下面将采用示例性实施例进行说明。
请参考图3,其示出了本申请一个示例性实施例提供的容器运行方法的流程图。本实施例以该方法用于安装有docker的计算机设备为例进行说明,该方法包括如下步骤:
步骤301,响应于第一容器的容器启动指令,启动文件缓存容器,容器启动指令中包含目标名称以及目标路径,目标名称用于标识文件缓存容器,目标路径为文件缓存容器的开放路径。
本申请实施例中,文件缓存容器由第一容器启动,其中,第一容器中的dockerclient发起容器启动指令。由于可能存在多个容器,为后续成功在文件缓存容器中获取目标镜像文件,需对文件缓存容器设置标识,可选的,可通过为文件缓存容器设置固定的容器名称,作为文件缓存容器的唯一标识,即容器启动指令中包含目标名称,将目标名称作为文件缓存容器的容器名称。
可选的,容器启动指令中还包含目标路径,用于指示开放文件缓存容器的目标路径,即文件缓存容器的目标路径的访问权限为开放状态,其他容器可基于目标路径读取文件缓存容器中的文件。
示意性的,容器启动指令可为docker run--rm-d--name=fileStore-V/workspace--entrypoint=sleep busybox 7200,其中,包含目标名称fileStore以及目标路径workspace。
步骤302,响应于嵌套容器构建指令,将目标镜像文件存储至文件缓存容器的目标路径中。
当接收到嵌套容器构建指令且第一容器创建目标镜像文件后,则将目标镜像文件存储至文件缓存容器的目标路径下,便于后续基于目标路径读取目标镜像文件。
可选的,可通过dockercp命令将第一容器中的目标镜像文件拷贝至文件缓存容器的目标路径下。
结合上述示例,当第一容器创建目标镜像文件/workspace/test.txt之后,则将/workspace/test.txt存储至文件缓存容器fileStore的目标路径workspace中,即dockercp/workspace/test.txt fileStore:/workspace。
步骤303,响应于第二容器的运行指令,基于目标名称确认文件缓存容器。
可选的,第二容器的运行指令中包含文件缓存容器的目标名称,当接收到第二容器的运行指令时,dockerdeamon即根据运行指令中目标名称确认文件缓存容器,在容器名称为目标名称的文件缓存容器中获取目标镜像文件。
示意性的,运行指令中包含docker run--volumes-from=fileStore…,指示在文件缓存容器fileStore中获取目标镜像文件。
步骤304,基于目标路径从文件缓存容器中读取目标镜像文件。
当确定文件缓存容器后,在文件缓存容器中读取目标镜像文件,在读取过程中,由于文件缓存容器的目标路径为开放状态,因此,可基于目标路径在文件缓存容器中读取目标镜像文件。
示意性的,如图4所示,第一容器中docker client 401发起容器启动指令,主机中dockerdaemon 402接收到容器启动指令后,启动文件缓存容器filestore403,并将文件缓存容器filestore403的目标路径设置为对其他容器可见。当第一容器创建第二容器404所需的目标镜像文件时,将目标镜像文件存储至文件缓存容器filestore 403中,而当接收到docker client 401发送的运行第二容器404的运行指令时,dockerdaemon402在文件缓存容器filestore 403中获取目标镜像文件,将目标镜像文件挂载到第二容器404中,完成目标镜像文件的获取。
步骤305,基于目标镜像文件运行第二容器。
在基于目标镜像文件运行第二容器的过程中,首先需构建第二容器的镜像文件,目标镜像文件可为第二容器所需的全部镜像文件,也可为部分镜像文件。当目标镜像文件为第二容器所需的全部镜像文件时,可直接基于目标镜像文件构建第二容器的镜像文件,进而基于构建得到的第二容器的镜像文件运行第二容器。
而当目标镜像文件仅为第二容器所需的部分镜像文件时,其他所需镜像文件则可在主机所在的文件***中获取,或在容器仓库中获取得到。进而基于全部所需的镜像文件构建得到第二容器的镜像文件,基于该镜像文件运行第二容器。
示意性的,可通过dockerbuild命令构建第二容器的镜像文件,如通过命令dockerbuild-tmyharbor.catfile.test.构建得到第二容器的镜像文件,基于该镜像文件运行第二容器,即docker run--volumes-from=fileStore--rm-d--name=testl-V/var/run/dockersock/var/run/docker.sock myharbor.catile.test。
可选的,当构建第二容器的镜像文件后,还可将第二容器的镜像文件存储至仓库中,便于后续的获取与使用。示意性的,通过docker push myharbor.catfile.test命令,将镜像myharbor.catfile.test存储至仓库。
步骤306,获取容器镜像文件,容器镜像文件由第二容器在运行过程中打印得到。
由于可能存在文件缓存容器异常或目标镜像文件中未成功存储至文件缓存容器等异常情况,导致第二容器运行时,无法成功获取目标镜像文件,即存在目标镜像文件挂载失败的情况。因此,在一种可能的实施方式中,获取容器镜像文件,根据容器镜像文件判断目标镜像文件是否挂载成功。
可选的,容器镜像文件是第二容器基于构建的镜像文件运行过程中打印输出的文件,其包含第二容器运行过程中全部镜像文件。
步骤307,响应于容器镜像文件中包含目标镜像文件,确定目标镜像文件挂载成功。
获取容器镜像文件后,即可检测容器镜像文件中是否包含目标镜像文件,若包含,则表明目标镜像文件挂载成功,即第二容器可正常运行。
而当容器镜像文件中不包含目标镜像文件时,则表明目标镜像文件挂载失败,将显示错误信息,用于提示未成功挂载目标镜像文件。
步骤308,停止并删除文件缓存容器。
由于文件缓存容器在运行过程中将持续占用CPU资源,为降低对资源的占用,当基于目标镜像文件运行第二容器后,将停止运行文件缓存容器,避免对CPU资源的持续占用。
可选的,可通过dockerstop命令,停止文件缓存容器。结合上述示例,通过向dockerdaemon发送dockerstopfilestore命令,即可停止文件缓存容器filestore的运行。
且文件缓存容器占用一定的存储空间,因此,在一种可能的实施方式中,当停止文件缓存容器的运行后,即可将文件缓存容器删除,避免文件缓存容器持续保留,造成存储空间的浪费。可选的,可通过在容器启动指令中设置目标参数,用于指示当文件缓存容器停止运行时,自动删除文件缓存容器,其中目标参数可为-rm参数,即如容器启动指令dockerrun--rm-d--name=fileStore-V/workspace--entrypoint=sleep busybox 7200所示,其中,包含-rm参数,当文件缓存容器fileStore停止运行时将被删除。
在一种可能的实施方式中,容器运行流程如图5所示:
步骤501,运行第一容器。
步骤502,响应于第一容器的容器启动指令,启动文件缓存容器。
可选的,容器启动指令可为docker run--rm-d--name=fileStore-V/workspace--entrypoint=sleep busybox 7200。
步骤503,第一容器创建目标镜像文件。
即echo"test">>/workspace/test txt。
步骤504,将目标镜像文件存储至文件缓存容器。
即docker/workspace/test txt fleStore/workspace。
步骤505,响应于第二容器的运行指令,在文件缓存容器中获取目标镜像文件,并基于目标镜像文件运行第二容器。
运行指令可为:docker run--volumes-from=fileStore--rm-d--name=testl-V/var/run/dockersock/var/run/docker.sock myharbor.catile.test。
步骤506,确定容器镜像文件中是否包含目标镜像文件,若是,则执行步骤507,若否,则执行步骤508。
步骤507,目标镜像文件挂载成功。
步骤508,目标镜像文件挂载失败。
步骤509,停止运行文件缓存容器。
即docker stop fileStore。
本实施例中,为文件缓存容器设置固定的目标名称,并开放文件缓存容器的目标路径,当目标镜像文件存储至文件缓存容器中时,可基于目标名称确定文件缓存容器,并基于目标路径从文件缓存容器中读取目标镜像文件,确保成功挂载目标镜像文件。
且本实施例中,在基于目标镜像文件运行第二容器后,即停止文件缓存容器的运行,且进一步删除文件缓存容器,避免文件缓存容器对CPU资源以及存储资源的持续占用,造成不必要的资源浪费,有助于提高资源利用率。
在一种可能的应用场景下,可能存在第一容器意外停止运行的情况,而当第一容器意外停止时,文件缓存容器将持续处于运行状态,将会持续占用CPU资源,造成资源的浪费。因此,为避免因异常原因造成文件缓存容器持续运行的情况,在一种可能的实施方式中,在启动文件缓存容器时,为文件缓存容器设置运行时间阈值,可选的,在容器启动指令中设定运行时间阈值。
可选的,响应于文件缓存容器的运行时间达到运行时间阈值,停止并删除文件缓存容器。即当文件缓存容器启动后,开始计时,当时间达到运行时间阈值时,即停止文件缓存容器的运行。在文件缓存容器停止后,将进一步被删除。
示意性的,容器启动指令docker run--rm-d--name=fileStore-V/workspace--entrypoint=sleep busybox 7200中设定运行时间阈值为7200s,即在文件缓存容器fileStore运行时间达到2h后,停止文件缓存容器fileStore的运行,且由于指令中包含-rm参数,因此,在文件缓存容器停止运行后将被删除。
本实施例中,通过为文件缓存容器设定运行时间阈值,在运行时间达到运行时间阈值时,将自动停止文件缓存容器的运行,避免异常造成的文件缓存容器持续运行,导致不必要的资源浪费。
相关技术中,由于第一容器的容器名称随机设定,且第一容器对其他容器不可见,因此无法获取第一容器中的目标镜像文件,而当具备第一容器启动参数的修改权限时,则可对第一容器的容器名称进行修改,且可开放第一容器的路径,将该路径设置为对其他容器可见,该种情形下,当接收到第二容器的运行指令时,可直接在第一容器中读取目标镜像文件,无需启动文件缓存容器。因此,在启动文件缓存容器之前,需判断是否可以修改第一容器的启动参数,该方式可包括如下步骤:
步骤一,响应于第一容器启动参数的修改指令,修改所述第一容器的名称为目标名称且开放所述第一容器的目标路径。
可选的,第一容器启动参数即为第一容器的容器名称以及第一容器的开放路径。当接收到第一容器启动参数的修改指令时,将对第一容器的容器名称进行修改,将其修改为固定的目标名称;且开放第一容器的目标路径,使其他容器可基于目标路径读取第一容器中的目标镜像文件。
步骤二,响应于第一容器启动参数修改失败,启动文件缓存容器。
当不具备第一容器启动参数的修改权限时,第一容器启动参数将修改失败,即无法修改第一容器的容器名称且无法设置第一容器的目标路径对其他容器可见,此时,则需启动文件缓存容器,利用文件缓存容器使第二容器成功挂载目标镜像文件。
本实施例中,将第一容器启动参数修改失败时,启动文件缓存容器,而当第一容器启动参数修改成功时,可直接在第一容器中获取目标镜像文件,无需启动文件缓存容器,减少文件缓存容器对资源的占用。
在上述实施例中,第一容器与第二容器共享主机中dockerdaemon,而由于主机中dockerdaemon仅可访问主机中文件***,无法访问第一容器中的镜像文件,因此,通过设置文件缓存容器获取第一容器中的目标镜像文件,进而支持第二容器的运行。而在另一种可能的实施方式中,可在第一容器中建立dockerdaemon,第一容器中的dockerdaemon即可直接获取第一容器中的目标镜像文件,无需建立文件缓存容器。下面将以示例性实施例进行说明。结合上述实施例,启动文件缓存容器可包括如下步骤:
步骤601,确定第一容器的运行环境。
可选的,容器可能运行在Kubernetes集群中,也可能运行在本地环境。其中,Kubernetes(K8s)集群是一个可移植、可扩展的开源平台,用于管理容器化的工作负载可服务,在K8s集群中存在多个容器的部署。在K8s集群中运行第一容器以及在本地环境运行第一容器时,所具备的权限不同,且新建dockerdaemon对其他容器的影响也不同,因此,需首先确定第一容器的运行环境,判断第一容器运行在本地环境,或者,运行在K8s集群中。
步骤602,响应于第一容器运行在Kubernetes集群中,启动文件缓存容器。
当容器运行在K8s集群中时,若在第一容器中新建dockerdaemon,则可能对其余容器产生影响,且需向K8s中的管理节点申请权限,过程较为繁杂,且当无法获取权限时,也无法新建dockerdaemon,影响目标镜像文件的挂载。因此,当容器运行在K8s集群中时,可通过启动文件缓存容器,将第一容器中目标镜像文件存储至文件缓存容器中,使第二容器可成功挂载目标镜像文件。
步骤603,响应于第一容器运行在本地,在第一容器中建立容器守护进程,容器守护进程用于获取第一容器中的目标镜像文件。
而当第一容器运行在本地时,则不存在对其他容器的影响,可直接通过dockerrun-privileged的方式在第一容器中新建docker deamon。当接收到第一容器的嵌套容器构建指令时,第一容器中的docker deamon将在第一容器中构建第二容器,且当接收到第二容器的运行指令时,从第一容器中读取目标镜像文件,并基于目标镜像文件运行第二容器,无需构建文件缓存容器。
图7是本申请一个示例性实施例提供的容器运行装置的结构框图,该装置包括:
启动模块701,用于启动文件缓存容器,所述文件缓存容器由第一容器启动;
存储模块702,用于响应于所述第一容器的嵌套容器构建指令,将目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;
运行模块703,用于响应于所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。
可选的,所述启动模块701,还用于:
响应于第一容器的容器启动指令,启动所述文件缓存容器,所述容器启动指令中包含目标名称以及目标路径,所述目标名称用于标识所述文件缓存容器,所述目标路径为所述文件缓存容器的开放路径;
所述存储模块702,还用于:
响应于所述嵌套容器构建指令,将所述目标镜像文件存储至所述文件缓存容器的所述目标路径中。
可选的,所述运行模块703,包括:
确认单元,用于响应于所述第二容器的运行指令,基于所述目标名称确认所述文件缓存容器;
读取单元,用于基于所述目标路径从所述文件缓存容器中读取所述目标镜像文件;
运行单元,用于基于所述目标镜像文件运行所述第二容器。
可选的,所述装置还包括:
获取模块,用于获取容器镜像文件,所述容器镜像文件由所述第二容器在运行过程中打印得到;
确定模块,用于响应于所述容器镜像文件中包含所述目标镜像文件,确定所述目标镜像文件挂载成功。
可选的,所述装置还包括:
第一删除模块,用于停止并删除所述文件缓存容器。
可选的,所述容器启动指令中包含运行时间阈值;
所述装置还包括:
第二删除模块,用于响应于所述文件缓存容器的运行时间达到所述运行时间阈值,停止并删除所述文件缓存容器。
可选的,所述装置还包括:
修改模块,用于响应于第一容器启动参数的修改指令,修改所述第一容器的名称为目标名称且开放所述第一容器的目标路径;
可选的,所述启动模块701,还用于:
响应于所述第一容器启动参数修改失败,启动所述文件缓存容器。
可选的,所述启动模块701,包括:
确定单元,用于确定所述第一容器的运行环境;
启动单元,用于响应于所述第一容器运行在Kubernetes集群中,启动所述文件缓存容器;
可选的,所述装置还包括:
建立模块,用于响应于所述第一容器运行在本地,在所述第一容器中建立容器守护进程,所述容器守护进程用于获取所述第一容器中的所述目标镜像文件。
本申请实施例中,通过启动文件缓存容器,当在第一容器内构建第二容器时即在嵌套容器的场景下,则将运行第二容器所需的位于第一容器之内的目标镜像文件存储至文件缓存容器,当第二容器运行时,可直接在文件缓存容器中获取目标镜像文件,进而基于目标镜像文件运行第二容器,避免因无法获取目标镜像文件而导致第二容器运行的失败,提高容器运行成功率。
需要说明的是:上述实施例提供的装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其实现过程详见方法实施例,这里不再赘述。
请参考图8,其示出了本申请一个示例性实施例提供的计算机设备的结构示意图。具体来讲:所述计算机设备800包括中央处理单元(Central Processing Unit,CPU)801、包括随机存取存储器802和只读存储器803的***存储器804,以及连接***存储器804和中央处理单元801的***总线805。所述计算机设备800还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(Input/Output,I/O***)806,和用于存储操作***813、应用程序814和其他程序模块815的大容量存储设备807。
所述基本输入/输出***806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中所述显示器808和输入设备809都通过连接到***总线805的输入输出控制器810连接到中央处理单元801。所述基本输入/输出***806还可以包括输入输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器810还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备807通过连接到***总线805的大容量存储控制器(未示出)连接到中央处理单元801。所述大容量存储设备807及其相关联的计算机可读介质为计算机设备800提供非易失性存储。也就是说,所述大容量存储设备807可以包括诸如硬盘或者驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括随机存取记忆体(RAM,Random Access Memory)、只读存储器(ROM,Read Only Memory)、闪存或其他固态存储其技术,只读光盘(Compact Disc Read-Only Memory,CD-ROM)、数字通用光盘(Digital Versatile Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的***存储器804和大容量存储设备807可以统称为存储器。
存储器存储有一个或多个程序,一个或多个程序被配置成由一个或多个中央处理单元801执行,一个或多个程序包含用于实现上述方法的指令,中央处理单元801执行该一个或多个程序实现上述各个方法实施例提供的方法。
根据本申请的各种实施例,所述计算机设备800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备800可以通过连接在所述***总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其他类型的网络或远程计算机***(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的方法中由计算机设备所执行的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上各个实施例所述的容器运行方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的容器运行方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读存储介质中或者作为计算机可读存储介质上的一个或多个指令或代码进行传输。计算机可读存储介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种容器运行方法,其特征在于,所述方法包括:
启动文件缓存容器,所述文件缓存容器由第一容器启动,且在启动过程中设置所述文件缓存容器可被其他容器访问;
响应于所述第一容器的嵌套容器构建指令,将所述第一容器内的目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;
响应于所述第一容器发送的运行所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。
2.根据权利要求1所述的方法,其特征在于,所述启动文件缓存容器,包括:
响应于第一容器的容器启动指令,启动所述文件缓存容器,所述容器启动指令中包含目标名称以及目标路径,所述目标名称用于标识所述文件缓存容器,所述目标路径为所述文件缓存容器的开放路径;
所述响应于所述第一容器的嵌套容器构建指令,将所述第一容器内的目标镜像文件存储至所述文件缓存容器,包括:
响应于所述嵌套容器构建指令,将所述第一容器内的所述目标镜像文件存储至所述文件缓存容器的所述目标路径中。
3.根据权利要求2所述的方法,其特征在于,所述响应于所述第一容器发送的运行所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器,包括:
响应于所述第一容器发送的运行所述第二容器的运行指令,基于所述目标名称确认所述文件缓存容器;
基于所述目标路径从所述文件缓存容器中读取所述目标镜像文件;
基于所述目标镜像文件运行所述第二容器。
4.根据权利要求1至3任一所述的方法,其特征在于,所述响应于所述第一容器发送的运行所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器之后,所述方法还包括:
获取容器镜像文件,所述容器镜像文件由所述第二容器在运行过程中打印得到;
响应于所述容器镜像文件中包含所述目标镜像文件,确定所述目标镜像文件挂载成功。
5.根据权利要求1至3任一所述的方法,其特征在于,所述响应于所述第一容器发送的运行所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器之后,所述方法还包括:
停止并删除所述文件缓存容器。
6.根据权利要求2所述的方法,其特征在于,所述容器启动指令中包含运行时间阈值;
所述方法还包括:
响应于所述文件缓存容器的运行时间达到所述运行时间阈值,停止并删除所述文件缓存容器。
7.根据权利要求1至3任一所述的方法,其特征在于,所述启动文件缓存容器之前,所述方法还包括:
响应于第一容器启动参数的修改指令,修改所述第一容器的名称为目标名称且开放所述第一容器的目标路径;
所述启动文件缓存容器,包括:
响应于所述第一容器启动参数修改失败,启动所述文件缓存容器。
8.根据权利要求1至3任一所述的方法,其特征在于,所述启动文件缓存容器,包括:
确定所述第一容器的运行环境;
响应于所述第一容器运行在Kubernetes集群中,启动所述文件缓存容器;
所述方法还包括:
响应于所述第一容器运行在本地,在所述第一容器中建立容器守护进程,所述容器守护进程用于获取所述第一容器中的所述目标镜像文件。
9.一种容器运行装置,其特征在于,所述装置包括:
启动模块,用于启动文件缓存容器,所述文件缓存容器由第一容器启动,且在启动过程中设置所述文件缓存容器可被其他容器访问;
存储模块,用于响应于所述第一容器的嵌套容器构建指令,将所述第一容器内的目标镜像文件存储至所述文件缓存容器,所述嵌套容器构建指令用于指示在所述第一容器中构建第二容器,所述目标镜像文件用于支持所述第二容器的运行;
运行模块,用于响应于所述第一容器发送的运行所述第二容器的运行指令,在所述文件缓存容器中获取所述目标镜像文件,并基于所述目标镜像文件运行所述第二容器。
10.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器;所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至8任一所述的容器运行方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至8任一所述的容器运行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110934711.6A CN113687915B (zh) | 2021-08-16 | 2021-08-16 | 容器运行方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110934711.6A CN113687915B (zh) | 2021-08-16 | 2021-08-16 | 容器运行方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113687915A CN113687915A (zh) | 2021-11-23 |
CN113687915B true CN113687915B (zh) | 2023-07-21 |
Family
ID=78580257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110934711.6A Active CN113687915B (zh) | 2021-08-16 | 2021-08-16 | 容器运行方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113687915B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103368807A (zh) * | 2012-04-05 | 2013-10-23 | 思科技术公司 | 用于在网络环境中迁移应用虚拟机的***和方法 |
CN110688174A (zh) * | 2019-09-30 | 2020-01-14 | 李福帮 | 容器启动方法、存储介质和电子设备 |
CN110716980A (zh) * | 2018-06-27 | 2020-01-21 | 上海掌颐网络科技有限公司 | 一种基于嵌套式容器的虚拟覆盖管理共识区块链操作*** |
US10749980B1 (en) * | 2016-12-21 | 2020-08-18 | EMC IP Holding Company LLC | Autonomous storage device and methods for distributing content |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10599463B2 (en) * | 2018-03-28 | 2020-03-24 | Nutanix, Inc. | System and method for creating virtual machines from containers |
-
2021
- 2021-08-16 CN CN202110934711.6A patent/CN113687915B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103368807A (zh) * | 2012-04-05 | 2013-10-23 | 思科技术公司 | 用于在网络环境中迁移应用虚拟机的***和方法 |
US10749980B1 (en) * | 2016-12-21 | 2020-08-18 | EMC IP Holding Company LLC | Autonomous storage device and methods for distributing content |
CN110716980A (zh) * | 2018-06-27 | 2020-01-21 | 上海掌颐网络科技有限公司 | 一种基于嵌套式容器的虚拟覆盖管理共识区块链操作*** |
CN110688174A (zh) * | 2019-09-30 | 2020-01-14 | 李福帮 | 容器启动方法、存储介质和电子设备 |
Non-Patent Citations (2)
Title |
---|
Docker Container Security in Cloud Computing;Kelly Brady等;《2020 10th Annual Computing and Communication Workshop and Conference (CCWC)》;第975-980页 * |
基于Docker-Swarm的微服务管理技术研究与实现;吴杰楚;《中国优秀硕士学位论文全文数据库 信息科技辑》;第I139-162页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113687915A (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9465625B2 (en) | Provisioning of operating environments on a server in a networked environment | |
US9253265B2 (en) | Hot pluggable extensions for access management system | |
EP3944082A1 (en) | Extending the kubernetes api in-process | |
CN113296792B (zh) | 存储方法、装置、设备、存储介质和*** | |
US10310900B2 (en) | Operating programs on a computer cluster | |
CN109614167B (zh) | 一种管理插件的方法和*** | |
US8473702B2 (en) | Information processing apparatus, execution environment transferring method and program thereof | |
CN111464603B (zh) | 一种服务器扩容方法及扩容*** | |
CN110890987A (zh) | 自动创建集群的方法、装置、设备和*** | |
WO2016116013A1 (zh) | 软件升级方法和*** | |
CN111506388B (zh) | 容器性能探测方法、容器管理平台及计算机存储介质 | |
CN113687915B (zh) | 容器运行方法、装置、设备及存储介质 | |
CN113448609B (zh) | 一种容器的升级方法、装置、设备和存储介质 | |
JPH09319720A (ja) | 分散プロセス管理システム | |
CN113900765A (zh) | 云应用启动方法、设备、终端及计算机可读存储介质 | |
CN114356214B (zh) | 一种针对kubernetes***提供本地存储卷的方法及*** | |
CN112749042B (zh) | 一种应用运行方法和装置 | |
CN114327752A (zh) | 一种微服务配置方法、装置及设备 | |
US12014161B2 (en) | Deployment of management features using containerized service on management device and application thereof | |
CN116506284A (zh) | 服务器远程带内管理***、方法、计算机设备和存储介质 | |
CN117112037A (zh) | 一种云平台启动方法、装置、电子设备及存储介质 | |
CN117971262A (zh) | ***升级方法、装置、电子设备及可读存储介质 | |
CN117032818A (zh) | 一种基本输入输出***bios选项配置方法和装置 | |
CN116775204A (zh) | 探针更新方法、装置、设备及存储介质 | |
CN118152067A (zh) | 一种LXC容器接入Kubernetes的方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |