CN114651233A - 即时容器 - Google Patents

即时容器 Download PDF

Info

Publication number
CN114651233A
CN114651233A CN202080077159.7A CN202080077159A CN114651233A CN 114651233 A CN114651233 A CN 114651233A CN 202080077159 A CN202080077159 A CN 202080077159A CN 114651233 A CN114651233 A CN 114651233A
Authority
CN
China
Prior art keywords
execution environment
enhanced
data store
boot
software application
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
Application number
CN202080077159.7A
Other languages
English (en)
Inventor
多米尼克·克莱默
瑞安·戴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN114651233A publication Critical patent/CN114651233A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4416Network booting; Remote initial program loading [RIPL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

一种用于为软件应用配置并且部署执行环境的方法。所述方法包括从数据储存器(150)接收引导执行环境(310),该引导执行环境包括软件应用(200),该软件应用包括依赖关系(212)的清单。该方法包括执行引导执行环境并且确定增强执行环境(320)是否可以从数据储存器获得。当增强执行环境可以从数据储存器获得时,该方法包括从数据储存器接收增强执行环境并且基于所接收到的增强执行环境来增强引导执行环境。当增强执行环境不可以从数据获得时,该方法包括基于依赖关系的清单来增强引导执行环境以创建增强执行环境并且将增强执行环境存储在数据储存器中。该方法还包括执行软件应用。

Description

即时容器
技术领域
本公开涉及为软件应用高效地配置并且部署执行环境。
背景技术
容器技术提供了快速地缩放应用和服务而不招致与传统虚拟化环境相关联的大开销的前景。在容器中进行操作部署之前,可以在软件开发环境中开发和测试软件应用的源代码。容器构建器可以公开地用于从输入源代码构建输出容器。这些容器构建器通常包括描述如何将源代码包装到对应容器中以进行部署的指令和构建工具。容器构建器常常产生重量级容器镜像,这些重量级容器镜像包含诸如软件开发套件、编译器和/或调试器的构建时工具以及用于执行输出容器的运行时环境这两者。这些重量级容器镜像较大并且在被部署或分发给客户时包含不必要的内容/组件。例如,在部署的容器中包括编译器是不必要的,因为它增加容器的重量以及向包装部署引入攻击向量和安全漏洞。轻量级执行环境包括仅支持应用或服务所需的组件/内容。然而,执行环境的这种精简可能是以增加的配置负担为代价。软件开发平台可能没有为配置并且部署应用执行环境而被优化。此外,软件开发者可能不具备配置并且部署轻量级执行环境的技能或知识,或者可能没有配置或部署执行环境的特权。结果,想要在轻量级执行环境中部署应用的软件开发者面临效率低下的问题。
发明内容
本公开的各方面涉及为软件应用配置并且部署执行环境。一个方面提供了一种方法,该方法包括在数据处理硬件处从数据储存器(store)接收引导执行环境,该引导执行环境包括具有依赖关系的清单的软件应用。该方法进一步包括由数据处理硬件执行引导执行环境,从而使数据处理硬件执行包括确定增强执行环境是否可以从数据储存器获得的操作。当增强执行环境可以从数据储存器获得时,操作还包括:从数据储存器接收增强执行环境;基于增强执行环境来增强引导执行环境;以及执行软件应用。当增强执行环境不可以从数据储存器获得时,操作包括基于依赖关系的清单来增强引导执行环境以创建增强执行环境;将增强执行环境存储在数据储存器中;以及执行软件应用。
本公开的实现方式可以包括以下可选特征中的一个或多个。在一些实现方式中,该方法包括由数据处理硬件注解数据储存器中的增强执行环境以指示软件应用的版本、与增强执行环境相关联的操作系统版本、或与增强执行环境相关联的处理器架构中的至少一个。确定增强执行环境是否可以从数据储存器获得可以包括确定增强执行环境是否和软件应用、与引导执行环境相关联的操作系统版本、或与引导执行环境相关联的处理器架构中的至少一个兼容。
该方法可以进一步包括在数据处理硬件处接收对软件应用的构建请求;由数据处理硬件基于软件应用来配置引导执行环境;以及由数据处理硬件将引导执行环境存储在数据储存器中。基于依赖关系的清单来增强引导执行环境可以包括安装应用依赖关系。在一些示例中,软件应用是JavaScript应用、Python应用或Ruby应用之一。应用依赖关系可以包括支持库、架构特定的二进制模块或即时编译的模块中的至少一个。在一些实现方式中,该方法包括在基于依赖关系的清单来增强引导执行环境以创建增强执行环境之后,标识更新文件的集合,更新文件的集合包括通过基于依赖关系的清单来增强引导执行环境而添加或修改的文件。将增强执行环境存储在数据储存器中可以包括将更新文件的集合存储在数据储存器中。在一些示例中,引导执行环境包括容器镜像并且数据储存器包括容器注册表。
本公开的另一方面提供了一种用于为软件应用配置并且部署执行环境的系统。该系统包括数据处理硬件和与该数据处理硬件通信的存储器硬件。该存储器硬件存储指令,当在数据处理硬件上执行时,这些指令使数据处理硬件执行操作。操作包括从数据储存器接收引导执行环境,该引导执行环境包括具有依赖关系的清单的软件应用。操作还包括执行引导执行环境,从而使数据处理硬件执行进一步操作,这些进一步操作包括确定增强执行环境是否可以从数据储存器获得。当增强执行环境可以从数据储存器获得时,操作还包括从数据储存器接收增强执行环境,基于增强执行环境来增强引导执行环境,并且执行软件应用。当增强执行环境不可以从数据储存器获得时,操作包括基于依赖关系的清单来增强引导执行环境以创建增强执行环境,将增强执行环境存储在数据储存器中,并且执行软件应用。
本公开的实现方式可以包括以下可选特征中的一个或多个。在一些实现方式中,操作还包括注解数据储存器中的增强执行环境以指示软件应用的版本、与增强执行环境相关联的操作系统版本、或与增强执行环境相关联的处理器架构中的至少一个。确定增强执行环境是否可以从数据储存器获得可以包括确定增强执行环境是否和软件应用、与引导执行环境相关联的操作系统版本、或与引导执行环境相关联的处理器架构中的至少一个兼容。
操作还可以包括接收对软件应用的构建请求,基于软件应用来配置引导执行环境,以及将引导执行环境存储在数据储存器中。基于依赖关系的清单来增强引导执行环境可以包括安装应用依赖关系。在一些示例中,软件应用是JavaScript应用、Python应用或Ruby应用之一。应用依赖关系可以包括支持库、架构特定的二进制模块或即时编译的模块中的至少一个。在一些实现方式中,操作包括在基于依赖关系的清单来增强引导执行环境以创建增强执行环境之后,标识更新文件的集合,更新文件的集合包括通过基于依赖关系的清单来增强引导执行环境而添加或修改的文件。将增强执行环境存储在数据储存器中可以包括将更新文件的集合存储在数据储存器中。在一些示例中,引导执行环境包括容器镜像并且数据储存器包括容器注册表。
在以下附图和描述中阐述本公开的一个或多个实现方式的细节。根据说明书和附图,并且根据权利要求书,其他方面、特征和优点将是显而易见的。
附图说明
图1是用于配置并且部署应用执行环境的示例环境的示意图。
图2A-2C是软件应用和相应的依赖关系的清单的示意图。
图3A-3E是构建用于执行软件应用的执行环境的示意图。
图4是用于为软件应用配置并且部署执行环境的方法的操作的示例布置的流程图。
图5是示例性计算设备的示意图。
在各个附图中相似的参考符号指示相似的元件。
具体实施方式
可以在软件开发环境中开发软件应用,然后将其在操作上部署在应用执行环境中。容器正在作为用于部署软件应用的优选应用执行环境出现。容器技术提供了快速地缩放应用和服务而不招致与传统虚拟化环境相关联的大开销的前景。多个容器化应用可以在单个主机计算机上运行,从而访问相同的底层操作系统。此外,容器化应用可以在各种底层操作系统和/或计算机或处理器架构上运行。容器构建器可以公开地用于从输入源代码构建容器镜像。这些容器构建器通常产生重量级容器镜像,这些重量级容器镜像包含诸如软件开发套件、编译器和/或调试器的构建时工具以及执行软件应用所需的执行时环境。这些重量级容器镜像较大并且在被部署/分发时常常包含不必要的内容/组件。例如,在部署的容器中包括编译器是不必要的,因为它增加容器的重量,并且它向包装部署引入攻击向量和安全漏洞。配置并且部署容器镜像需要时间、工作量和技能。每当软件应用被更新时,可能需要重新配置容器镜像。频繁的重新配置增加软件开发的成本和工作量。
轻量级执行环境包括仅支持应用或服务所需的组件/内容,例如,而不包括软件开发内容/组件。然而,可能需要专业技能或知识来配置和部署轻量级执行环境。配置可能需要标识要省略的软件开发内容/组件以及标识要包括在执行环境中的必要的执行时内容/组件。简而言之,应用执行环境可以与软件开发环境实质上不同。例如,软件开发环境可以包括web浏览器、电子邮件客户端、修订控制系统、和/或为了易于软件开发而优化的图形显示。然而,可以为了已部署的应用的可靠高效执行而优化应用执行环境。软件开发者可能不具备配置和部署轻量级执行环境的技能或知识,或者可能没有配置或部署执行环境的特权。
容器构建器可以公开地用于构建通用容器镜像,而无需深入掌握容器配置最佳实践。然而,这些容器构建器从静态镜像构建容器。也就是说,静态容器镜像包含用于应用的初始或“引导”执行的环境。虽然这种方法对于架构无关或架构不可知论的软件应用可能是足够的,但是软件应用可以在定制或增强它们的执行环境之后更高效地执行。例如,软件应用可以动态地安装内容,诸如架构特定的二进制模块、支持库或其他文件,或者应用运行时环境可以将源代码或字节代码编译为架构特定的机器代码以改进应用性能。因此,从静态镜像构建容器的通用容器构建工具缺少捕获这些动态的执行时增强功能或者更新容器镜像以反映执行时架构特定的增强功能的能力。每当应用被重新启动时,这些执行时增强功能被再次执行。在容器内执行重量级容器配置工具可能能够以增加重量以及所需时间、工作量和技能来配置和/或部署容器为代价来捕获这些动态的执行时增强功能。本文的实现方式针对为软件应用高效地配置和部署安全执行环境(例如,容器),包括捕获由软件应用为执行环境定制以用于在软件应用的后续执行中使用的动态的和/或架构特定的增强功能的方法和系统。
参考图1,在一些实现方式中,系统100包括与软件开发者10相关联的开发者设备110、110a-n,软件开发者10可以例如经由网络130与远程系统140进行通信。远程系统140可以是具有可缩放/弹性资源142的分布式系统(例如,云环境)。资源142包括计算资源(例如,数据处理硬件)144和/或存储资源(例如,存储器硬件)146。软件开发者10可以使用开发者设备110来开发软件应用200以供在远程系统140上执行。远程系统140还执行容器构建器300以便构建一个或多个安全执行环境310、320(例如,容器)以用于与应用200如何由开发者10开发/创建无关地在远程系统140上运行软件应用200。与需要开发者10提供与用于构建容器以运行软件应用200的指令相关联的配置的通用容器构建工具(例如,Docker)相反,容器构建器300被配置成基于在配置阶段301期间从开发者设备110接收到的软件应用200自动地配置引导执行环境310(例如,引导容器310)。这里,引导执行环境310与具有静态内容的静态容器镜像相关联。值得注意的是,并且与在通用容器构建工具(例如,Docker)中使用的工作流程对比,配置阶段301配置与引导执行环境310相关联的静态镜像,而不运行用于创建动态内容的命令。引导执行环境310可以包括用于构建或配置执行环境310、320的工具作业(tooling)316。在一些实现方式中,工具作业316是用于创建、配置和管理容器的命令行工具的集合。其他形式的工具作业316是可能的,包括远程和/或基于web的服务。在一些实现方式中,容器构建器300将引导执行环境310配置成包括启动指令318的集合。启动指令318定义用于容器构建器300在执行引导执行环境310时采取的步骤。在下面参考图3A-3E更详细地描述工具作业316和启动指令318的使用。
此后,在执行阶段302期间,容器构建器300被配置成运行/执行引导执行环境310以构建/创建具有动态内容(例如,应用依赖关系322)的增强执行环境320。具体地,容器构建器300通过用动态内容(例如,应用依赖关系322)增强引导执行环境310来为软件应用200构建增强执行环境320。也就是说,在执行阶段302期间,容器构建器300在引导执行环境310中执行软件应用200。容器构建器300和/或软件应用200可以基于软件应用200的依赖关系212的清单来创建动态内容(例如,应用依赖关系322),从而用动态内容322增强引导执行环境310以创建增强执行环境320。结果,容器构建器300允许开发者10构建并且可选地部署包括动态内容322的增强执行环境320,以用于在远程系统140上运行软件应用200,而无需开发者10提供配置(例如,Dockerfile),该配置提供关于如何在镜像中描述静态内容和动态内容以便构建容器的指令。
在一些实现方式中,远程系统140包括在存储器硬件146、520(图5)内存储一个或多个引导执行环境310、310a-n和一个或多个增强执行环境320、320a-n的数据储存器150。在一些示例中,数据储存器150包括容器注册表并且每个执行环境310、320与相应的容器化软件应用200相关联。在这些示例中,可以将引导执行环境310称为与具有静态内容(例如,依赖关系212的清单)的静态镜像相关联的“引导容器”,而可以将增强执行环境320称为与具有在引导执行环境310的执行期间(例如,在执行阶段302)动态地创建的内容322(例如,应用依赖关系)的容器镜像相关联的“增强容器”。每个执行环境310、320可以包括标识与执行环境310、320相关联的软件应用200的标识符314(例如,标签)。增强执行环境320还可以包括指示增强执行环境320的各方面的元数据324,诸如构建增强执行环境320的远程系统140的操作系统版本和/或处理器架构。
在所示示例中,容器构建器300从开发者设备110接收要为由开发者10在本地开发的软件应用200构建执行环境310、320的构建请求180。构建请求180可以简单地包括包含有依赖关系212的清单的软件应用200。构建请求180还可以包括标识软件应用200的标识符314(例如,标签)作为软件应用200的补充或替代,并且容器构建器300可以使用标识符314从数据储存器150中检索与软件应用200相关联的引导执行环境310。这里,引导执行环境310与仅包含关于内容的信息的静态镜像相关联。
如将在下面更详细地描述的,在接收到引导执行环境310之后,容器构建器300可以运行引导执行环境310并且确定增强执行环境320是否可以从数据储存器150获得,例如,被先前创建并存储在数据储存器150中。当增强执行环境320可用时,容器构建器300可以从数据储存器150中检索至少与增强执行环境320相关联的应用依赖关系322(例如,动态内容)并且用在引导执行环境310的先前初始运行期间被动态地创建的应用依赖关系322来增强引导执行环境310。引导执行环境310可以包括用于构建或配置执行环境310、320的工具作业316。在一些示例中,引导执行环境310使用工具作业316来配置增强执行环境320并且将增强执行环境320存储在数据储存器150中。在此场景中,由于引导执行环境310已经运行一次来创建增强执行环境320,所以运行引导执行环境310的任何后续实例将放弃运行启动命令来创建动态内容(例如,应用依赖关系),因为能够简单和更高效地从数据储存器150中检索动态内容。
术语软件应用200(即,软件资源)可以是指使计算设备(例如,数据处理硬件144、500(图5))执行任务的计算机软件。因此,软件应用200可以对应于可以在分布式系统(例如,远程系统140)上安装、运行、部署和/或以其他方式实现的任何类型或形式的软件、文件和/或可执行代码。在一些示例中,可以将软件应用200称为“应用”、“app”或“程序”。示例应用包括但不限于系统诊断应用、系统管理应用、系统维护应用、文字处理应用、电子表格应用、消息传送应用、web浏览器应用、媒体流传输应用、社交网络应用、安全应用和游戏应用。软件应用200可以用包括高级和结构化编程语言,诸如C/C++、Java、Python、Ruby、Perl或JavaScript的一种或多种编程语言进行表达并且可以被称为C/C++应用、Java应用、Python应用、Ruby应用、Perl应用或JavaScript应用。软件应用200也可以用其他形式、框架和/或编程语言进行表达。例如,可以将在Node.js框架中开发的JavaScript应用称为Node.js应用或JavaScript应用。
在一些示例中,软件应用200包括依赖关系212的清单或列表。依赖关系212的清单(可互换地称为“依赖关系清单”)可以枚举由软件应用200在远程系统140上执行期间使用或访问的文件和/或软件库或模块。依赖关系清单212可以包括由软件应用200使用的架构特定的和/或编程语言特定的支持库。例如,依赖关系清单212可以包括用于Python编程语言的NumPy科学计算包。依赖关系212的清单可以由软件开发者10显式地配置以便在远程系统140上配置执行环境310、320。在一些示例中,依赖关系212的清单由软件应用200暗示。例如,软件应用200可以包括需要或导入支持库的语句。软件应用200可以包括语句“需要(‘urlib’)以指示对URL解析支持库的依赖关系。”总起来说,此类语句可以被认为是依赖关系212的清单的一部分。
引导执行环境310可以将软件应用200包括在包含最初执行软件应用200所需的一切,例如代码、运行时、系统工具和库的完整文件系统中,使得软件应用200能够不管工作环境如何都一致地执行。在一些示例中,开发者设备110a-n基于软件应用200来构建引导执行环境310。在这种情况下,远程系统140从开发者设备110a-n接收引导执行环境310并且可以将引导执行环境310存储在数据储存器150中。在这些示例中,从开发者设备110接收到的构建请求180可以包括引导执行环境310。可以为存储在数据储存器150中的执行环境310、320编索引和/或编目和/或指配标识符314以供稍后从数据储存器150中检索。数据储存器150可以使用“标签”或其他注解来表示指配给每个执行环境310、320的标识符314以促进后续查找和检索。标识符314可以标识与执行环境相关联的软件应用200和/或可以具体地标识执行环境310、320。因此,来自开发者设备110a-n的构建请求180可以包括标识软件应用200和/或引导执行环境310的一个或多个标识符314。数据储存器150可以包括安全特征,诸如用于保护免于对执行环境310、320或软件应用200的未授权访问的认证。
图2A-2C是软件应用200、200a-c和相应的依赖关系212、212a-c的清单的示意图。图2A示出了包括枚举包括用于动态地创建应用依赖关系322的运行时命令的依赖关系212a的清单的“.gemspec”文件的示例Ruby软件应用200a。这里,Ruby软件应用200a的应用依赖关系322是在引导执行环境310中执行依赖关系212a的清单时被动态地创建的,并且包括URL处理(curl)和JSON数据交换格式(json)支持库。在一些示例中,“.gemspec”文件包括指示当在引导执行环境310中运行Ruby软件应用200a时将动态地创建的应用依赖关系322的特定版本或合适范围的版本的语句。这里,“.gemspec”文件指示版本0.0.9和版本1.7.3是Ruby软件应用200a的应用依赖关系322。在一些示例中,“.gemspec”文件包括语句“s.add_dependency('json','~>2.1')”以指示大于2.1但小于3.0的json支持库是Ruby软件应用200a的应用依赖关系322。当在引导执行环境310中运行Ruby软件应用200a时,容器构建器300可以通过基于“.gemspec”文件中枚举的依赖关系212的清单创建应用依赖关系322来增强引导执行环境310。用于为Ruby软件应用200a增强引导执行环境310的其他技术是可能的。容器构建器300可以将增强执行环境320存储在数据储存器150中。
参考图2B,示出了示例性Node.js软件应用(例如JavaScript应用200b)。Node.js软件应用200b包括枚举包括用于动态地创建应用依赖关系322的运行时命令的依赖关系212b的清单的包管理器(npm)命令。这里,包管理器命令指示数据库(mysql)包是当在引导执行环境310中运行Node.js软件应用200b时将被动态地创建的应用依赖关系322。在一些示例中,容器构建器300通过执行包管理器命令来增强引导执行环境310以在引导执行环境310中运行Node.js软件应用200b时动态地创建应用依赖关系322。Node.js软件应用200b包括进一步枚举依赖关系212的清单的JavaScript语句。这里,JavaScript语句指示密码学(‘crypto')和数据库(‘mysql’)支持库也是在引导执行环境310中运行Node.js软件应用200b时将被动态地创建的应用依赖关系322。在一些示例中,容器构建器300在包括即时(JIT)编译器的JavaScript引擎中执行Node.js软件应用200b。容器构建器300可以使JIT编译器将Node.js软件应用200b编译为更高效的机器代码,例如成为即时编译的模块,以增强引导执行环境310。在一些实现方式中,容器构建器300可以执行包管理器命令并且执行Node.js软件应用200b以为Node.js软件应用200b动态地创建应用依赖关系322。用于为Node.js软件应用200b增强引导执行环境310的其他技术是可能的。容器构建器300可以将增强执行环境320存储在数据储存器150中。
参考图2B,示出了示例性Python软件应用200c。与Node.js软件应用200b类似,Python软件应用200c包括枚举包括用于动态地创建应用依赖关系322的运行时命令的依赖关系212的清单的包管理器(pip)命令。这里,包管理器命令指示web框架(django)包是在引导执行环境310中运行Python软件应用200c时将被动态地创建的应用依赖关系322。Python软件应用200c包括进一步枚举应用依赖关系212的清单的Python语句。这里,Python语句指示django的特定版本(django==1.11.0,django-braces==0.2.1,django-model-utils==1.1.0,django-oauth2-provider==0.2.4,djangorestframework==2.3.1)支持库也是在引导执行环境310中运行Python软件应用200c时将被动态地创建的应用依赖关系322。在一些实现方式中,容器构建器300执行包管理器命令并且执行Python软件应用200c以为Python软件应用200c动态地创建应用依赖关系322。用于为Python软件应用200c增强引导执行环境310的其他技术是可能的。容器构建器300可以将增强执行环境320存储在数据储存器150中。
图3A-3E示出容器构建器300为软件应用200构建增强执行环境320的示意图。参考图3A,示出了容器构建器300的配置阶段301(图1)。在一些示例中,容器构建器300接收构建请求180。这里,构建请求180简单地包括软件应用200,其包括依赖关系212的清单。在配置阶段301期间,容器构建器300为软件应用200配置并且构建引导执行环境310。引导执行环境310可以将软件应用200包含在静态镜像中,其包括包含最初执行软件应用200所需的一切,例如代码、运行时、系统工具和库的完整文件系统,使得软件应用200能够不管工作环境如何都一致地执行。在一些示例中,容器构建器300配置静态镜像(例如,引导执行环境310)而不创建动态内容,即,没有执行时架构特定的和/或动态的应用依赖关系322。
容器构建器300可以将引导执行环境310配置成包括用于构建或配置执行环境310、320的工具作业316。在一些实现方式中,工具作业316是用于创建、配置和管理容器的命令行工具的集合。工具作业316还可能能够将增强执行环境320存储在数据储存器150中。例如,图3A示出容器构建器300将引导执行环境310存储在数据储存器150中。如在下面相对于执行阶段302更详细地描述的,工具作业316还可能能够与数据储存器150交互,例如,以确定增强执行环境320是否可用。在一些示例中,工具作业316能够进行执行环境自省。也就是说,工具作业316可能能够确定执行环境,例如引导执行环境310中的哪些文件是在增强引导执行环境310以创建增强执行环境320的过程中添加或修改的。在一些实现方式中,容器构建器300将引导执行环境310配置成包括启动指令318的集合。启动指令318定义用于容器构建器300在执行阶段302期间执行引导执行环境310时进行的操作(例如,步骤)。容器构建器300可以在执行启动指令318的步骤时使用包括在引导执行环境310中的工具作业316。容器构建器300可以使用工具作业316将包括引导执行环境310的容器镜像上传到容器注册表(例如数据储存器150)。容器构建器300可以将标识符314(例如,标签)添加到引导执行环境310从而标识与引导执行环境310相关联的软件应用200。标识符314可以促进后续查找和检索。
参考图3B,容器构建器300在执行阶段302期间执行引导执行环境310。容器构建器300可以在配置阶段301(图3A)期间构建/创建/配置引导执行环境310之后从数据储存器150接收(例如,使用标识符314)引导执行环境310。在一些示例中,容器构建器300在配置阶段301期间创建/配置引导执行环境310时,立即在执行阶段302期间执行引导执行环境310。引导执行环境310可以包括软件应用200,其包括依赖关系212的清单。在所示示例中,容器构建器300执行引导执行环境310,从而使容器构建器300执行启动指令318。启动指令318可以包括确定关联的增强执行环境320是否可以从数据储存器150获得。在图3B所示的示例中,数据储存器150最初不包含增强执行环境320。因此,在执行启动指令318时,容器构建器300确定关联的增强执行环境320不可以从数据储存器150获得。例如,容器构建器300可以使用标识符314来查询数据储存器150以确定数据储存器150是否包含关联的增强执行环境320。标识符314可以与软件应用200的版本相关联。在一些示例中,当与引导执行环境310相关联(并且包括在构建请求180中)的软件应用200的版本号与所存储的增强执行环境320相关联的软件应用200的版本不相同时,容器构建器300确定增强执行环境320不可用。
当容器构建器300确定关联的增强执行环境320不可以从数据储存器150获得时,启动指令318包括用于基于依赖关系212的清单来增强引导执行环境310的操作/步骤。容器构建器300可以增强引导执行环境310以构建/创建/配置增强执行环境320。容器构建器300可以通过安装(例如,下载、复制、编译)应用依赖关系322来增强引导执行环境310。在一些示例中,容器构建器300在执行软件应用200之前安装应用依赖关系322。如先前描述的,容器构建器300可以执行命令,诸如包括在依赖关系212的清单中的包管理器命令,以创建(例如安装)应用依赖关系322。在一些示例中,容器构建器300执行软件应用200来创建应用依赖关系322。容器构建器300可以执行/运行软件应用200,从而使软件应用200执行需要或导入支持库、文件或其他应用依赖关系322的语句。因此,容器构建器300用已导入的应用依赖关系322增强引导执行环境310以创建增强执行环境320。容器构建器300可以执行软件应用200,从而使应用源代码或公共中间语言(CIL)(诸如字节代码)被编译成架构特定的机器代码或二进制文件。例如,容器构建器300可以在JIT执行引擎中执行软件应用200。当软件应用200的模块被首次加载或访问时,JIT引擎可以将软件应用200的模块编译成包含高效的机器代码的JIT编译模块。在一些实现方式中,容器构建器300在执行软件应用200之前创建一些应用依赖关系322并且通过执行/运行软件应用200来创建其他应用依赖关系322。容器构建器300可以使用用于动态地创建应用依赖关系322的其他技术。
动态内容(例如,应用依赖关系322)可以是架构特定的。也就是说,应用依赖关系322可以与由容器构建器300执行以创建应用依赖关系322的引导执行环境310相关联的特定处理器架构和/或特定操作系统版本相兼容。例如,应用依赖关系322可以包括包含有高效的架构特定的机器代码或二进制文件的文件或模块,和/或由JIT执行引擎创建的即时编译模块。在一些实现方式中,在容器构建器300增强引导执行环境310以包括动态地创建的应用依赖关系322之后,增强执行环境320不再需要执行与创建应用依赖关系322相关联的启动指令318的步骤。因此,容器构建器300可以从增强执行环境320中省略启动指令318。容器构建器300可以向增强执行环境320添加指示与创建了增强执行环境320的引导执行环境310相关联的操作系统版本和/或与创建了增强执行环境320的引导执行环境310相关联的处理器架构的元数据324。在一些示例中,架构特定的内容(例如应用依赖关系322)包括指示与引导执行环境310相关联的操作系统版本和/或处理器架构的元数据。容器构建可以使用其他技术来创建/配置增强执行环境320。
图3B还示出容器构建器300执行启动指令318的进一步步骤,这些进一步步骤包括将增强执行环境320存储在数据储存器150中。在一些实现方式中,容器构建器300使用工具作业316来存储增强执行环境320。例如,数据储存器150可以包括容器注册表。容器构建器300可以使用工具作业316来创建包括增强执行环境320的容器镜像。增强执行环境320可以包括引导执行环境310的内容(例如,静态内容)和由容器构建器300创建的应用依赖关系322(动态内容)。容器构建器300可以进一步使用工具作业316将包括增强执行环境320的容器镜像上传到容器注册表(例如数据储存器150)。启动指令318还可以包括标记、注解、索引或以其他方式标识增强执行环境320以促进查找和检索。例如,启动指令318可以包括将标识符314添加到增强执行环境320。例如,标识符314可以指示数据储存器150包含与软件应用200的版本相关联的增强执行环境320。容器构建器300可以将元数据324添加到增强执行环境320以指示增强执行环境320的各方面,诸如执行增强执行环境320的远程系统140的操作系统版本和/或处理器架构。例如,容器构建器300可以用元数据324“标记”或注解增强执行环境320。在一个示例中,容器构建器300用指示增强执行环境320是在“x86_64”架构上执行的Ubuntu LINUX系统上创建的元数据324来标记增强执行环境320。也可以使用其他元数据324约定或内容。
参考图3C,容器构建器300可以将引导执行环境310与增强执行环境320之间的差异存储在数据储存器150中。也就是说,容器构建器300可以将仅动态地创建的应用依赖关系322存储在数据储存器150中,例如以节省数据储存器150中的空间。这里,用于增强执行环境的动态地创建的应用依赖关系322可以被存储在数据储存器150中并且包括关联的标识符314(例如,用于应用依赖关系的稍后查找和检索)和/或关联的元数据324(例如,用于指示诸如用于执行与动态地创建的应用依赖关系相关联的增强执行环境320的远程系统140的操作系统版本和/或处理器架构的各方面)。例如,启动指令318可以包括用于通过在执行阶段302期间标识更新的或动态地创建的应用依赖关系322来确定引导执行环境310与增强执行环境320之间的差异的内省。也就是说,容器构建器300可以确定/标识与通过增强引导执行环境310添加或修改的文件相对应的应用依赖关系322。容器构建器300可以使用包括在引导执行环境310中的工具作业316来标识更新文件的集合,即,当容器构建器300通过添加动态内容(例如,应用依赖关系322)来增强引导环境310时添加或修改的文件。在一些实现方式中,容器构建器300使用标准操作系统命令或编程接口来确定通过基于依赖关系212的清单增强引导执行环境310而添加或修改的文件。例如,容器构建器300可以使用UNIX“find”命令来递归地搜索改变的文件。容器构建器300可以使用其他技术来确定引导执行环境310的增强功能。在一些实现方式中,容器构建器300基于最近添加或修改的文件来创建UNIX“tar”文件。容器构建器300可以将“tar”文件作为增强执行环境320存储在数据储存器150中并且标记“tar”文件以指示增强执行环境320包括仅包含应用依赖关系322的差异,而不是完全可执行的增强执行环境320。当引导执行环境310被随后执行时,容器构建器300可以基于从数据储存器150接收到的“tar”文件中的应用依赖关系322来增强引导执行环境310。
与其中容器构建器确定关联的增强执行环境320不可以从数据储存器150获得的图3B所示的示例对比,图3D示出了容器构建器300在执行启动指令318时,确定关联的增强执行环境320可以从数据储存器150获得(例如,数据储存器150包含关联的增强执行环境320)。在一些示例中,容器构建器300先前已创建了增强执行环境320并且将增强执行环境320存储在数据储存器150中。先前创建的增强执行环境320可以包括使增强执行环境320与软件应用200的版本相关联的标识符314。当增强执行环境320包括指示增强执行环境320包括软件应用200的合适版本(例如,版本号)的“标签”(例如,标识符314)时,容器构建器300可以确定增强执行环境320是可用的。在一些示例中,版本号包括主版本号和次版本号。在这些示例中,当与引导执行环境310相关联的软件应用200的主软件版本号和与所存储的增强执行环境320相关联的软件应用200的主版本号相同时,容器构建器300可以确定关联的增强执行环境320可以从数据储存器150获得。
关联的增强执行环境320可以包括指示增强执行环境320的各方面(诸如用于构建增强执行环境320的远程系统140的操作系统版本和/或处理器架构)的元数据324。增强执行环境320可以包括包含元数据324的注解或标签。当增强执行环境320包括指示增强执行环境320的各方面(诸如构建增强执行环境320的远程系统140的操作系统版本和/或处理器架构)是合适的元数据324时,容器构建器300可以确定增强执行环境320是可用的。例如,当元数据324指示与引导执行环境310不兼容(例如,与执行引导执行环境310的远程系统140不兼容)的处理器架构时,容器构建器300可以确定增强执行环境320不可以从数据储存器150获得。在此示例中,容器构建器300将通过如以上参考图3B所描述的那样基于依赖关系212的清单增强引导执行环境310来继续执行启动指令318。可替换地,当与增强执行环境320相关联的元数据324指示与引导执行环境310兼容的操作系统版本和处理器架构时,容器构建器300可以确定增强执行环境320可以从数据储存器150获得。容器构建器300可以使用其他技术来确定增强执行环境320是否可以从数据储存器150获得。容器构建器300可以使用包括在引导执行环境310中的工具作业316来确定关联的增强执行环境320是否是可用的。例如,数据储存器150可以包括容器注册表。在此示例中,工具作业316可能能够在容器注册表(例如,数据储存器150)中搜索合适的增强执行环境320。工具作业可以使用软件版本标识符314和/或元数据324或者使用其他技术来查找增强执行环境320,以确定合适的增强执行环境320可以从数据储存器150获得。
在所示示例中,当容器构建器300确定关联的增强执行环境320可以从数据储存器150获得时,容器构建器300从数据储存器150接收增强执行环境320并且基于增强执行环境320来增强引导执行环境310。容器构建器300可以通过从数据储存器150下载增强执行环境320(包括软件应用200)来接收增强执行环境320,并且通过简单地执行已下载的具有动态内容(例如,应用依赖关系322)的增强执行环境320而不是具有仅静态内容的引导执行环境310来增强引导执行环境310。在另一示例中,不是执行已下载的增强执行环境320,而是容器构建器300基于包括在已下载的增强执行环境320中的应用依赖关系322来增强引导执行环境310。例如,容器构建器300可以使用工具作业316来将应用依赖关系322从数据储存器150中关联的增强执行环境320下载并安装到引导执行环境310中。基于增强执行环境320来增强引导执行环境310可以比基于依赖关系212的清单来增强引导执行环境310更高效。
如以上关于图3C描述的,容器构建器300可以将引导执行环境310与增强执行环境320之间的差异(即,动态地创建的应用依赖关系322)存储在数据储存器150中。参考图3E,当容器构建器300执行启动指令318以确定关联的增强执行环境320是否可以从数据储存器150获得时,容器构建器300可以确定合适的差异可以从数据储存器150获得。这里,差异可以包括容器镜像,该容器镜像包括在例如引导执行环境310中先前执行软件应用200期间被动态地创建、编译、下载或以其他方式编组的应用依赖关系322。如先前描述的,容器构建器300可以使用所接收到的引导执行环境310的标识符314在数据储存器150中查找包含应用依赖关系322的关联差异。例如,当差异包括指示差异是使用与远程系统140相同的操作系统版本和/或与远程系统140相同的处理器架构来创建的“标签”(例如,标识符314)时,容器构建器300可以确定差异可以从数据储存器150获得。在一些示例中,容器构建器300从数据储存器150接收容器镜像(例如,增强执行环境320),其包括包含应用依赖关系322的UNIX“tar”文件。容器构建器300可以基于包含在从数据储存器150接收到的容器镜像中的应用依赖关系322来增强引导执行环境310。容器构建器300可以使用工具作业316从数据储存器150下载容器镜像并且通过安装应用依赖关系322来增强引导执行环境310。例如,容器构建器300可以从“tar”文件中提取应用依赖关系322。容器构建器300可以使用其他技术来基于增强执行环境320增强引导执行环境310。
在一些示例中,在执行阶段302期间增强引导执行环境310之后,容器构建器300执行软件应用200。可替换地,容器构建器300可以在引导执行环境310中执行软件应用200以创建应用依赖关系322(即,以创建增强执行环境320)。在此示例中,软件应用200可以继续在增强执行环境320中执行。换句话说,启动指令318的步骤/操作(例如创建增强执行环境320和执行软件应用200的步骤)的次序可以与所示示例不同。
图4提供用于在应用执行环境中执行软件应用200的方法400的操作的示例布置的流程图。软件应用可以是JavaScript应用、Python应用或Ruby应用之一。在操作402处,方法400包括在数据处理硬件144(例如,容器构建器300)处从数据储存器150接收引导执行环境310。引导执行环境310包括软件应用200并且软件应用200包括依赖关系212的清单。在一些实现方式中,数据储存器150包括存储包括引导执行环境310的容器镜像的容器注册表。
在操作404处,方法400包括由数据处理硬件144执行引导执行环境310以使数据处理硬件144执行操作(例如,通过执行与引导执行环境310相关联的启动指令318)。在操作406处,方法400包括确定增强执行环境320是否可以从数据储存器150获得。例如,确定增强执行环境320是否可以从数据储存器150获得可以包括确定增强执行环境320是否和软件应用200、与引导执行环境320相关联的操作系统版本、或与引导执行环境320相关联的处理器架构中的至少一个兼容。
当增强执行环境320可以从数据储存器150获得时,方法400包括在操作408处从数据储存器150接收增强执行环境320。在从数据储存器150接收到增强执行环境320之后,方法400包括在操作410处基于增强执行环境320来增强引导执行环境310。例如,增强引导执行环境310可以包括基于增强执行环境320来安装应用依赖关系322。应用依赖关系322可以包括支持库、架构特定的二进制模块或即时编译模块中的至少一个。在基于增强执行环境320来增强引导执行环境310之后,方法400包括在操作416处执行软件应用200。
当增强执行环境320不可以从数据储存器150获得时,方法400包括在操作412处基于依赖关系212的清单来增强引导执行环境310以创建增强执行环境320。在基于依赖关系212的清单来增强引导执行环境310以创建增强执行环境320之后,方法400包括在操作414处将增强执行环境320存储在数据储存器150中。在一些实现方式中,方法400还包括由数据处理硬件144注解数据储存器150中的增强执行环境320以指示软件应用200的版本、与增强执行环境320相关联的操作系统版本、或与增强执行环境320相关联的处理器架构中的至少一个。在将增强执行环境320存储在数据储存器150中之后,方法400包括在操作416处执行软件应用200。
图5是可以用于实现本文档中描述的系统和方法(例如,方法400)的示例计算设备500的示意图。计算设备500旨在表示各种形式的数字计算机,诸如膝上型计算机、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机和其他适当的计算机。这里示出的组件、它们的连接和关系以及它们的功能仅意在为示例性的,而不意在限制本文档中描述和/或要求保护的发明的实现方式。
计算设备500包括处理器510(也称为数据处理硬件)、存储器520(也称为存储器硬件)、存储设备530、连接到存储器520和高速扩展端口550的高速接口/控制器540、以及连接到低速总线570和存储设备530的低速接口/控制器560。组件510、520、530、540、550和560中的每一个使用各种总线来互连,并且可以被安装在公共母板上或者酌情以其他方式安装。处理器510能够处理用于在计算设备500内执行的指令,包括存储在存储器520中或存储在存储设备530上以在诸如耦合到高速接口540的显示器580的外部输入/输出设备上显示图形用户接口(GUI)的图形信息的指令。在其他实现方式中,可以酌情使用多个处理器和/或多条总线以及多个存储器和多种类型的存储器。另外,可以连接多个计算设备500,其中每个设备提供必要操作的部分(例如,作为服务器组、刀片服务器组或多处理器系统)。
存储器520在计算设备500内非暂时性地存储信息。存储器520可以是计算机可读介质、易失性存储器单元或非易失性存储器单元。非暂时性存储器520可以是用于在临时或永久基础上存储程序(例如,指令序列)或数据(例如,程序状态信息)以供由计算设备500使用的物理设备。非易失性存储器的示例包括但不限于闪存和只读存储器(ROM)/可编程只读存储器(PROM)/可擦除可编程只读存储器(EPROM)/电可擦除可编程只读存储器(EEPROM)(例如,通常用于固件,诸如引导程序)。易失性存储器的示例包括但不限于随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、相变存储器(PCM)以及磁盘或磁带。
存储设备530能够为计算设备500提供大容量存储。在一些实现方式中,存储设备530是计算机可读介质。在各种不同的实现方式中,存储设备530可以是软盘设备、硬盘设备、光盘设备或磁带设备、闪存或其他类似的固态存储器设备或设备的阵列,包括存储区域网络或其他配置中的设备。在附加实现方式中,计算机程序产品被有形地体现在信息载体中。计算机程序产品包含指令,当被执行时,这些指令执行一种或多种方法,诸如上述方法。信息载体是计算机或机器可读介质,诸如存储器520、存储设备530或处理器510上的存储器。
高速控制器540管理计算设备500的带宽密集操作,而低速控制器560管理较低带宽密集操作。职责的这种分配仅是示例性的。在一些实现方式中,高速控制器540耦合到存储器520、显示器580(例如,通过图形处理器或加速器),并且耦合到可以接受各种扩展卡(未示出)的高速扩展端口550。在一些实现方式中,低速控制器560耦合到存储设备530和低速扩展端口590。可以包括各种通信端口(例如,USB、蓝牙、以太网、无线以太网)的低速扩展端口590可以例如通过网络适配器耦合到诸如键盘、指点设备、扫描仪的一个或多个输入/输出设备,或诸如交换机或路由器的联网设备。
如图所示,可以以许多不同的形式实现计算设备500。例如,它可以作为标准服务器500a被实现或者在此类服务器500a的组中多次实现,作为膝上型计算机500b或者作为机架服务器系统500c的一部分被实现。
本文描述的系统和技术的各种实现方式能够用数字电子和/或光学电路系统、集成电路系统、专门设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合实现。这些各种实现方式能够包括在包括至少一个可编程处理器的可编程系统上可执行和/或可解释的一个或多个计算机程序中的实现方式,所述至少一个可编程处理器可以是专用的或通用的,耦合以从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令并且向存储系统、至少一个输入设备和至少一个输出设备传送数据和指令。
这些计算机程序(也称为程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,并且能够用高级过程和/或面向对象编程语言和/或用汇编/机器语言实现。如本文所使用的,术语“机器可读介质”和“计算机可读介质”是指用于向可编程处理器提供机器指令和/或数据的任何计算机程序产品、非暂时性计算机可读介质、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(PLD)),包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”是指用于向可编程处理器提供机器指令和/或数据的任何信号。
本说明书中描述的过程和逻辑流程能够通过一个或多个可编程处理器执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能而被执行。过程和逻辑流程还能够由专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)执行。作为示例,适合于执行计算机程序的处理器包括通用微处理器和专用微处理器这两者,以及任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必要元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘或光盘),或者在操作上耦合以从用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘或光盘)接收数据或者向其传送数据,或者兼而有之。然而,计算机不需要具有此类设备。适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,作为示例包括半导体存储器设备,例如EPROM、EEPROM和闪存设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器能够由专用逻辑电路系统补充,或者被并入在专用逻辑电路系统中。
为了提供与用户的交互,能够在计算机上实现本公开的一个或多个方面,所述计算机具有用于向用户显示信息的显示器设备,例如,CRT(阴极射线管)、LCD(液晶显示器)监视器或触摸屏,并且可选地具有用户能够通过其来向计算机提供输入的键盘和指点设备,例如,鼠标或轨迹球。其他种类的设备也能够用于提供与用户的交互;例如,提供给用户的反馈能够是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且能够以任何形式接收来自用户的输入,包括声、语音或触觉输入。另外,计算机能够通过向由用户使用的设备发送文档并且从由用户使用的设备接收文档来与用户交互;例如,通过响应于从用户的客户端设备上的web浏览器接收到的请求而向该web浏览器发送web页面。
已经描述了许多实现方式。然而,应理解,可以在不脱离本公开的精神和范围的情况下做出各种修改。因此,其他实现方式在以下权利要求的范围内。

Claims (20)

1.一种方法(400),包括:
在数据处理硬件(144)处从数据储存器(150)接收引导执行环境(310),所述引导执行环境(310)包括软件应用(200),所述软件应用(200)包括依赖关系(212)的清单;以及
由所述数据处理硬件(144)执行所述引导执行环境(310),使所述数据处理硬件(144)进行操作,所述操作包括:
确定增强执行环境(320)是否能够从所述数据储存器(150)获得;
当所述增强执行环境(320)能够从所述数据储存器(150)获得时:
从所述数据储存器(150)接收所述增强执行环境(320);
基于所述增强执行环境(320)来增强所述引导执行环境(310);以及
执行所述软件应用(200);以及
当所述增强执行环境(320)不能够从所述数据储存器(150)获得时:
基于所述依赖关系(212)的清单来增强所述引导执行环境(310)以创建所述增强执行环境(320);
将所述增强执行环境(320)存储在所述数据储存器(150)中;以及
执行所述软件应用(200)。
2.根据权利要求1所述的方法(400),进一步包括:由所述数据处理硬件(144)注解所述数据储存器(150)中的所述增强执行环境(320)以指示下述中的至少一个:所述软件应用(200)的版本、与所述增强执行环境(320)相关联的操作系统版本、或与所述增强执行环境(320)相关联的处理器架构。
3.根据权利要求1-2中的任一项所述的方法(400),其中,确定所述增强执行环境(320)是否能够从所述数据储存器(150)获得包括:确定所述增强执行环境(320)是否和下述中的至少一个兼容:所述软件应用(200)、与所述引导执行环境(310)相关联的操作系统版本、或与所述引导执行环境(310)相关联的处理器架构。
4.根据权利要求1-3中的任一项所述的方法(400),进一步包括:
在所述数据处理硬件(144)处接收对所述软件应用(200)的构建请求(180);
由所述数据处理硬件(144)基于所述软件应用(200)来配置所述引导执行环境(310);以及
由所述数据处理硬件(144)将所述引导执行环境(310)存储在所述数据储存器(150)中。
5.根据权利要求1-4中的任一项所述的方法(400),进一步包括,在基于所述依赖关系(212)的清单来增强所述引导执行环境(310)以创建所述增强执行环境(320)之后,标识更新文件的集合,所述更新文件的集合包括通过基于所述依赖关系(212)的清单来增强所述引导执行环境(310)而添加或修改的文件。
6.根据权利要求5所述的方法(400),其中,将所述增强执行环境(320)存储在所述数据储存器(150)中包括:将所述更新文件的集合存储在所述数据储存器(150)中。
7.根据权利要求1-6中的任一项所述的方法(400),其中,所述引导执行环境(310)包括容器镜像并且所述数据储存器(150)包括容器注册表。
8.根据权利要求1-7中的任一项所述的方法(400),其中,基于所述依赖关系(212)的清单来增强所述引导执行环境(310)包括:安装应用依赖关系(212)。
9.根据权利要求8所述的方法(400),其中,所述应用依赖关系(212)包括下述中的至少一个:支持库、架构特定的二进制模块或即时编译模块。
10.根据权利要求1-9中的任一项所述的方法(400),其中,所述软件应用(200)是JavaScript应用(200)、Python应用(200)或Ruby应用(200)之一。
11.一种系统(100),包括:
数据处理硬件(144);以及
与所述数据处理硬件(144)通信的存储器硬件(146),所述存储器硬件(146)存储指令,所述指令当在所述数据处理硬件(144)上执行时使所述数据处理硬件(144)进行操作,所述操作包括:
从数据储存器(150)接收引导执行环境(310),所述引导执行环境(310)包括软件应用(200),所述软件应用(200)包括依赖关系(212)的清单;以及
执行所述引导执行环境(310),使所述数据处理硬件(144)进行进一步操作,所述进一步操作包括:
确定增强执行环境(320)是否能够从所述数据储存器(150)获得;
当所述增强执行环境(320)能够从所述数据储存器(150)获得时:
从所述数据储存器(150)接收所述增强执行环境(320);
基于所述增强执行环境(320)来增强所述引导执行环境(310);以及
执行所述软件应用(200);以及
当所述增强执行环境(320)不能够从所述数据储存器(150)获得时:
基于所述依赖关系(212)的清单来增强所述引导执行环境(310)以创建所述增强执行环境(320);
将所述增强执行环境(320)存储在所述数据储存器(150)中;以及
执行所述软件应用(200)。
12.根据权利要求11所述的系统(100),其中,所述操作还包括:注解所述数据储存器(150)中的所述增强执行环境(320)以指示下述中的至少一个:所述软件应用(200)的版本、与所述增强执行环境(320)相关联的操作系统(100)版本、或与所述增强执行环境(320)相关联的处理器(510)架构。
13.根据权利要求11-12中的任一项所述的系统(100),其中,确定所述增强执行环境(320)是否能够从所述数据储存器(150)获得包括:确定所述增强执行环境(320)是否和下述中的至少一个兼容:所述软件应用(200)、与所述引导执行环境(310)相关联的操作系统(100)版本、或与所述引导执行环境(310)相关联的处理器(510)架构。
14.根据权利要求11-13中的任一项所述的系统(100),其中,所述操作还包括:
接收对所述软件应用(200)的构建请求(180);
基于所述软件应用(200)来配置所述引导执行环境(310);以及
将所述引导执行环境(310)存储在所述数据储存器(150)中。
15.根据权利要求11-14中的任一项所述的系统(100),其中,所述操作进一步包括,在基于所述依赖关系的(212)清单来增强所述引导执行环境(310)以创建所述增强执行环境(320)之后,标识更新文件的集合,所述更新文件的集合包括通过基于所述依赖关系(212)的清单来增强所述引导执行环境(310)而添加或修改的文件。
16.根据权利要求15所述的系统(100),其中,将所述增强执行环境(320)存储在所述数据储存器(150)中包括:将所述更新文件的集合存储在所述数据储存器(150)中。
17.根据权利要求11-16中的任一项所述的系统(100),其中,所述引导执行环境(310)包括容器镜像并且所述数据储存器(150)包括容器注册表。
18.根据权利要求11-17中的任一项所述的系统(100),其中,基于所述依赖关系(212)的清单来增强所述引导执行环境(310)包括:安装应用依赖关系(212)。
19.根据权利要求18所述的系统(100),其中,所述应用依赖关系(212)包括下述中的至少一个:支持库、架构特定的二进制模块或即时编译模块。
20.根据权利要求11-19中的任一项所述的系统(100),其中,所述软件应用(200)是JavaScript应用(200)、Python应用(200)或Ruby应用(200)之一。
CN202080077159.7A 2019-11-08 2020-11-06 即时容器 Pending CN114651233A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/677,805 US11669334B2 (en) 2019-11-08 2019-11-08 Just-in-time containers
US16/677,805 2019-11-08
PCT/US2020/059555 WO2021092502A1 (en) 2019-11-08 2020-11-06 Just-in-time containers

Publications (1)

Publication Number Publication Date
CN114651233A true CN114651233A (zh) 2022-06-21

Family

ID=73643362

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080077159.7A Pending CN114651233A (zh) 2019-11-08 2020-11-06 即时容器

Country Status (6)

Country Link
US (2) US11669334B2 (zh)
EP (1) EP4055477A1 (zh)
JP (2) JP7311710B2 (zh)
KR (1) KR20220092615A (zh)
CN (1) CN114651233A (zh)
WO (1) WO2021092502A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11212336B2 (en) 2020-04-30 2021-12-28 Software Ag Systems and/or methods for dynamically configuring and evaluating rules with dynamic and/or user inputs at runtime
US20230094506A1 (en) * 2021-09-27 2023-03-30 Salesforce.Com, Inc. Centralized and decoupled build file management
US11934255B2 (en) 2022-01-04 2024-03-19 Bank Of America Corporation System and method for improving memory resource allocations in database blocks for executing tasks
US11928110B2 (en) * 2022-02-25 2024-03-12 Snowflake Inc. Multiple environments and functions in a distributed database
JP2023146844A (ja) * 2022-03-29 2023-10-12 富士通株式会社 生成プログラム、生成方法および情報処理装置
US11586436B1 (en) * 2022-08-02 2023-02-21 Soos Llc Systems and methods for version control in a computing device

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004078751A (ja) * 2002-08-21 2004-03-11 Nippon Telegr & Teleph Corp <Ntt> コンパイル済みプログラムコード再利用方法、装置およびプログラム
US7103874B2 (en) * 2003-10-23 2006-09-05 Microsoft Corporation Model-based management of computer systems and distributed applications
JP2008209982A (ja) * 2007-02-23 2008-09-11 Casio Comput Co Ltd サーバ装置、クライアント装置、リモート接続システム及びプログラム
US8219987B1 (en) * 2007-08-24 2012-07-10 Vmware, Inc. Optimized virtual machine specification for provisioning application specific runtime environment
US9823915B1 (en) * 2015-08-06 2017-11-21 Mesosphere, Inc. Software container format
JP6958726B2 (ja) * 2018-03-23 2021-11-02 日本電気株式会社 アプリケーション実行装置、アプリケーション実行方法、およびプログラム

Also Published As

Publication number Publication date
JP7311710B2 (ja) 2023-07-19
US11669334B2 (en) 2023-06-06
WO2021092502A1 (en) 2021-05-14
JP2022553860A (ja) 2022-12-26
JP2023139043A (ja) 2023-10-03
KR20220092615A (ko) 2022-07-01
US20240078116A1 (en) 2024-03-07
EP4055477A1 (en) 2022-09-14
US20210141645A1 (en) 2021-05-13

Similar Documents

Publication Publication Date Title
JP7311710B2 (ja) 実行時コンテナ
US10642603B2 (en) Scheduling upgrades in distributed computing systems
JP5663006B2 (ja) ランタイム環境を構築するためのシステムおよび方法
US8495598B2 (en) Control flow graph operating system configuration
US6938250B2 (en) Image-based software installation
US8799893B2 (en) Method, system and computer program product for solution replication
US20200026505A1 (en) Scheduling firmware operations in distributed computing systems
US20150220308A1 (en) Model-based development
US8387032B1 (en) Captive runtime deployment
JP2008090840A (ja) ソフトウェア製品の出荷用仮想化ソフトウェアの使用方法
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
US20110231455A1 (en) Detailed Inventory Discovery on Dormant Systems
EP3021216A1 (en) Incremental source code analysis
JP7410268B2 (ja) コンテナ・ベースの仮想化システムに関する方法
JP2009501385A (ja) ノード間通信パイプライン
US20140366010A1 (en) Enabling parallel websphere runtime on different computer
US9853871B2 (en) Dynamic collaboration service platform and method for providing an application service at the same platform
US20210286637A1 (en) Operating system-agnostic container runtime
Dumitrescu et al. Simplifying Grid Application Programming Using Web-enabled Code Transfer Tools
Barrett et al. Staging for z/OS Optimization
Wadkar et al. Getting Started with the Hadoop Framework

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