CN108369622B - 软件容器注册表服务 - Google Patents

软件容器注册表服务 Download PDF

Info

Publication number
CN108369622B
CN108369622B CN201680072795.4A CN201680072795A CN108369622B CN 108369622 B CN108369622 B CN 108369622B CN 201680072795 A CN201680072795 A CN 201680072795A CN 108369622 B CN108369622 B CN 108369622B
Authority
CN
China
Prior art keywords
container
software
image
layers
request
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
Application number
CN201680072795.4A
Other languages
English (en)
Other versions
CN108369622A (zh
Inventor
A·J·苏亚雷斯
S·K·温莎
N·海拉皮坦
D·R·格德梅尔
P·K·普拉卡什
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.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
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
Priority claimed from US14/975,627 external-priority patent/US10002247B2/en
Priority claimed from US14/975,637 external-priority patent/US10032032B2/en
Priority claimed from US14/975,631 external-priority patent/US10261782B2/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN108369622A publication Critical patent/CN108369622A/zh
Application granted granted Critical
Publication of CN108369622B publication Critical patent/CN108369622B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/08Network architectures or network communication protocols for network security for authentication of entities
    • H04L63/0807Network architectures or network communication protocols for network security for authentication of entities using tickets, e.g. Kerberos
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/106Enforcing content protection by specific content processing
    • G06F21/1063Personalisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • 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/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
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

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)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

接收将软件镜像存储在与计算资源服务提供方的顾客相关联的第一数据存储库中的请求,所述请求包括存储所述软件镜像的一组层。作为所述请求的成功认证的结果,至少部分地基于所述请求所包括的安全令牌,确定先前未存储在所述第一数据存储库中的所述软件镜像的层的子集;至少部分地基于从第二数据存储库获得的第一元数据,存储在所述第一数据存储库的所述层的子集,与所述层的子集有关的第二元数据存储在所述第二数据存储库中;并且至少部分地基于所述层的子集来使所述软件镜像在软件容器的实例中启动。

Description

软件容器注册表服务
相关申请的交叉引用
本申请要求于2015年12月18日提交的标题为“SOFTWARE CONTAINER REGISTRYSERVICE”的美国专利申请序列号14/975,631(代理人案卷号0097749-586US0)、以及于2015年12月18日提交的标题为“SOFTWARE CONTAINER REGISTRY CONTAINER IMAGEDEPLOYMENT”的美国专利申请序列号14/975,627(代理人案卷号0097749-636US0)、以及于2015年12月18日提交的标题为“SOFTWARE CONTAINER REGISTRY INSPECTION”的美国专利申请序列号14/975,637(代理人案卷号0097749-637US0)的优先权,每个申请出于所有目的以引用的方式并入本文。
背景
软件容器可允许多个应用程序在相应的用户空间内快速启动和运行,而没有与启动和维护单独的虚拟机相关联的开销。公司和个人已经转向这些软件容器,以便在虚拟机实例上进行自动化应用程序部署,所述虚拟机实例由计算资源服务提供方的分布式计算系统远程托管。然而,容器化软件镜像的版本控制和源文件管理是受限的:不能防范安全漏洞,并且不能有效利用存储资源。
附图简述
将参考附图描述根据本公开的各个实施方案,在附图中:
图1示出根据一个实施方案的容器注册表的实施例;
图2示出根据一个实施方案的软件容器注册表服务环境的实施例;
图3示出根据一个实施方案的容器镜像的垃圾收集的实施例;
图4示出根据一个实施方案的容器镜像的漏洞扫描的实施例;
图5示出根据一个实施方案的容器镜像的安全性扫描的实施例;
图6示出根据一个实施方案的容器镜像的容器注册表代理的实施例;
图7示出根据一个实施方案的容器镜像的容器市场的实施例;
图8示出根据一个实施方案的基于时间的容器镜像的容器市场的实施例;
图9示出根据一个实施方案的容器镜像的基于令牌的认证的实施例;
图10示出根据一个实施方案的预测性容器注册表高速缓存的实施例;
图11示出根据一个实施方案的自动化构件和配置服务的实施例;
图12示出根据一个实施方案的容器注册表的实体关系图的实施例;
图13是示出根据一个实施方案的存储容器镜像的实施例的框图;
图14是示出根据一个实施方案的启动存储在储存库中的容器镜像的实施例的框图;
图15是示出根据一个实施方案的访问储存库的实施例的流程图;
图16是示出根据一个实施方案的从储存库检索镜像的实施例的框图;并且
图17示出可实现各个实施方案的环境。
详述
在一个实施例中,包括容器注册表的系统可接收将容器镜像存储在计算资源服务提供方的顾客的储存库中的第一应用编程接口请求,所述容器注册表包括一个或多个储存库。响应于接收第一请求,系统可确定包括第一请求所指定的容器镜像的一组容器镜像层。系统还可获得或生成包含元数据的清单,所述元数据与对应于所指定的容器镜像的一组容器镜像层有关。单独的容器镜像层可包括容器镜像的一组文件。系统可确定还未存储在顾客的储存库中的所述一组容器镜像层的子集,并且将所述清单和子集存储在储存库中作为所存储的容器镜像。
随后,系统可接收在顾客的容器实例中启动所存储的容器镜像作为运行的软件容器的第二应用编程接口请求。响应于接收第二请求,系统可获得对应于所存储的容器镜像的清单,并且如清单所指示的那样检索所存储的容器镜像的一组文件。作为检索包括容器镜像的层的一组文件的结果,系统可使容器镜像在顾客的容器实例中作为运行的软件容器启动。
在另一实施例中,系统还包括前端服务,所述前端服务提供用于执行容器注册表的操作的多个应用编程接口。在这个实施例中,顾客可通过使用计算设备并使用由前端服务提供的应用编程接口来做出请求,以将指定的容器镜像存储在容器注册表中。响应于顾客做出请求,系统可向容器注册表做出前述的第一编程接口请求,从而使容器镜像存储在容器注册表中。而且在这个实施例中,顾客可通过使用计算设备并使用由前端服务提供的应用编程接口来做出另一请求:在顾客的容器实例中启动指定的容器镜像的请求。响应于顾客做出另一请求,系统可向容器注册表做出前述的第二编程接口请求,从而使指定的容器镜像在容器实例中启动。
上文和下文的描述中描述了各种技术。出于解释的目的,阐述具体的配置和细节,以便提供对实现所述技术的可能方式的透彻理解。然而,还显而易见的是,所描述的技术可在不具有特定细节的情况下以不同配置来实施。此外,可省略或简化众所周知的特征从而不使所描述的技术晦涩。
本公开中所描述和提出的技术通过提供用于容器镜像的版本控制的服务来改善计算领域,尤其是版本控制系统领域,所述容器镜像被配置作为软件容器运行。另外,本公开中所描述和提出的技术通过将容器镜像存储为层来提高计算系统的效率,将容器镜像存储为层允许存储资源的有效使用。此外,本公开中所描述和提出的技术必须根植于计算机技术中,以便通过提供用于扫描安全漏洞和许可合规性问题的工具以及用于软件自动部署的工具来克服软件容器特有的问题。
图1示出可藉以实践一个实施方案的环境100的一个方面。如图1所示,环境100可包括已经构建了容器镜像152的顾客166,所述容器镜像152被配置为在容器实例104中运行。顾客166可通过容器注册表前端服务114来将容器镜像152上传到容器注册表102。容器镜像152可通过容器注册表前端服务114自容器注册表102提供给容器实例104以供启动。在一些实施例中,“容器镜像”可指元数据和一个或多个计算机文件,它们对应于经配置以在软件容器中执行的一个或多个软件应用程序的内容和/或结构。在一些情况下,容器镜像152可包括“层”,所述“层”对应于容器镜像152的构建过程中的步骤。容器镜像152可以是新软件(例如,第一版本)或者可以是对容器镜像152的先前版本的一个或多个组分的更新。顾客166可以是为顾客166托管容器实例的计算资源服务提供方的顾客。顾客166可能出于各种原因希望将容器镜像152存储在储存库中。例如,顾客166可能希望对容器镜像152进行版本控制,并且能够回滚到先前版本或安装容器镜像152的先前版本。又如,顾客166可能是软件供应商并且希望将容器镜像上传到公众可访问的储存库中,以便使容器镜像对其他用户可访问以供下载和/或购买。
容器镜像152可以是对应于软件包的一个或多个软件应用程序。如以下进一步所述,容器镜像152可上传和存储为一组层。即,容器镜像152的每一层可对应于容器镜像152整体构建过程中的一个步骤。容器镜像152的一个或多个基础层可包括用于执行其他软件应用程序的操作系统。如果容器镜像152是对已经存储在容器注册表102中的容器镜像的更新,那么不是容器镜像152的所有层都需要上传到容器注册表;即,可能只有容器镜像152的某些层需要上传,并且,以这种方式,优化容器注册表102的存储,并且可降低上传容器镜像所需的带宽。
容器注册表前端服务114的主要责任可以是为计算资源服务提供方的顾客提供外部应用编程接口,以能够管理存储在其容器注册表(例如,容器注册表102)中的镜像。由容器注册表前端服务114提供的应用编程接口的实施例可包括:
Figure BDA0001693035890000051
Figure BDA0001693035890000061
容器注册表102可包括一个或多个储存库,所述一个或多个储存库被配置来存储对应于容器镜像(诸如容器镜像152)的文件和/或目录,以及文件和/或目录的元数据。单独的储存库188可被分配给计算资源服务提供方的顾客。顾客可按需具有一个或多个储存库188。例如,顾客可具有私人储存库,顾客将正在开发中但尚未准备好发布的容器镜像上传到所述私人储存库;以及公共储存库,用于上传可购买和/或下载以供各种用户或计算资源服务提供方的其他顾客安装的容器镜像。储存库可以是单独的数据库,或者可存储在计算资源服务提供方的数据存储服务的一个或多个数据存储库中。每个储存库可具有各种相关联的任务和策略,所述任务和策略指定访问类型,并且限制对储存库的访问为由顾客授权的实体访问储存库。
在一些实施例中,“容器实例”(也称为“软件容器实例”)可指被配置来启动并运行软件容器的计算机系统实例(虚拟或非虚拟的,诸如运行操作系统的物理计算机系统)。容器实例104可被配置为根据由计算资源服务提供方的顾客提供的任务定义文件来运行软件容器。一个或多个容器实例可包括集群。在一些实施例中,“集群”可指已经注册到(即,关联到)集群的一组一个或多个容器实例。因此,容器实例104可以是注册到特定集群的许多不同容器实例中的一个。
“软件容器”(也简称为“容器”)可以是隔离的用户空间实例。即,软件容器可以是在包括程序、数据和系统库的计算机系统实例下运行的轻量级虚拟化实例。当软件容器运行时,运行的程序(即,进程)与在同一计算机系统实例中运行的其他进程隔离。因此,多个软件容器可各自在容器实例104的操作系统上运行(例如,使用由操作系统分配的内存、CPU和存储装置)并且彼此隔离执行(例如,每个容器可具有操作系统的文件系统的隔离视图)。每个容器可具有其自己的命名空间,并且在容器内运行的应用程序可通过只能访问容器命名空间可用的资源来被隔离。这样,容器可以是在其自己的命名空间内运行一个或多个单一应用程序的有效方式,而没有与启动和维护虚拟机相关联的开销,所述虚拟机用于运行单独的用户空间实例。用于管理软件容器的系统的实施例包括Docker容器引擎和CoreOSRocket容器引擎。软件容器可被启动为仅具有来自分配给容器实例104的资源的指定资源;即,任务定义可指定软件容器仅利用指定量的内存和/或指定量的处理能力。
图2示出可藉以实践一个实施方案的环境200的一个方面。如图2所示,环境200可包括容器注册表202,所述容器注册表202包括容器注册表前端服务214、注册表元数据服务222和存储服务。注册表元数据服务222可以是结构化(即,非关系型、非SQL或NoSQL)数据存储服务,其托管用于存储与容器镜像和/或容器镜像层有关的元数据的可扩缩的、分布式数据库。即,为了支持不断增大的元数据的量,注册表元数据服务222的数据库可分布在一队主机上,使得一部分数据可存储在一个主机上,并且另一部分数据可储存在另一个主机上,使得可存在路由以确定哪个或哪几个主机包含需要被检索的元数据。
尽管关系型数据存储可用于元数据存储,但通过从存储服务290中分离元数据存储并且利用用于注册表元数据服务222的结构化存储呈现的优点包括设计简单、灵活性、水平可扩缩性(即,将更多计算机节点添加到托管数据库的集群的能力,以便在保持性能目标的同时适应不断增大的数据库规模)以及改善的性能。由注册表元数据服务222存储的元数据可包括储存库中的变化和版本跟踪信息的历史记录,以及存储在存储服务290中的容器镜像的清单。清单可包括元数据,诸如对应于清单的容器镜像的标识;以及对于清单中列出的每个层,唯一地对应于相应层的内容可寻址标识符和用于验证所述层的内容完整性的校验和。在一些实施例中,“容器镜像”可以是包括构成软件应用程序的数据对象的集合的虚拟文件系统。清单可以是以任何合适的格式(诸如可扩展标记语言(“XML”)或JavaScript对象简谱(JSON))编写的文件。
存储服务290可以是被配置来存储应用程序储存库和容器镜像层的存储位置。在一些实施例中,“应用程序储存库”可指用于版本化并存储软件应用程序的一组文件和/或目录的元数据的数据结构。在一个实施方案中,注册表元数据服务222是数据库中的结构化数据存储,并且存储服务290只将数据(例如,二进制大对象、文件、不同类型和大小的数据等)存储为数据对象。在本实施方案中,注册表元数据服务222存储与哪个数据对象位于哪个注册表的哪个储存库有关的信息。这样,容器注册表前端服务214可向注册表元数据服务222查询存储服务290中的数据对象的位置,并且作为接收所述位置的结果,可从存储服务290检索对应于所述位置的数据对象。
此外,在实施方案中,注册表元数据服务222可提供对将容器镜像和层存储在多个存储位置中的支持。例如,容器镜像和/或软件层可存储在存储服务290(其可位于不同的地理区域中)的多个服务器上(例如,在顾客的请求下,自动地到内容分发网络的各种服务器等),以便提供将容器镜像和/或软件层分配给计算资源服务提供方的顾客的最优吞吐量。在注册表元数据服务222内的容器镜像和/或软件层的元数据可被更新以反映容器镜像和/或软件层在存储容器镜像和/或软件层的多个服务器上的所有存储位置(例如,统一资源名)。这样,从存储服务290到注册表元数据服务222的元数据的分离提供灵活性来以各种方式查询与容器镜像和软件层有关的数据。在请求检索/下载容器镜像时,容器注册表前端服务214可查询注册表元数据服务222以获得容器镜像的存储位置的列表;确定从列表的哪个存储位置检索容器镜像来为顾客和/或计算资源服务提供方提供最优效率;并且将容器镜像提供给来自所确定的位置的顾客和/或顾客容器实例。
容器镜像可存储为容器镜像层。每次更新容器镜像时,都可创建新的容器镜像层。每个容器镜像层可仅包含自容器镜像的先前版本以来已改变的数据对象。因此,层可包括链接到先前层内的未改变的数据对象的清单,使得容器镜像的特定版本可从其本身不包括容器镜像的所有数据对象的层启动。
本公开的系统可与软件容器服务共存,诸如于2014年11月11日提交的标题为“SYSTEM FOR MANAGING AND SCHEDULING CONTAINERS”的美国专利申请号14/538,663中所描述的软件容器服务,所述申请以引用的方式并入本文。在本公开的图2的环境200中,容器实例204可启动并且可在计算资源服务提供方的分布式计算环境中托管一个或多个软件容器。由计算资源服务提供方提供的服务可以是被配置来提供对计算机系统资源的访问的一个或多个服务中的一个,包括数据处理、数据存储、应用程序、接口、权限、安全策略、加密和/或其他此类服务。通过(例如)给容器实例204提供接口,可将容器服务作为服务提供给计算资源服务提供方的用户。
在一些实施方案中,由计算资源服务提供方提供的服务包括一个或多个接口,所述一个或多个接口使顾客能够通过(例如)适当配置的应用编程接口调用来向各种服务提交请求。此外,每种服务可包括一个或多个服务接口,所述一个或多个服务接口使服务能够彼此访问(例如,使虚拟计算机系统服务的虚拟计算机系统能够将数据存储在按需数据存储服务中或从按需数据存储服务中检索数据,并且/或者访问由块级数据存储服务提供的一个或多个块级数据存储装置)。每个服务接口还可通过加密密钥和/或其他此类安全的和/或受保护的访问方法来提供安全的和/或受保护的彼此访问,从而实现它们之间安全的和/或受保护的访问。作为分布式计算机系统来一致工作的服务的集合可具有在分布式计算机系统的元件之间的单个前端接口和/或多个接口。
在容器实例204内,称为代理206的软件应用程序可能正在运行。代理206可被配置来管理容器并与容器引擎208通信。代理206可接收来自容器调度器或其他通信服务的用于管理软件容器的命令。容器引擎208还可包括容器服务接口,诸如命令行接口,计算资源服务提供方的顾客或其他被授权实体可通过所述接口与容器引擎208通信。容器实例204还可包括实例服务接口212(例如,命令行接口),所述顾客或其他被授权实体可通过所述接口与容器注册表前端服务214通信。在一些实施方案中,容器引擎208和/或实例服务接口212由顾客在本地计算机系统上执行,而不是在容器实例204内。
如所指出的,容器引擎208可被配置来与容器注册表代理262通信。容器注册表代理262可负责与容器注册表前端服务214通信,以将容器镜像存储在存储服务290的储存库中,并且通过计算资源服务提供方的容器服务(诸如在美国专利申请号14/538,663中描述的容器服务,所述申请以引用的方式并入本文)将来自存储服务290的容器镜像提供给顾客的容器实例(诸如容器实例204)。容器服务可以是包括计算机资源的集合的服务,所述计算机资源的集合由计算资源服务提供方提供给顾客并且被配置来为顾客实例化容器。顾客可与容器服务进行交互,以提供、放置和操作软件容器,所述软件容器在由计算资源服务提供方托管和操作的虚拟或非虚拟计算机设备上实例化。软件容器可用于各种目的,诸如支持网站或数据库应用程序、执行商业或电子商务应用程序,或者一般地,充当顾客的计算能力。
容器注册表代理262可通过认证服务216来提供私有访问控制。对容器注册表代理262作出的应用编程接口调用可通过事务日志服务218记录。然而,在一些实施方案中,容器注册表代理262不受限于与容器服务一起使用,但可被配置为与各种集装箱化平台(例如,Docker、Rocket等)兼容。运行由计算资源服务提供方托管的容器实例的每个顾客可被分配容器注册表代理262中用于存储容器镜像的一个或多个储存库。顾客可通过调用容器注册表前端服务214的正确的应用编程接口来创建、删除或修改一个或多个储存库。
容器注册表代理262可至少部分地用作容器引擎208与容器注册表前端服务214的应用编程接口(API)之间的通信的代理。容器注册表前端服务214可以是由计算资源服务提供方的顾客能够访问的一组API和端点。顾客可通过实例服务接口212或通过容器注册表代理262来调用API和端点。容器注册表前端服务214可类似于图1的容器注册表前端服务114。
容器注册表前端服务214可被配置来利用计算资源服务提供方的一个或多个其他服务,诸如认证服务216、事务日志服务218和/或密钥管理服务220。容器注册表前端服务214可进一步被配置来使用注册表元数据服务222。
注册表元数据服务222可被配置来将与数据对象有关的信息存储在元数据存储库124中。注册表元数据服务可包括与容器注册表的数据存储库分开的一个或多个数据存储库。注册表元数据服务222的主要责任可以是提供对软件容器的层和标签信息的快速访问。注册表元数据服务222可将容器镜像清单、标签信息和容器镜像的版本历史存储在存储服务290中。通过将这些元数据单独地存储在注册表元数据服务222中,注册表元数据服务222可提供用于寻找或利用这些信息的操作的快速接口。通过将元数据单独地存储在注册表元数据服务222中所呈现的另一优点是,在不锁定存储服务290中的数据的情况下,可在注册表元数据服务222中对与存储在存储服务290中的数据有关的元数据进行操作(例如,修改、标记为删除、标记为不可访问等)。
自动扩缩组232可以是根据预定义的条件(例如,处理单元负载下降到高于或低于指定的阈值等)来使其数量增加或减少的一组计算节点。例如,扩缩服务管理器可通过将计算节点从组中移除来在低需求期间减少自动扩缩组中的计算节点的数量,并且可通过实例化计算节点或将计算节点添加到自动扩缩组来在需求高峰期间增加自动扩缩组中的计算节点的数量。在一些实施方案中,顾客可提供(诸如通过web接口或应用编程接口)使计算节点添加到顾客的相应储存库的自动扩缩组中或从顾客的相应储存库的自动扩缩组中移除计算节点的条件。这样,根据顾客所指定的条件可增大或减小容器储存库的计算能力。
图3示出本公开的一个实施方案的垃圾收集的实施例300。具体地,图3示出容器镜像352,所述容器镜像352包括已经在三个时间段内三次(镜像346A-46B)上传到注册表302(诸如图2的容器注册表202)的一系列的六个层(标记为下标1、2、3、4、5和6)。一系列层可从底层操作系统(例如,Ubuntu、Fedora等)的基础镜像/层开始。例如,容器镜像352的层1-3可包括底层操作系统的层。同样,层4-6可包括一个或多个软件应用程序(例如,WordPress、Apache HTTP服务器等)的层以安装到底层操作系统。每个层可具有相关联的内容可寻址标识符,所述内容可寻址标识符可通过计算层的校验和(例如,MD5、SHA1、SHA256、SHA512等)来生成。在第一时间(时间t1),容器镜像352作为初始版本346A(镜像v1)存储在注册表302中。因为层1-6中的任何一个先前都没有存储在注册表302中,所以所有的层都作为带有清单350A的初始版本346A(下标1表示层版本)存储在注册表302中,所述清单350A描述容器镜像352中的层及其位置。
在一些实施例中,“清单”可指与容器镜像有关的元数据以及与构成容器镜像的一组层有关的元数据。清单可存储为独立的文件,或者存储在与容器镜像分开的域中的数据库中。这样,清单指定哪些层与容器镜像相关联,并且因此,当上传新的容器镜像时,可从清单确定镜像的哪些层可能已经或可能没有存储在注册表302中。清单可以是以任何合适的格式(诸如使用JSON)编写的文件。
在第二时间(时间t2),容器镜像352的新版本被上传到注册表302。确定自容器镜像352保存为初始版本346A起,仅层1和层2已经改变。因此,带有更新的层12和层22以及清单350B的第二版本346B(镜像v2)被保存,所述清单350B指示在第二时间容器镜像352的版本的层的位置(例如,在第二版本346B找到层12和层22,并且在初始版本346A找到层31-61)。在实施例300中可以看出,然而,在时间t2之后,不再被最新版本/清单(镜像v2)引用的层正在占据存储空间。即,与初始版本346A一起存储的层11-21在注册表302中是孤立的(即,未链接到清单中带标签的容器镜像)。
同样,可以看出,在第三时间(时间t3),容器镜像352的另一新版本被上传到注册表302,并且确定自先前版本(第二版本346B)被保存起,仅层6已经改变。因此,带有更新的层63以及清单350C的第三版本346C(镜像v3)被保存,所述清单350C指示在第三时间容器镜像352的版本的层的位置(例如,在第二版本346B找到层12和层22,在初始版本346A找到层31-51,并且在第三版本346C找到层63)。同样,在实施例300中可以看出,然而,在时间t3之后,不再被最新版本/清单(镜像v3)引用的层正在占据存储空间。即,与初始版本346A一起存储的层51和层61在注册表302中是孤立的(即,未链接到清单中带标签的容器镜像)。
本公开的系统设想到垃圾收集功能,以从注册表302清除未被引用的层和版本。未被引用的层可包括已经标志/标记为包含安全漏洞(例如,以图4和图5中所描述的方式)的层。在一些实施方案中,与垃圾收集有关的一个或多个应用编程接口被提供给顾客,并且垃圾收集可在特定储存库上、在与所述特定储存库相关联的顾客的命令下、响应于对应用编程接口中的一个(例如,CleanRegistry())的调用来执行。另外,垃圾收集可作为安全预防措施来执行;例如,在顾客无意中上传容器镜像的不安全版本(例如,嵌入文件的凭据等)的情况下,顾客可上传容器镜像的校正版本,然后调用垃圾收集应用编程接口来从储存库中删除/除去容器镜像的先前版本(即,不安全版本)。另选地,用户可调用垃圾收集应用编程接口来删除/除去最近上传的容器镜像(即,不安全容器镜像),然后返回使用容器镜像先前的版本,而不是上传容器镜像的校正版本;有效地执行回滚。
在其他实施方案中,根据预定义的时间表或在预定事件发生时自动地执行垃圾收集。例如,垃圾收集可在每个星期六的午夜执行。又如,垃圾收集可在每1000千兆字节的数据上传到储存库时执行。再如,垃圾收集可在每次容器镜像存储到储存库中时执行。
标签可由顾客施用于一个或多个容器镜像。在一些实施例中,“标签”可指出于将容器镜像分组目的与一个或多个容器镜像相关联的标签。例如,可创建带有标签“最新版本”的标签。在这个实施例中,在初始时间(时间t1),包括初始版本346A的一组容器镜像可被标记为“最新版本”。在下一时间(时间t2),包括第二版本346B的另一组容器镜像可被更新(例如,根据来自上传另一组容器镜像的顾客的求)为“最新版本”。在这种情况下,标签“最新版本”现在将不再指向初始版本346A,致使初始版本346A未加标签。同样,在第三时间(时间t2),包括第三版本的346C的第三组容器镜像可被更新为“最新版本”,在这种情况下,第二版本的346B将未加标签,以此类推。标签可重叠,例如,标记为“工程配置”的容器镜像可包括在标记为“营销配置”的容器镜像中也使用的层。在已经发出指令来垃圾收集/删除标签为“工程配置”的容器镜像的情况下,本公开的系统可检索“工程配置”容器镜像的列表,并且基于与这些容器镜像有关的元数据,确定“工程配置容器”镜像的哪些层也可用不同的活动标签(例如,“营销配置”)来标记。只有它们没有被另一活动标签标记时,标记为“工程配置”的容器镜像的层可被删除;例如,标记为“营销配置”的容器镜像的层可不被删除。
与容器镜像有关的元数据可存储在注册表元数据服务中,诸如图2的注册表元数据服务222。以这种方式,可针对元数据而不是容器注册表本身来查询注册表元数据服务,以便快速有效地确定在垃圾收集期间哪些层/镜像可被清理,而不负担带有元数据查询的容器注册表。返回到图3,垃圾收集的过程可从读取容器镜像352的最新清单(例如,标记为“最新版本”的那个)开始,以确定容器镜像352的当前版本的层的位置。然后,所述过程可向后退通过容器图像352的先前清单和版本来定位未被最新的清单引用的层。根据特定的具体实施,这些已定位的层可被立即删除或被标志/标记为在稍后日期(例如,根据预定的时间表或计划)删除(例如,元数据存储库中对应的元数据可被更新以包括/附加代码、标签或符号来表示所述层将要被删除)。在稍后日期,删除服务或进程可检查储存库,识别标记为删除的层,并删除所识别的层。如果镜像的所有层都是未链接的,那么整个镜像可标记为不可引用的,并且,对顾客来说,可能看起来好像已经全部被删除(例如,镜像可能是对用户不可访问的和不可列清单的/不可查看的)。
作为在时间t2之后运行垃圾收集的结果,层11-21可被删除或标记为不可引用348。同样,作为在时间t3之后运行垃圾收集的结果,层51和层61可标记为不可引用348。可根据预定的时间表或计划删除标记为不可引用的对象(例如,上文所描述的孤立的层以及以图4和图5中所描述的方式标记为不可引用的层),并且可避免顾客启动具有不可引用的对象的容器镜像(例如,可拒绝启动包括不可引用的对象的容器镜像的请求)。此外,顾客可能无法查看、列出或定位不可引用的对象,并且对顾客来说,可能看起来好像对象已经被删除,但事实上,可能只是由本公开的系统从顾客隐藏。因此,本公开的系统可防止启动具有标记为不可引用的层的容器镜像,并且在一些具体实施中,可将此类容器镜像本身标记为不可引用的。重新参见图2,图3的垃圾收集的操作可查询注册表元数据服务222以查找在其上执行垃圾收集操作的储存库,执行垃圾收集,并且与容器注册表202通信以实际地除去孤立的层。
图4示出本公开的一个实施方案的实施例400。具体地,图4示出容器注册表(诸如图2的容器注册表202)的一个或多个储存库的安全扫描。在一些实施方案中,本公开的系统被配置为基于安全漏洞、许可或其他合规性性问题来执行安全扫描。例如,因为储存库中的容器镜像由层构成,所以如果已知层具有安全漏洞,那么本公开的安全扫描可扫描储存库中的容器镜像以寻找所述特定层。如果安全扫描找到容器镜像内特定层的特定版本,那么所述安全扫描可将所述特定版本标记以用于一些另外的安全操作。安全操作可包括向在其储存库中找到了不安全层的顾客发送警报/通知,以避免启动在其中找到了不安全层的容器镜像、删除在其中找到了不安全层的容器镜像、自动更新容器镜像以包括没有安全漏洞的软件应用程序的版本(例如,先前版本、最新版本等)等等。如所指出的,每个层可与内容可寻址标识符(例如,校验和)相关联,在这种情况下,可通过仅寻找与安全漏洞相关联的内容可寻址标识符的出现来有效地进行安全扫描,从而节省对扫描每个容器镜像的单个文件的需要。
例如,重新参见图3,如果已知(例如,由计算资源服务提供方的系统管理员、由顾客、由容器镜像的供应商等)底层Ubuntu操作系统的容器镜像的特定层具有安全漏洞,那么安全扫描可扫描注册表302以查找与所述特定层相关联的内容可寻址标识符的出现。例如,安全扫描可从清单350B发现在清单350B中列出的层22的内容可寻址标识符与提供给与不安全层相关联的安全扫描的内容可寻址标识符相匹配。因此,安全扫描可将层22标记为不可引用,从而避免使用层22
在图4中,安全扫描454正在搜索储存库452A-52B以查找具有已知安全漏洞的层。在实施例400中,已知安全漏洞与实施例400中作为参考标识符456示出的内容可寻址标识符相关联。例如,可以是操作系统的特定版本的公共可用层具有已知的安全外壳(SSH)漏洞,并且所述公共可用层具有内容可寻址标识符“df9cb78ee4b0”,安全扫描454可搜索储存库中的清单以查找与“df9cb78ee4b0”匹配的内容可寻址标识符。是否存在安全漏洞可由软件供应商(例如,提供先前实施例的特定公共可用层的供应商)确定、由托管容器注册表/储存库的计算资源服务提供方确定、或者由与被扫描的特定储存库相关联的计算资源服务提供方的顾客确定。
在后一种情况下,在一些具体实施中,容器注册表前端服务(诸如图2的容器注册表前端服务214)提供顾客可调用的应用编程接口,并且顾客可通过所述应用编程接口指定顾客希望由安全扫描454从他/她的储存库扫描的层的内容可寻址标识符。在这种后一种情况下,执行扫描的理由可由顾客决定,并且可不一定是出于安全漏洞的目的;例如,顾客可简单地决定某些应用程序应该被更新或者不再需要被包括在容器镜像中。如本公开中所指出的,在一些实施方案中,使用注册表元数据服务(诸如图2的注册表元数据服务222)来搜索清单/元数据。在一些实施方案中,顾客可主动地指定(诸如通过由容器注册表前端服务提供的应用编程接口服务)一个或多个内容可寻址标识符;即,顾客可指定安全扫描454是否曾找到一个或多个内容可寻址标识符与储存库中的层之间的匹配以执行某个操作(例如,标记层、通知顾客、回滚到先前版本等)。除此之外或另选地,在一些实施方案中,顾客可指定(例如,通过应用编程接口、通过用户界面等)是否在顾客的一个或多个储存库上执行漏洞扫描;忽略哪些级别的漏洞(例如,根据它们呈现的安全风险的数量来给漏洞指定级别);以及针对不同级别的漏洞执行哪些操作(例如,删除与高级别相关联的软件镜像,并且终止对应于所删除的软件镜像的可能正在运行的任何应用程序;将与中等级别相关联的软件图像回滚到先前版本;作为检测到低级别漏洞的结果,将通知消息发送到顾客的帐户等)。
在第一场景中,安全扫描454搜索第一储存库452A的清单以查找参考标识符456与存储在第一储存库452A中的层的内容可寻址标识符458之间的匹配。如从实施例400可以看出,在第一场景中找不到与参考标识符456的匹配,并且来自扫描的输出460是未找到安全漏洞。在第二场景中,安全扫描454搜索第二储存库452B以查找第二储存库452B中的层的内容可寻址标识符458中的一个与参考标识符456之间的匹配。如从这个场景中可以看出,安全扫描454找到了参考标识符456与第二储存库452B中的层的内容可寻址标识符458中的一个的匹配。因此,来自第二场景的输出460是找到了对应于参考标识符456的安全漏洞。基于这个输出,可采取各种安全措施,诸如删除带有安全漏洞的层;将所述层自动更新为不具有安全漏洞的版本;并且/或者通知与第二储存库452B相关联的顾客储存库包含安全漏洞。因为安全扫描454仅搜索内容可寻址的标识符,所以是最小侵入性的(即,不实际查看层的内容),并且可在存储库中加密实际的容器镜像本身而不影响安全扫描454。重新参见图2,所述操作可查询注册表元数据服务222以查找要在其上执行安全扫描操作的储存库,并且将内容可寻址标识符458与参考标识符456进行比较。
图5示出本公开的一个实施方案的实施例500。具体地,图5示出扫描机制550,所述扫描机制550用于扫描存储在储存库中的容器镜像以查找由用户限定的数据(例如恶意软件、敏感数据、商业机密数据等)。虽然这种扫描与图4中所示的安全扫描具有相似性,但是扫描机制554可执行比搜索匹配的内容可寻址标识符更深的扫描。即,扫描机制554可打开指定的储存库中的每个容器镜像(其可以tarball或其他归档文件格式存储),并且针对指定的(例如,通过容器注册表前端服务的应用编程接口指定)标准扫描整个镜像文件,所述指定的标准在实施例500中描述为参考标准556。所述标准可以是数字指纹,诸如位串,其出于所有实际目的唯一地标识正在寻找的计算机文件或特征(例如,恶意软件、病毒、商业机密或其他漏洞),使得扫描机制554可搜索层中的一个或多个计算机文件以查找数字指纹的出现。注意,在一些具体实施中,所述标准可以是一组条件(例如,文件是可执行的、具有以“x”开头的文件名、具有小于500千字节的文件大小、并且在2009年10月24日与2009年11月1日之间作最后修改)。
在一个实施例中,与储存库相关联的顾客可请求扫描储存库以查找指定的凭据(例如,诸如如果应用程序是用硬编码的访问证书编译的)。在这个实施例中,顾客可指定凭据作为参考条件556。扫描机制554还可搜索清单以查找参考条件556的存在。在另一实施例中,顾客可指定已知的恶意软件的一个或多个特征作为参考条件556,并由此指导扫描机制扫描储存库以查找此类恶意软件的存在。在又一实施例中,顾客可指定与商业秘密或敏感数据相关联的一个或多个字符串或文件名作为参考条件556,并且扫描机制554可搜索在打开/解包的层内的文件以查找与一个或多个指定的字符串或文件名的匹配。
在示例性具体实施中,储存库包括一个或多个数据存储库,并且每个所存储的容器镜像存储在数据存储库中的一个内。在扫描每个容器镜像以查找指定的参考条件的存在之后,可更新表格以包括时间戳,所述时间戳指示在哪个时间针对指定的参考条件扫描容器镜像。这样,可在顾客的命令下检索时间戳,以作为何时针对指定的条件扫描容器镜像的证据。
在一些实施方案中,顾客可指定(诸如通过应用编程接口)某些参考条件,应针对所述参考条件扫描当前和/或将来的容器镜像。这样,当上传新的容器镜像到储存库时,它们可被取消归档并且针对顾客先前指定的参考标准中的任何一个被扫描。此外,在一些具体实施中,可作为将容器镜像启动到软件实例中的过程的一部分来扫描容器镜像;例如,可打开/解包和扫描容器镜像,然后将容器镜像启动到软件容器中。
然而,如果顾客已经指导在储存库中加密容器镜像并且扫描机制554不能访问密钥以解密容器镜像,那么扫描机制554可能不能以这种方式来针对参考条件556扫描容器镜像。因此,除此之外或另选地,在这些实施方案中的一些中,无论何时存储在储存库中的顾客的容器镜像中的任一个在顾客的权限下被打开/解密(例如,诸如在诸如图2的容器实例204的容器实例中启动),扫描机制554可被配置为针对先前指定的参考条件中的任一项来扫描打开的容器镜像。在这些后面的实施方案中,扫描机制554能够在不访问解密密钥的情况下扫描加密的容器镜像。
然而,在一些具体实施中,容器镜像的解密密钥与扫描机制554共享。在这些实施方案中,扫描机制554被配置为使用共享的解密密钥来解密容器镜像以便针对参考条件556扫描。参考条件556可包括诸如已知的二进制的名称、用于扫描校验和缺失的文件的指令、已知文件名的扫描、针对指定的字符串扫描文本文件等条件。参考条件556可包括用于某些文件类型的扫描的限制或例外;例如,参考条件556可包括指定某些镜像文件类型免于被扫描的指令。
因此,图5示出第一场景,其中扫描机制554打开第一容器镜像552A,并且扫描整个文件结构558以搜索参考条件556。如从实施例500可以看出,在第一场景中未找到与参考条件556的匹配,并且来自扫描的输出560是未找到匹配。在第二场景中,扫描机制554打开第二容器镜像552B,并且扫描整个文件结构558以搜索参考条件556。然而,在第二场景中可以看出,在第二容器镜像552B中找到了与参考条件556的匹配。因此,来自第二场景的输出560是找到了与参考条件556的匹配。找到匹配的输出560可导致一个或多个操作,包括通知顾客找到了匹配,所述顾客与其中存储了第二容器镜像的储存库相关联;将第二容器镜像552或其层标记为不可引用;或者删除所述第二容器镜像552B。
需注意,在各种实施方案中,匹配不一定需要相等。例如,如果两个值不相等,但在数学上等同,那么两个值可匹配。又如,如果两个值对应于公共对象(例如,值)或者以某种预定方式互补并且/或者它们满足一个或多个匹配条件,那么两个值可匹配。一般来讲,可使用确定是否存在匹配的任何方式。
图5还示出第三场景。在第三场景中,容器镜像552C以加密形式存储在储存库中。然而,如果容器镜像552C被解密(诸如通过由顾客授权的实体来提取和启动容器镜像,或者通过向扫描机制554提供用于解密容器镜像的解密密钥594,如上文所描述的),那么扫描机制554将能够扫描未加密的文件结构,如第三场景所示。例如,如果顾客向计算资源服务提供方提供足够的访问以解密容器镜像552C,诸如通过与计算资源服务提供方共享解密密钥594,那么扫描机制554可能能够解密容器镜像552C和/或容器镜像552C的层以扫描内容。在一些实施例中,解密密钥594可与计算资源服务提供方共享,使得计算资源服务提供方将解密密钥594保密并且在任何时候使用解密密钥594来执行扫描。在其他实施例中,解密密钥594可在顾客请求计算资源服务提供方对容器镜像552C执行扫描的任何时候从顾客共享。在又一些实施例中,顾客与计算资源服务提供方共享解密密钥594,以便将容器镜像552C启动到软件容器中,并且在启动的同时,计算资源服务提供方可以所描述的方式解密容器镜像552C并对容器镜像552C执行扫描。重新参见图2,所述操作可查询注册表元数据服务222以查找要在其上执行扫描操作的储存库。
在一些实施方案中,本公开的系统提供端到端的容器加密。即,容器注册表前端服务(诸如图2的容器注册表前端服务214)可向顾客提供应用编程接口,所述应用编程接口允许顾客使用服务器端加密来将容器镜像上传到顾客的储存库以加密形式存储。当顾客请求在容器实例中启动容器镜像(诸如通过另一应用编程接口)时,本公开的系统的服务器可控制容器实例中的容器镜像的解密和启动,使得一旦上传,容器镜像就永远不以未加密的形式离开计算资源服务提供方的环境,从而避免未授权的访问和/或容器镜像的重复。这样,软件供应商可在全球储存库中提供他们的软件,并允许其他用户/顾客在计算资源服务提供方的环境中运行(例如,收取费用)其软件,而没有未经授权复制其软件的风险。在一些实施方案中,密钥管理服务(诸如图2的密钥管理服务220)可向顾客发布密钥(诸如公钥-私钥对的公钥),使得顾客能够使用可访问用于解密的密钥(诸如公钥-私钥对的私钥)的本公开的系统来执行容器镜像的客户端加密,以便执行针对漏洞的扫描,诸如以针对图5的第三场景所描述的方式。例如,顾客可加密容器镜像并且通过容器注册表前端服务上传容器镜像,因此本公开的系统可解密存储器中的容器镜像并且针对参考条件扫描已解密的容器镜像。
图6示出本公开的另一个实施方案的实施例600。具体地,图6示出本公开的系统所使用的从一个容器引擎转换成另一容器引擎的容器注册表代理662的功能性。在第一实施例中,容器实例618托管使用特定容器引擎(例如,Docker容器引擎、Rocket容器引擎等)的运行的容器。因为不同的容器引擎可具有其自己的应用编程接口和自己的协议,所以在第一实施例中,容器注册表代理662用作代理来转化来自在容器实例618中运行的特定容器引擎的应用编程接口请求,并且将所述请求转化/转换成容器注册表前端服务614可接受的预定格式。如图6所示,在容器实例618中运行的容器做出请求,所述请求可以是第一类型的请求664A(即,对应于第一容器引擎类型)或第二类型的请求664B(即,对应于第二个容器引擎类型)。容器注册表代理662截取所述请求,并且不管所述请求是作为第一类型664A还是第二类型664B被接收,容器注册表代理都可将所述请求转化为第一类型664A、第二类型664B、或甚至(如图所示)第三类型的请求664C(即,容器注册表前端服务614被配置为支持无论哪种类型的请求格式)。例如,此外,第三类型的请求664C可包括来自容器服务的数字签名(其可使用会话密钥以类似于标题为“TECHNIQUES FOR CLIENT CONSTRUCTED SESSIONS”的美国专利申请号13/248,953中所描述的方式来签名,所述申请以引用的方式并入本文),所述数字签名向运行容器的环境(例如,计算资源服务提供方的分布式计算系统)的其他组件的服务端点(诸如图2的容器注册表前端服务214)提供容器被授权以满足特定请求的授权证明。
例如,用于列出第一容器引擎类型的容器镜像的所有标签的命令可具有指定的格式(例如,“/[版本号]/[储存库名]/标签”)。然而,容器注册表前端服务可被配置为接受不同的参数、参数的不同顺序和/或附加参数。然后,容器注册表代理662可截取命令,分离/提取由所述命令提供的参数,并且以适当的顺序和用适当的参数将命令重新格式化/转换成与容器注册表前端服务兼容的格式。
在第二实施例中,顾客666已经将第一容器引擎类型652A的容器镜像上传到容器注册表602中的顾客的储存库。容器镜像可通过容器注册表代理662上传,所述容器注册表代理662可类似于图2的兼容性注册表代理262。从那里,第一容器引擎类型652A的容器镜像可被转发到容器注册表602中的容器转化器692。在一些实施例中,术语“顾客”可指利用由计算资源服务提供方提供的服务的顾客实体(诸如个人、公司或其他组织)的系统。此类系统的实施例可以是单独的计算设备、大型机、顾客可访问的虚拟机实例或能够与所提供的服务中的一个或多个通信的其他系统。
在一个实施方案中,容器转化器692被配置来接收第一容器引擎类型652A的容器镜像,并且将所述容器镜像重建为第二容器引擎类型652B的容器镜像,并且将第二容器引擎类型652B的容器镜像存储在顾客666的储存库690中。这样,容器注册表602向顾客666提供使用容器引擎类型(A或B)或两者来运行容器镜像的选项。由第二实施例的容器注册表代理662提供的另一优点可以是:如果容器服务仅被配置来接收来自指定的、兼容的容器引擎类型的请求,那么容器注册表代理662可谨慎地(即,对顾客666不显而易见)将由顾客666使用不兼容的容器引擎类型构建的容器镜像转化为具有指定的、兼容的容器引擎类型的容器镜像。另选地,容器注册表代理662可响应于在容器实例中将容器镜像启动为第二容器引擎类型652B的请求,动态地将第一容器引擎类型652A的容器镜像重建为第二容器引擎类型652B的容器镜像,而不是将第二容器引擎类型652B的容器镜像存储在容器注册表602中。最后,在第二实施例中,在接收到启动容器镜像的请求时,可从储存库690检索第二容器引擎类型652B的容器镜像,因此所述第二容器引擎类型652B的容器镜像将通过容器注册表代理662,然后所述容器注册表代理662将确保当在实例中启动容器镜像时使用正确的容器引擎。
重新参见图2,图6的容器注册表代理662的功能性可驻留在自动扩缩组232内或者与容器注册表202本身的功能性集成。容器注册表代理662可基于来自容器引擎208的输入来执行其转换,所述输入包括请求信息和授权令牌,所述授权令牌可类似于图9的安全令牌974。容器注册表代理662可访问密钥管理服务(诸如密钥管理服务220),以解密授权令牌并从所述授权令牌获得信息,诸如与顾客和/或顾客账户有关的凭据和/或附加信息。基于从授权令牌产生的信息,容器注册表代理662可将应用编程接口调用放置到顾客权限下的容器注册表前端服务214。
图7示出本公开的一个实施方案的实施例700。具体地,图7示出使用本公开的容器注册表702,所述容器注册表702类似于图2的容器注册表202,所述容器注册表702与容器市场768一起使用。如实施例700中所描绘的,软件供应商766可开发和构建软件应用程序,并且将软件应用程序作为容器镜像752上传到容器注册表702中的全局储存库。如与私有储存库相反,全局储存库可允许其他用户访问以从所述全局储存库下载容器镜像,诸如收取费用。全局储存库中的此类容器镜像可用于通过容器市场768进行购买(即,交易),所述容器市场768可以是以网站或其他用户界面形式的在线市场,消费者可从其中选择和/或购买一个或多个容器镜像的许可。实施例700还示出顾客770,所述顾客770已经通过容器市场768选择了存储在容器注册表702中的容器镜像752,并且指示下载容器镜像752的一个或多个副本并在属于顾客770的一个或多个容器实例718中启动。
由实施例700所呈现的一个优点是:如以上所指出的,因为本公开的容器镜像可存储为层,所以容器镜像752可小于完整的容器镜像,因为容器镜像的其他组分/相依性可已经驻留在容器注册表702中,并且因此容器镜像752可仅包括含有与已经存在于容器注册表702中的层的不同的层。此外,因为容器镜像752可存储为层,所以单独的层可在容器市场768中分开定价,从而提供价格灵活性。例如,如果容器镜像752包括第一软件供应商所开发的操作系统层以及与第二软件供应商所开发的单独的软件应用程序相关联的一个或多个层,那么第一软件供应商可为操作系统层设置价格,并且第二软件供应商可为一个或多个软件应用程序层设置价格。这样,第一软件供应商可在不涉及第二软件供应商的情况下改变操作系统层的价格。此外,如果第二软件供应商更新软件应用程序层中的一个,那么试图更新到新软件应用程序的顾客770可仅需要为更新的软件层付费,并且不需要重新购买操作系统层或其他应用程序层。
另外,因为一个或多个容器实例718可在容器服务的控制下执行并且被一个或多个代理(诸如图2的代理206)监控,所以与容器镜像的软件容器的使用(例如,处理器使用、内存使用、所使用的存储器)有关的量度可在使用的基础上被追踪并向消费者收费,而不是在每个容器镜像的基础上或除在每个容器镜像的基础上之外。例如,容器镜像752可下载并安装到顾客770的一个或多个容器实例718,而不被软件供应商766收费。然而,在这个实施例中,顾客770可由容器镜像的使用(例如,根据诸如每日平均处理器使用、每小时峰值内存使用、运行的实例/副本的数量、以上项的任何组合等量度)收费。这样,仅间歇地使用容器镜像752的软件应用程序的顾客不需要与每天24小时/每周7天使用所述软件应用程序的顾客为容器镜像752支付一样多。
图8示出本公开的一个实施方案的实施例800。具体地,图8示出用于购买和运行有时间限制的容器的容器市场。在实施例800中,软件供应商866将容器镜像852上传到容器注册表802中的非私有储存库,使容器镜像852可在由软件供应商866指定的持续时间内从容器市场868免费获得、购买或租赁。作为持续时间到期的结果,可使运行的软件变得对购买者不可用/不可访问。例如,软件供应商866可以是特定操作系统(例如,红帽Linux、微软Windows、苹果OS X等)的供应商。与使操作系统可通过容器市场868购买获得相结合,软件供应商866可规定:“购买这个产品使购买者有权运行这个操作系统三小时”。因此,在顾客870通过容器市场868的用户界面购买产品时,操作系统可作为容器服务的容器实例818中的软件容器为顾客870启动和执行三小时。当三小时结束时,根据购买合同的条款,操作系统可被终止、暂停或者由顾客870对操作系统的访问可被拒绝。在一些实施方案中,时间限制/持续时间可以是软件容器的执行时间。在另一些具体实施中,除此之外或另选地,时间限制/持续时间可以是自购买以来的时间量或自软件容器第一次启动以来的时间量,而与实际运行时间无关(例如,如果软件容器被终止或暂停,计时器不停止)。应当指出的是,容器镜像852可以是任何类型的应用程序(例如,web托管服务、文字处理应用、数据库等)。软件供应商866可规定购买的顾客870可具有各种安全角色和权限以便利用所购买的软件产品。提供容器服务的计算资源服务提供方可拒绝顾客870利用安全外壳(SSH)来访问运行软件的容器的能力,以便进一步避免容器镜像852可能的软件盗版。
这样,顾客870在任何时间点都不能实际地下载容器镜像852(因为下载和安装由容器服务在容器服务的硬件上执行),从而为软件供应商866提供一定程度的盗版保护。此外,基于时间为软件供应商866提供价格灵活性。因为软件将在容器服务中运行,所述容器服务诸如美国专利申请号14/538,663中所描述的容器服务,所述申请以引用的方式并入本文,所以可准确地追踪软件的运行时间,诸如通过在容器实例204中运行的代理,并且因此可确定顾客870对软件的实际使用,并且可使软件在持续时间结束时过期,所述持续时间由顾客870所购买的产品的许可合同规定。
容器市场868还可允许捆绑不同的容器镜像。例如,如果顾客870期望运行WordPress两小时并将WordPress信息存储在MySQL数据库中,那么顾客可从容器市场868选择WordPress容器镜像和MySQL容器镜像;选择运行持续时间;在单独的但链接的(例如,被配置为接受相同端口等等)软件容器中运行这些容器镜像中的每一个;然后在持续时间结束之后,容器可终止、暂停或由软件供应商866定义的其他操作。
时间限制可以多种方式实施。在一个具体实施中,在容器镜像852的软件在容器实例818中启动时,指示软件的到期时间的通知将被发送到定时器服务(未画出),在达到过期时间时,所述定时器服务将返回容器实例818调用指令来终止运行软件的容器。一旦终止,容器实例818和/或容器服务就可释放软件容器曾使用的资源。在一些实施方案中,容器市场868允许顾客870给软件的运行持续时间添加时间。例如,如果顾客870购买了运行容器镜像852的软件两小时的许可,并且在第一小时之后,顾客870意识到他/她希望运行软件附加三小时,那么顾客870可通过容器市场868为软件购买运行时间的附加三小时。
在另一具体实施中,可为基于容器镜像852的一组运行的软件容器购买运行时间块。换句话讲,可从所购买的时间块中扣除容器实例集群中同时运行的软件的运行时间的总量(例如,两个容器实例各自运行所部署的软件一分钟,所述两个容器消耗所分配的时间两分钟)。即,顾客870可为软件购买1000小时时间块,所述软件与在100个不同的软件容器中启动并运行的容器镜像852相关联;即,所述100个不同的软件容器可并行运行,但可不在同一时间全部运行(例如,随着需求增加,可启动新的软件容器,并且随着需求减少,可终止软件容器)。一旦100个不同的软件容器的组累积用尽了1000小时时间块,就可一起终止所述100个软件容器。在一些情况下,顾客870在时间的基础上购买第一软件包(例如,用于处理数据的软件应用程序);以及不具有期限的第二软件包(例如,数据库应用程序),所述第二软件包被配置为与所述第一软件包相互作用。这样,第一软件包可在所购买的持续时间内处理数据,使用第二软件包存储所处理的数据,并且在第一软件包到期时,所处理的数据仍然由第二软件包存留。
如所指出的,在所分配的时间到期时,计算资源服务提供方可采取其他操作,而不是终止运行的软件容器。例如,软件容器在到期时的状态可至少暂时地存储在数据存储库或其他永久存储器中,并且如果顾客870选择购买附加的时间,那么可重新启动软件容器以使用所存储的状态从到期之前的状态继续执行。类似地,可在到期时获得软件容器的快照,并且如果顾客选择购买更多时间,那么软件容器可从快照重新启动。
图9示出本公开的一个实施方案的实例900。具体地,图9示出使用带有本公开的容器注册表(诸如图2的容器注册表202)的基于令牌的认证。在实施例900中,软件开发者966试图构建容器镜像952并将容器镜像952上传到软件开发者966的容器储存库990。容器镜像952可由一组层构成,并且在上传(也称为“推送”)期间,可做出请求以确定是否已经上传所述一组层的各个层。这些请求中的每个请求可包括确定做出请求的实体是否被授权这样做。
这个授权工作流程在实施例900中显示。在实施例中,软件开发者966向实例服务接口912(诸如图2的实例服务接口212)做出针对安全令牌974的请求。请求可包括可用于验证软件开发者966的凭据或凭据证明978(例如,用户名/密码、生物识别信息、一次性密码、任何或所有前述数据的密码散列等)。
凭据或凭据证明978可交换安全令牌974。类似于基于会话的令牌,安全令牌974可用作请求令牌(例如,可用于特定数量的请求和/或如直到安全令牌974到期的此类时间)。安全令牌974可包括呈加密形式的凭据或凭据证明978。在一些具体实施中,安全令牌974可包括呈加密形式的附加信息,诸如到期时间。为了执行凭据或凭据证明978与安全令牌974的交换,实例服务接口912可在针对安全令牌974的请求中向安全令牌应用编程接口976提供第一签名请求972A。第一签名请求972A可包括凭据或凭据证明978,并且可使用导出密钥签名,所述导出密钥以类似于美国专利申请号13/248,953中所描述的导出密钥的导出方式从由容器注册表前端服务914保存的共享密钥导出,所述申请以引用的方式并入本文,使得安全令牌应用编程接口976可验证第一签名请求972A。
在认证凭据或凭据证明978并且验证第一签名请求972A中的签名是有效的之后,安全令牌应用编程接口976可生成安全令牌974。如所指出的,安全令牌974可以是加密的凭据或凭据证明978,使得安全令牌974可由容器注册表代理962所保存的未被共享的密码密钥解密;例如,容器注册表代理962可具有公钥-私钥对的私钥,并且可使用公钥-私钥对的公钥来加密安全令牌应用编程接口976所提供的安全令牌974。
安全令牌974可被传递给软件开发者966和/或实例服务接口912。安全令牌974可包括安全令牌应用编程接口976和/或实例服务接口912的签名以证明安全令牌974的真实性。一旦安全令牌被软件开发者966接收,传递给实例服务接口912并由实例服务接口912传递的后续命令仅需要包括安全令牌974,而不是凭据或凭据证明972作为软件开发者966被授权以满足某些请求的证明,从而存在更少的凭据或凭据证明978受到损害的风险。如所指出的,可通过加密限制到安全令牌974中来将安全令牌974预先配置为带有某些限制,诸如权限和/或到期日期。这样,只是通过解密安全令牌974,容器注册表代理962就可容易地检查限制,同时避免未授权的实体(例如,那些没有可用于解密安全令牌974的密钥的实体)访问加密到安全令牌974中的数据(例如,权限、到期日期、凭据等)。因此,只要安全令牌974保持有效,安全令牌974就可作为对容器注册表前端服务914的认证的证明用于各种请求。
因此,随后,实例服务接口912可将安全令牌974传递给容器注册表代理962,用于由软件开发者将软件镜像的每个层上传到容器储存库990。容器注册表代理962可解密令牌以获得凭据或凭据证明978。而且在安全令牌974内加密的可以是限制,诸如对安全令牌974的时间限制(例如,安全令牌到期前的持续时间、安全令牌可使用的次数的数量等)。因此,容器注册表代理962可认证凭据或凭据证明978,确定令牌是否仍然是有效的,并且如果有效,可在第二签名请求972B中向容器注册表前端服务914提供凭据或凭据证明。第二签名请求972B可使用相同或不同的导出密钥签名,所述导出密钥从容器注册表前端服务914所保存的共享密钥导出,如上所述。需注意,如果令牌被确定为不是有效的(例如,过期的),那么容器注册代理962可向软件开发者966返回错误(例如,“这个令牌不再有效;您必须重新认证。”)。
如实施例900中所示,软件开发者将容器镜像952的层(包括清单)和应用编程接口请求中的安全令牌974推送到容器注册表前端服务914。容器注册表代理962截取所述请求和安全令牌974,使用保密的密码密钥来按需解密安全令牌974,并且验证安全令牌974是有效的。安全令牌974的验证/认证包括验证从安全令牌974提取的凭据或凭据证明978与软件开发者966的有效凭据相匹配,以及没有超过对安全令牌974的使用的任何期限/限制(例如,到期时间、使用次数等),等等。如果安全令牌974是无效的,那么容器注册表代理962可向软件开发者966返回错误以指示所述令牌无效和/或已经到期,并且软件开发者必须用凭据或凭据证明972来重新认证以便继续进行。
然而,如果安全令牌974是有效的,那么容器注册代理962(如上所述)基于安全令牌974来确定/导出签名密钥,并且将第二签名请求972B和容器镜像952的层发送给前端服务914,好像容器注册表代理962本身就是软件开发者966。容器注册表前端服务914可验证第二签名请求972B,确定容器镜像952的层的各个层是否已经存储在容器储存库990中,并且上传还没有作为容器镜像952存储在容器注册表990中的层。需注意,如果软件开发者966另外或替代地采取从容器注册表990下载容器镜像的操作,那么也可遵循类似的方法。即,虽然上文所描述的方法可应用于将软件镜像上传到容器储存库990,但是请求下载软件镜像或将软件镜像启动到容器实例中的顾客可利用相同的方法(即,获取安全令牌974,容器注册代理962可从所述安全令牌974中提取凭据,等等),使得安全令牌974可提供软件开发者966被授权以满足某些请求的证明,而不必提供凭据或凭据证明972。
图10示出本公开的一个实施方案的实例1000。在本公开的实施方案中,容器注册表可物理地位于不同地理区域中的服务器上,以便提供容器镜像更快的上传和下载。即,服务器1084A-84B中的每个服务器可具有位于那个区域中的顾客/开发者的本地容器注册表,并且容器镜像可基于顾客/开发者对容器镜像的先前使用和/或容器镜像的资源需求来被高速缓存。具体地,图10示出内容分发网络1080,其被配置来使容器镜像存储在本公开的容器储存库(诸如图2的容器注册表202)中,所述容器储存库可用于多个地理区域以使得这些区域中的顾客能够快速地上传、下载和以其他方式访问这些容器镜像。在一些情况下,分发容器镜像的能力可由计算资源服务提供方向顾客提供以额外收费。
在实施例1000中,第一地理区域1082A中的软件开发者1066A可将容器镜像1052上传到位于第一地理区域1082A中的内容分发网络1080的第一数据服务器1084A。内容分发网络1080可以是被部署在世界各地的多个地理区域中的服务器的分布式系统,其通过网络(诸如互联网)彼此通信。内容分发网络1080可通过将内容从一个地理区域中的服务器复制到另一个地理区域中的服务器来托管遍及各个地理区域的服务器上的内容(例如,软件镜像)。计算资源服务提供方的顾客通过能够更快地从地理上最邻近顾客的服务器获得内容来实现益处。然后内容分发网络1080可将容器镜像1052提供给顾客1066B的位于第二地理区域1082B中的内容分发网络1080的第二数据服务器1084B。这样,顾客1066B,通过能够从相同地理区域中的服务器下载容器镜像1052,顾客1066B能够比从位于第一地理区域1082A中的第一服务器1044A下载容器镜像1052更快地接收容器镜像1052。
实施例1000还设想到容器镜像的智能高速缓存。例如,如果顾客1066B具有在第二地理区域1082B中的服务器上运行容器镜像1052的第一版本的1000个容器实例,那么本公开的系统可预测:如果软件开发者1066A曾经更新了容器镜像1052,那么可能顾客1066B将很快希望将1000个容器实例更新为容器镜像1052的新版本。在对这个事件作准备时,本公开的系统可将一个或多个层或者和可能需要来更新容器实例的一样多的层高速缓存在第二地理区域1082B中的局部存储器或服务器的快速持久存储装置中。这样,顾客1066B可快速地将容器镜像1052的新版本部署到容器实例。在一些具体实施中,系统是可配置的,使得作为将新版本上传到第一数据服务器1084A的结果,所述系统可自动地将第二地理区域1082B中的顾客1066B的容器实例更新为容器镜像1052的新版本。因为容器镜像1052可由层构成,并且更新可仅涉及更新少数层(而不是容器镜像1052的所有层),所以存储在高速缓存中用于更新的数据量可远小于高速缓存整个容器镜像1052。
一种预测性高速缓存的方法可基于来自同一储存库的容器镜像的历史部署。例如,如果顾客1066B已经在先前时间上传了容器镜像并且随后在五个容器实例中下载/启动了该容器镜像,并且如果在另一先前时间,顾客1066B上传了另一容器镜像并且随后再次在五个容器实例中下载/启动了该容器镜像,那么在检测到顾客1066B已经再次上传了容器镜像时,本公开的系统可预测:顾客1066B将接下来想将该容器镜像下载/启动到五个容器实例中,并且可高速缓存该容器镜像以为后续部署作准备。需注意,预测性高速缓存不需要局限于利用内容分发网络的实施方案;即,镜像层可至少部分地基于容器实例先前的部署活动来被高速缓存,所述容器实例由位于与储存库相同的区域中的计算机系统托管。
类似地,本公开的系统可追踪由顾客下载并启动的容器镜像,并且诸如通过图2的代理206类似的代理或者通过美国专利申请号14/538,663中所描述的类型的时间表,所述申请以引用的方式并入本文,可追踪哪个软件应用程序当前正在运行容器实例、在什么时候运行以及多久运行一次。使用这些数据,系统可预测:如果对对应于长时间运行(例如,对应于容器镜像平均连续运行多天或一些其他阈值时间段的应用程序)和/或频繁运行(例如,对应于容器镜像平均每天多次或一些其他阈值频率启动的应用程序)的应用程序的容器镜像进行更新,那么所更新的容器镜像或对应于所述应用程序的特定容器镜像层应被快速缓存,以准备对长时间运行和/或频繁运行的应用程序进行更新。如果先前的历史指出顾客1066B通常在特定的时刻或星期几(例如,星期六午夜)执行部署,那么智能高速缓存可通过仅在预测的部署时间内及时(JIT)(例如,部署时间前一分钟)加载部署所需的层来有效利用内存资源。除此之外或另选地,高速缓存策略可包括最近最少使用(LRU)高速缓存策略、基于命中的策略、预取以及上述策略的各种组合。需注意,预期可使用另选地或除所描述的那些之外的各种其他高速缓存优化策略。
图11示出本公开的一个实施方案的实施例1100。通常,根据以某些规定的语法编写的专用文本文件中的指令来构建容器镜像。此类文件的类型是makefile、Dockerfile等等,在本公开中通常称为“构建文件”。构建容器镜像可涉及执行此类文本文件。图11示出自动化构建和部署服务,由此顾客可将文件上传到受管理的资源控制服务1186,并且自动化构建服务1184将执行从所上传的文件构建容器镜像的操作。在实施例1100中,顾客1166通过受管理的资源控制服务1186的应用编程接口上传一组构建工件1158,所述构建工件1158包括所述一组文件的构件文件。受管理的资源控制服务1186将一组构建工件1158转发到自动构建服务1184来根据构建文件和容器引擎类型构建容器镜像1152,所述一组构建工件1158已经被配置或指定为所述容器引擎类型,并且将容器镜像1152存储在容器注册表1102中的顾客1166的储存库中。
在一些实施方案中,受管理的资源控制服务1186可以是由容器服务的计算资源服务提供方托管的版本控制服务,其允许顾客存储和管理构建工件,诸如顾客储存库中的文档、源代码和二进制文件。一组构建工件1158可以是可用于构建软件容器的信息。因此,一组构建工件1158可包括配置文件、生成文件、源代码文件、数据文件、二进制文件以及构建和/或部署和/或测试容器镜像所需的其他资源和指令中的一个或多个。
在其他实施方案中,受管理的资源控制服务1186可以是由顾客1166安装到服务器上应用程序,所述服务器在顾客1166的控制下。在又一些实施方案中,受管理的资源控制服务1186可由不同计算资源服务提供方从托管容器服务1192的计算资源服务提供方提供。在一些具体实施中,储存库可被加密。受管理的资源控制服务1186可提供用户界面和/或应用编程接口以由顾客1166创建和管理顾客的储存库。在实施方案中,顾客1166可已经将一组构建工件1158上传到受管理的资源控制服务1186,并且可只需要上传指示代码储存库的位置与用于自动化构建和部署容器镜像1152所需的一组构建工件1158的受管理的资源控制服务的位置的构建工件。
在一些实施方案中,自动化构建服务可被配置来执行滚动部署和回滚。例如,自动化构建服务1184可与调度器进行通信,所述调度器诸如美国专利申请号14/538,663中所描述的类型的调度器,所述申请以引用的方式并入本文,以一次将容器镜像的新版本部署到预定百分比或数量的容器实例,如果先前的部署成功,那么仅将新版本部署到下一预定百分比或数量的容器实例。这个过程可继续,直到将整队容器实例更新为容器镜像的新版本。然而,如果将新版本部署到预定百分比或数量的容器实例的尝试不成功,那么自动化构建服务1184可自动地反转过程并且将新更新的容器实例回滚到先前的软件版本。这样,软件部署可一次前滚或回滚一部分。
例如,Docker容器引擎使用称为Dockerfile的描述性文件格式,其允许用户构建Docker镜像。在这个实施例中,顾客1166可能正在对软件应用程序进行更新。顾客1166可在本地构建和测试更新的源代码。当顾客1166对更新的源代码准备好封装和部署感到满意时,顾客1166可提供源代码和构建文件作为一组构建工件1158,并且自动化构建服务1184可自动地从所提供的一组构建工件1158构建容器镜像的新版本,并且使容器注册表前端服务1114将新版本存储在顾客的储存库1190中。在一些实施方案中,自动化构建服务被进一步被配置来将容器镜像的新版本自动地部署到顾客1166的容器实例,并且升级那些容器实例中的当前运行的这个容器镜像的先前版本。
例如,顾客可将一组构建工件1158上传到容器注册表前端服务,因此自动化构建服务1184可构建并且使容器注册表前端服务1114与调度器通信(例如,通过应用编程接口)以将来自储存库1190的更新的容器镜像1152部署到计算资源服务提供方的容器服务1192,诸如美国专利申请号14/538,663中所描述的容器服务,所述申请以引用的方式并入本文。容器服务可以是包括计算机资源的集合的服务,所述计算机资源的集合由计算资源服务提供方提供给顾客并且被配置来为顾客实例化容器。容器服务1192可根据由顾客1166限定/指定的部署策略(例如,有效地指示自动化构建服务1184来“每次上传这个软件的新版本时,以这个预定方式滚出所述软件”的策略)来使更新的容器镜像1152在一个或多个容器实例1104中启动。
在一些情况下,构建和部署可包括从存储在受管理的资源控制服务1156的文件构建软件镜像。在其他情况下,源代码文件可被预编译为受管理的资源控制服务1156内的二进制,并且构建和部署可涉及将预编译的二进制复制到目标容器。
对于本公开的实施方案,设想到各种部署方案。例如,一个部署方案可停止运行的软件的旧版本,然后启动所述软件的更新版本。又如,在一些具体实施中可采取滚动部署(诸如上文所描述的)。滚动部署的一个实例可以是串行部署;即停止运行的软件的旧版本的一个实例并且启动所述实例的软件的新版本,然后继续对具有运行的软件的旧版本的下一实例进行部署。另一部署策略可以是蓝绿部署,其中软件的新版本安装在测试网络中的容器实例中,所述测试网络与生产网络(即,托管运行的软件的旧版本的容器实例)并行运行,并且当新软件完全安装时,将测试网络切换为生产网络并使旧生产网络离线。在一些具体实施中,本公开的系统为顾客提供能够定义顾客的优选部署方案的功能性,诸如在指定哪些应用程序要更新以及顾客希望如何更新的JSON文档中。
图12示出本公开的一个实施方案的容器注册表的实体关系图1200。如从图12中可以看出,容器注册表可包括分配给不同子队的一组容器注册表。账户可与计算资源服务提供方的给定顾客关联,并且可具有与容器注册表1204一一对应关系。区域1206可指储存库的位置,所述位置可以是物理位置、数据中心内的位置或虚拟位置。区域1206可具有与注册表零对多的对应关系。每个容器注册表1204可对应于一组零对多储存库1208,所述储存库1208可由给定账户拥有。储存库1208是用于以本公开中所描述的方式上传容器镜像1212、命名空间可选的位置。因此,储存库1208具有与存储在那个位置的容器镜像1212一对多的对应关系。标签1210可以是指向容器镜像1212的可变指针,以方便地重新指向所述容器镜像1212。因此,储存库1208可具有与标签1210多对多的对应关系,所述标签1210继而可具有与容器镜像1212多对多的对应关系。如本公开所描述的,每个容器镜像1212可由称为层1214的一组文件和清单构成。因此,如可以看出,镜像1212具有与层1214零对多对应关系。
图13是示出根据各种实施方案的过程1300的实施例的框图,所述过程1300用于将容器镜像存储在储存库中。过程1300(或所描述的任何其他过程,或这些过程的变体和/或组合)中的一些或全部可在经配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可实施为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可存储在非暂态计算机可读存储介质上(例如,永久存储在磁的、光学的或闪存介质上的计算机程序)。
例如,过程1300中的一些或全部可由任何合适的系统,诸如数据中心中的服务器;由结合图17所描述的环境1700的各种组件,诸如web服务器1706或应用服务器1708;由计算资源服务提供方的分布式系统中的多个计算设备;或者由任何电子客户端设备,诸如电子客户端设备1702来执行。过程1300包括一系列操作,其中接收存储软件镜像的请求;确定容器镜像的一组层被存储;生成清单;并且将清单中的层存储为容器镜像。
在1302中,接收存储容器镜像的请求,诸如通过图1的容器注册表前端服务114来接收请求。容器注册表由一组储存库构成,每个所述存储库被分配给计算资源服务提供方的顾客。如本公开所述,请求可从各种实体中的任何实体,诸如从与储存库相关联的顾客所操作的计算设备;以及自动化构建服务,诸如图11的自动化构建服务1184;或与储存库相关的顾客所授权的一些其他实体接收。请求可指示被上传的容器镜像并且可包括凭据或认证令牌,诸如图9的安全令牌974。
在1304中,系统可分析所指示的容器镜像以确定一组层,所述一组层可以是容器镜像的镜像文件的子集。系统可基于1302的请求接收到的信息来确定容器镜像是否是对已经存储在顾客的储存库中的容器镜像的更新,或者容器镜像是否是存储在顾客储存库中的新镜像。系统可确定哪些层先前未存储在顾客储存库(或者,在一些具体实施中,全局储存库)中,并且确定仅存储先前未存储在顾客储存库中的那些层。在一些实施方案中,确定哪些层先前未存储在顾客储存库中是查询存储在注册表元数据存储服务(诸如图2的注册表元数据服务222)中的数据。
在1306中,可为层的子集生成清单以表示上传的容器镜像。如所指出的,清单可由与容器镜像有关的元数据以及与构成容器镜像的一组层有关的元数据构成。这样,清单指定哪些层与容器镜像相关联,并且因此,当上传新的容器镜像时,可从清单中确定镜像的哪些层可能已经或可能没有存储在顾客储存库中。在1308中,在1304中确定的层的子集可与清单一起存储,诸如以类似于结合图12所描述的数据结构。需注意,在1302-08中执行的一个或多个操作可以各种顺序和组合执行,包括并行执行。
图14是示出根据各种实施方案的过程1400的实施例的框图,所述过程1400用于使存储在储存库中的容器镜像启动。过程1400(或所描述的任何其他过程,或这些过程的变体和/或组合)中的一些或全部可在经配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可实施为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可存储在非暂态计算机可读存储介质上(例如,永久存储在磁的、光学的或闪存介质上的计算机程序)。
例如,过程1400中的一些或全部可由任何合适的系统,诸如数据中心中的服务器;由结合图17所描述的环境1700的各种组件,诸如web服务器1706或应用服务器1708;由计算资源服务提供方的分布式系统中的多个计算设备;或者由任何电子客户端设备,诸如电子客户端设备1702来执行。过程1400包括一系列操作,其中接收启动容器镜像的请求;定位所请求的容器镜像的清单;基于清单定位包括容器镜像的层;将容器镜像下载到容器实例;在容器实例的软件容器中启动容器镜像。
在1402中,系统接收启动指定的容器镜像的请求(例如,通过图1的容器注册表前端服务114)。如本公开所述,请求可从各种实体中的任何实体,诸如从与储存库相关联的顾客所操作的计算设备;以及自动化构建服务,诸如图11的自动化构建服务1184;容器市场,诸如图7的容器市场768和图8的容器市场868;或与存储库相关的顾客所授权的一些其他实体接收。请求可指示被上传的容器镜像并且可包括凭据或认证令牌,诸如图9的安全令牌974。
在1404中,可获得指定的容器镜像的清单。在一些实施方案中,这个清单从注册表元数据存储服务(诸如图2的注册表元数据服务222)获得。在其他具体实施中,清单从容器注册表获得。基于清单中的元数据,在1406中,可定位包括容器镜像的层;即,因为只有已经更新的层可与容器镜像的最新版本上传,所以不是包含容器镜像的所有层都可定位在一起。在一些情况下,清单可提供其他层可被定位的位置。在其他情况下,清单可包括与其他层相关联的内容可寻址标识符,并且可使用所述内容可寻址标识符来定位其他层的位置。
一旦定位了对应于容器镜像的所有层,在1408中,就可将容器镜像下载到顾客的容器实例。在一些情况下,容器实例可能不可用,并且在此类情况下,为了在软件容器中启动并运行容器镜像的软件的目的,可实例化新的容器实例。在一些情况下,任务定义文件可指定要分配给容器以用于运行容器镜像的软件的资源量和类型,并且可基于容器实例的可用资源和针对有效资源分配而优化的选择方案来选择容器实例。
最后,在1410中,容器镜像可作为所选择的容器镜像中的运行的软件容器被启动。只要顾客需要,软件容器就可继续运行,或者如本公开所述,可在预定的持续时间后过期并终止或暂停。需注意,在1402-10中执行的一个或多个操作可以各种顺序和组合执行,包括并行执行。
图15是示出根据各种实施方案的过程1500的实施例的流程图,所述过程1500用于访问储存库。过程1500(或所描述的任何其他过程,或这些过程的变体和/或组合)中的一些或全部可在经配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可实施为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可存储在非暂态计算机可读存储介质上(例如,永久存储在磁的、光学的或闪存介质上的计算机程序)。
例如,过程1500中的一些或全部可由任何合适的系统,诸如数据中心中的服务器;由结合图17所描述的环境1700的各种组件,诸如web服务器1706或应用服务器1708;由计算资源服务提供方的分布式系统中的多个计算设备;或者由任何电子客户端设备,诸如电子客户端设备1702来执行。过程1500包括一系列操作,其中接收访问储存库的请求;确定请求者是否具有有效的授权令牌。如果是,那么可授予对储存库的访问。如果不是,那么再确定请求者是否被授权以满足请求,并且如果是,那么可提供授权令牌并且可授予对储存库的访问。
在1502中,执行过程1500的系统可接收来自客户端(例如,客户端设备)的访问(例如,从其中下载、上传到其中、从其中删除、列出存储在其中的镜像、搜索其中的内容等)分配给计算资源服务提供方的顾客的储存库的请求。在1504中,如果请求包括授权令牌,那么执行过程1500的系统可确定认证令牌是否是指示请求实体应有权访问储存库的有效认证令牌。认证令牌的验证可由(例如)解密来自认证令牌的一组凭据并且验证所述一组凭据与被授权的实体相关联来执行,以满足在1502中所接收的请求。如果授权令牌被成功验证,那么执行过程1500的系统可行进到1506,由此向请求实体提供对指定储存库的访问。
否则,如果请求不包括指示请求实体被授权访问储存库的令牌或者如果提供的令牌是无效的(例如,令牌已经过期、令牌已经被篡改或毁损、令牌是不同的储存库的令牌等),那么执行过程1500的系统可行进到1508,由此向请求实体提供错误消息(例如,“未授权的访问”等)和/或接口以按照要求提供凭据(例如,用户名和密码、多因素认证等)以确定请求实体是否被授权访问储存库。这个凭据信息可封装在授权报头中并且提供给认证服务以进行认证。
在1510中,如果认证服务指出所提供的凭据信息未指示实体应被允许访问储存库,那么执行过程1500的系统可行进到1512,由此拒绝请求实体对储存库的访问。这个拒绝可呈以下形式:错误消息、允许实体再次尝试的接口、允许实体检索已忘记的用户名/密码的接口或一些其他适当的响应。在一些具体实施中,对储存库的访问的成功和失败的尝试被记录。
然而,在1514中,如果认证服务指出凭据信息确实指示实体应被允许访问储存库,那么执行过程1500的系统可行进到1514,由此可生成编码或以其他方式指示请求实体有权访问指定储存库的授权令牌。授权令牌可以是通过加密产生的字符串,使得令牌可由容器注册代理或容器注册表前端服务所持有的密钥、被授权的实体做出请求的凭据和/或凭据证明(例如,凭据的密码散列)、和/或至少在一定时间量内至少部分可用的数字签名(例如,令牌可已经至少部分地使用基于时间的参数来生成,使得所述令牌具有有效的到期日期,在所述到期时间之后令牌不再被认为是有效的)来加密以验证对储存库的访问。
以下示出用于生成令牌的实施例算法:
Figure BDA0001693035890000411
可响应于请求实体来提供授权令牌,由此执行过程1500的系统可返回到1502以请求访问储存库,这次所述请求包括新生成的授权令牌。然后,这个新生成的授权令牌应在1504中被成功验证,从而授予请求实体访问储存库。需注意,在1502-14中执行的一个或多个操作可以各种顺序和组合执行,包括并行执行。
图16是示出根据各种实施方案的过程1600的实施例的框图,所述过程1600用于从代理(诸如图2的代理206)的角度来启动软件容器。过程1600(或所描述的任何其他过程,或这些过程的变体和/或组合)中的一些或全部可在经配置有可执行指令和/或其他数据的一个或多个计算机系统的控制下执行,并且可实施为在一个或多个处理器上共同执行的可执行指令。可执行指令和/或其他数据可存储在非暂态计算机可读存储介质上(例如,永久存储在磁的、光学的或闪存介质上的计算机程序)。
例如,过程1600中的一些或全部可由任何合适的系统,诸如数据中心中的服务器;由结合图17所描述的环境1700的各种组件,诸如web服务器1706或应用服务器1708;由计算资源服务提供方的分布式系统中的多个计算设备;或者由任何电子客户端设备,诸如电子客户端设备1702来执行。过程1600包括一系列操作,其中代理检测需要从储存库下载镜像并在当前容器实例中启动的事件;代理获得允许访问储存库的有效认证令牌;从储存库获得镜像;以及在当前容器实例中启动并运行所述镜像。
在1602中,执行过程1600的系统检测需要从储存库获得软件镜像的事件,所述储存库对应于在系统上运行的容器实例的顾客所有者。此类事件的一个实施例可以是通过容器注册表前端服务的应用编程接口来接收顾客的请求,以指示代理获得并启动指定的容器镜像。这类事件的另一实施例可以是由安全扫描或扫描机制(分别诸如图4的安全扫描454和图5的扫描机构554)检测容器镜像的软件的当前运行的版本是不顺从的或包含漏洞,使得当前运行的版本必须更新或回滚到容器镜像的软件的不同版本。这类事件的又一实施例可以是顾客已经将容器镜像的源代码的新版本上传到自动化构建服务(诸如图11的自动化构建服务1184),并且所述自动化构建服务向执行过程1600的系统传达应自动部署新版本以替换在系统的容器实例中运行的当前版本。
在1604中,系统可通过以诸如结合图9所描述的方式调用容器注册表前端服务(诸如图1的容器注册表前端服务114)来获得有效的认证令牌,以便允许系统代表顾客行事。身份验证令牌可以是有效的,直到它过期。在1606,已经获得认证令牌,系统可通过容器引擎(诸如图2的容器引擎208)做出请求以获得容器镜像的指定版本,所述请求包括认证令牌。在1608中,作为请求被满足并且系统获得容器镜像的指定版本的结果,代理可停止容器镜像的软件的任何当前运行的版本,并且启动容器镜像的软件的所获得的版本以作为在当前容器实例中运行的软件容器。需注意,在1602-08中执行的一个或多个操作可以各种顺序和组合执行,包括并行执行。
还需注意,在描述所公开的实施方案的上下文中,除非另外指明,否则关于执行操作的可执行指令(也称为代码、应用程序、代理等)的“指令”通常不是独立执行的(例如,数据传输、计算等)的表达的使用表示指令由机器执行,从而使机器执行指定的操作。
图17示出用于实现根据各种实施方案的各方面的实施例环境1700的各方面。如将会知道的,尽管出于解释目的使用基于web的环境,但是可视情况使用不同环境来实现各种实施方案。环境包括电子客户端设备1702,其可包括可操作来通过适当网络1704发送和/或接收请求、消息或信息并且在一些实施方案中将信息传送回设备的用户的任何适当设备。此类客户端设备的实施例包括个人计算机、手机、手持式消息传送装置、膝上型电脑、平板电脑、机顶盒、个人数据助理、嵌入式计算机系统、电子书阅读器等。网络1704可包括任何适当网络,包括内联网、互联网、蜂窝网、局域网、卫星网络,或任何其他此类网络和/或上述网络的组合。用于此类系统的部件可至少部分地取决于所选择的网络和/或环境的类型。用于通过此类网络通信的协议和组件是众所周知的,并且将不再详细讨论。通过网络1704进行的通信可通过有线或无线连接以及它们的组合来实现。在这个实施例中,网络1704包括互联网,因为环境包括用于接收请求并且响应于所述请求而提供内容的web服务器1706,但是对于其他网络来说,可使用服务类似目的的替代装置,如本领域普通技术人员所显而易见的。
例示性环境包括应用服务器1708和数据存储库1710。应当理解,可存在可链接起来或以其他方式来配置的若干应用服务器、层或其他元件、进程或组件,它们可交互以执行诸如从适当数据存储库获得数据的任务。如所使用的服务器可以各种方式来实现,诸如硬件装置或虚拟计算机系统。在一些上下文中,服务器可指在计算机系统上执行的编程模块。如所使用的,除非另行指出或从上下文清楚地看出,否则术语“数据存储库”是指能够存储、访问和检索数据的任何装置或装置组合,其可包括任何标准、分布式、虚拟或集群式环境中的任何组合和任何数目的数据服务器、数据库、数据存储装置和数据存储介质。应用服务器1708可包括任何适当硬件、软件和固件,所述硬件、软件和固件用于视执行电子客户端设备1702的一个或多个应用程序的各方面的需要而与数据存储库1710集成,从而处理应用程序的一些或所有的数据访问和业务逻辑。应用服务器1708可与数据存储库1710协作提供访问控制服务,并且能够生成可用于向用户提供的内容,包括文本、图形、音频、视频和/或其他内容,所述内容可以超文本标记语言(“HTML”)、可扩展标记语言(“XML”)、JavaScript、级联样式表(“CSS”)或另一种合适的客户侧结构化语言的形式通过web服务器1706向用户提供。传递到客户端设备的内容可由电子客户端设备处理,以提供呈一种或多种形式的内容,所述形式包括用户可通过听觉、视觉和/或通过其他感觉来感知的形式。所有请求和响应的处理以及电子客户端设备1702与应用服务器1708之间的内容递送可由web服务器1706使用PHP来处置:超文本预处理器(“PHP”)、Python、Ruby,Perl、Java、HTML、XML或本实例中的其他适当的服务器端结构化语言。此外,除非从上下文清楚地看出,否则如由单个装置执行的所描述的操作可由可形成分布式和/或虚拟系统的多个装置共同执行。
数据存储库1710可包括用于存储与本公开的特定方面相关的数据的若干单独数据表、数据库、数据文档、动态数据存储方案和/或其他数据存储机构和介质。例如,数据存储库1710可包括用于存储生成数据1712和用户信息1716的机构,生成数据1712和用户信息1716可用于提供用于生成侧的内容。数据存储库1710还被示出为包括用于存储日志数据1714的机构,所述日志数据1714可用于报告、分析或其他目的。应当理解,可存在可能需要存储在数据存储库1710中的许多其他方面,诸如页面图像信息和访问权信息,所述方面可视情况存储在上文列出的机构中的任何机构中或存储在数据存储库1710中的另外机构中。数据存储库1710可通过与其相关联的逻辑来操作,以便从应用服务器1708接收指令,并且响应于所述指令获得数据、更新数据或以其他方式处理数据。应用服务器1708可响应于所接收的指令提供静态数据、动态数据或静态数据和动态数据的组合。动态数据(诸如web日志(博客)、购物应用程序、新闻服务以及其他应用程序中使用的数据)可由如所描述的服务器侧结构化语言生成,或可由在应用服务器1708上操作或在其控制下的内容管理系统(“CMS”)提供。在一个实施例中,用户可通过由用户操作的装置提交对某种类型的项目的搜索请求。在这种情况下,数据存储库1710可访问所述用户信息1716来验证用户的身份,并且可访问目录详细信息,来获取关于此种类型项目的信息。接着可将信息以诸如网页上的结果列表的形式返回给用户,用户能够通过电子客户端设备1702上的浏览器来查看所述网页。可在专用浏览器页面或窗口中查看感兴趣的特定项目的信息。然而,应当指出的是,本公开的实施方案未必局限于网页的上下文,而可更一般地应用于处理一般请求,其中所述请求未必是对上下文的请求。
每个服务器通常将包括提供用于所述服务器的一般管理和操作的可执行程序指令的操作系统,并且通常将包括存储指令的计算机可读存储介质(例如,硬盘、随机存取存储器、只读存储器等),所述指令作为由服器的处理器执行的结果允许所述服务器执行其预期的功能。
在一个实施方案中,环境是分布式和/或虚拟计算环境,所述环境利用通过通信链路、使用一个或多个计算机网络或直接连接来互连的若干计算机系统和部件。但是,本领域的普通技术人员将会知道,此类系统可在具有比图17所示更少或更多部件的系统中同样顺利地操作。因此,对图17中的实施例环境1700的描绘本质上应视为例示性的,并且不限制本公开的范围。
可在广泛范围的操作环境中进一步实现各个实施方案,所述操作环境在一些情况下可包括一个或多个用户计算机、计算装置或者可用于操作多个应用中的任何应用的处理装置。用户或客户端设备可包括多个通用个人计算机中的任一种,诸如运行标准操作系统的台式机、膝上型电脑或平板电脑,以及运行移动软件并且能够支持多种网络连接协议和消息传送协议的蜂窝装置、无线装置和手持式装置。此类系统还可包括多个工作站,所述工作站运行多种可商购获得的操作系统和用于诸如开发和数据库管理目的的其他已知应用程序中的任一种。这些装置还可包括其他电子装置,诸如假终端、瘦客户端、游戏系统和能够通过网络通信的其他装置。这些装置还可包括虚拟装置,诸如虚拟机、管理程序以及能够通过网络通信的其他虚拟装置。
可根据以下条款对本公开的实施方案的实施例进行描述:
1.一种系统,所述系统包括:
一个或多个处理器;以及
包括指令的存储器,作为由所述一个或多个处理器执行的结果,所述指令使所述系统:
从与计算资源服务提供方的顾客相关联的设备接收存储容器镜像的请求,所述容器镜像是可部署为软件容器的镜像,所述请求包括所述容器镜像的至少一个构建工件以及安全令牌,所述安全令牌至少部分可用于认证所述请求为已经由所述顾客授权;
使用密码密钥来认证所述安全令牌的有效性,所述密码密钥由所述计算资源服务提供方保密;
至少部分地基于至少一个所述构建工件来构建所述容器镜像的一个或多个层以形成一组构建层;
将所述一组构建层存储在与所述顾客相关联的储存库中以形成所存储的容器镜像;
将所述一组构建层的元数据的清单存储在结构化数据存储库的数据库中,所述元数据包括所述所存储的容器镜像的所述一组构建层的各个构建层的存储位置,所述结构化数据存储库不同于所述储存库;
获得呈所获得的容器镜像形式的所述所存储的容器镜像;并且
将所述所获得的容器镜像作为所述软件容器部署在与所述顾客相关联的至少一个虚拟机实例中。
2.如条款1所述的系统,其中:
所述所存储的容器镜像由至少部分地基于所述清单中的所述存储位置从所述储存库获得;并且
部署所述所获得的容器镜像的所述指令还包括使所述系统执行以下操作的指令:
将所述所存储的容器镜像复制到物理上位于第二地理区域中的第二储存库以形成所复制的容器镜像;并且
将所述所复制的容器镜像作为所述软件容器从所述第二储存库部署到物理上位于所述第二地理区域中的与所述顾客关联的至少一个虚拟机实例。
3.如条款1或2所述的系统,其中:
所述所获得的容器镜像至少部分地从一组已高速缓存的层获得;并且
获得所述所存储的容器镜像的所述指令还包括使所述系统执行以下操作的指令:
至少部分地基于与所述顾客相关联的一个或多个虚拟机实例的先前部署活动来做出是否将所述一组构建层的一个或多个层保持在高速缓存存储器中的决定;并且
至少部分地取决于所述决定,将所述一组构建层的所述一个或多个层作为所述一组已高速缓存的层保持在所述高速缓存存储器中。
4.如条款1-3中任一项所述的系统,其中:
所述安全令牌是包括所述顾客的凭据信息的加密数据;
所述指令还包括使所述系统执行以下操作的指令:
将所述凭据信息提交给认证服务以供验证;并且
作为接收由所述认证服务成功验证所述凭据信息的指示的结果,获得至少部分地基于加密凭据信息和至少一个限制而生成的所述安全令牌以形成所述加密数据;并且
认证所述安全令牌的所述有效性的所述指令还包括使所述系统执行以下操作的指令:
解密所述加密数据以形成解密的凭据信息和至少一个解密的限制;并且
验证所述解密的凭据信息和所述至少一个解密的限制授权满足将所述容器镜像存储在所述储存库中的请求。
5.一种计算机实现的方法,所述方法包括:
在配置有可执行指令的一个或多个计算机系统的控制下,
接收将包括一组镜像层的软件镜像存储在分配给由计算资源服务提供方保持的账户的数据对象存储库中的第一请求,所述第一请求包括至少部分地可用于认证所述第一请求的令牌;以及
作为确定所述令牌是真实并且有效的以授权满足第一请求的结果:
将所述一组镜像层存储在与所述账户相关联的所述数据对象存储库中以形成所存储的软件镜像;
将与所述软件镜像有关的元数据存储在与所述数据对象存储库不同的结构化存储装置中;
接收将所述软件镜像部署到一个或多个容器实例的第二请求;
至少部分地基于所述结构化存储装置中的所述元数据从所述数据对象存储库获得所述所存储的软件镜像;以及
根据所述第二请求将所述所存储的软件镜像部署在一个或多个容器实例中。
6.如条款5所述的计算机实现的方法,其中:
所述一个或多个容器实例正在执行软件应用程序;
所述第二请求根据预定义的部署方案从自动化构建服务接收,所述预定义的部署方案指定自动地部署所述软件应用程序的最新版本以替换所述软件应用程序的先前版本;并且
所述方法还包括:作为根据所述预定义的部署方案确定所述软件镜像是所述软件应用程序的所述最新版本的镜像并且在所述一个或多个容器实例中执行的所述软件应用程序是先前版本的结果:
终止所述一个或多个容器实例中的所述软件应用程序的所述先前版本的执行;以及
启动所述软件镜像以在所述一个或多个容器实例中执行。
7.如条款5或6所述的计算机实现的方法,其中所述第二请求通过应用编程接口从与所述计算资源服务提供方的顾客相关联的设备接收。
8.如条款5-7所述的计算机实现的方法,其中确定所述令牌是真实和有效的包括:
使用在与所述账户相关联的实体与所述计算资源服务提供方之间作为秘密共享的密钥来解密所述令牌以形成一组凭据和限制;
认证所述一组凭据是与所述实体相关联的凭据;
确定所述实体被授权来将所述软件镜像存储在所述数据对象存储库中;以及
至少部分地基于所述限制来确定所述令牌是有效的。
9.如条款5-8中任一项所述的计算机实现的方法,所述方法还包括:
从所述一个或多个容器实例接收对应于第一容器引擎类型的第一应用编程接口请求,所述软件镜像被部署到所述一个或多个容器实例;
将所述第一应用编程接口请求转换成具有对应于第二容器引擎类型的格式的第二应用编程接口请求;以及
向处理对应于所述第二容器引擎类型的格式的请求的服务提供所述第二应用编程接口请求。
10.如条款5-9中任一项所述的计算机实现的方法,其中:
所述方法还包括将所述软件镜像转换成包括第二组镜像层的第二容器引擎类型的第二软件镜像;并且
存储所述一组镜像层包括将对应于所述第二软件镜像的所述第二组镜像层存储在所述数据对象存储库中以形成所存储的软件镜像。
11.如条款5-10中任一项所述的计算机实现的方法,其中:
所述第一请求包括所述软件镜像的构建工件;并且
所述方法还包括:
将所述构建工件存储在受管理的资源控制服务;以及
从所述构建工件构建所述软件镜像的所述一组镜像层。
12.如条款11所述的计算机实现的方法,所述方法还包括:依赖于成功地构建所述一组镜像层,根据由与所述账户相关联的个体所指定的部署策略,调度所述所存储的软件镜像到所述一个或多个实例的部署。
13.一个或多个非暂态计算机可读存储介质,其具有共同存储在其上的可执行指令,作为由分布式计算机系统的一个或多个处理器执行的结果,所述可执行指令使所述分布式计算机系统至少:
接收将软件镜像存储在与计算资源服务提供方的顾客相关联的第一数据存储库中的请求,所述请求包括存储所述软件镜像的一组层;并且
作为包括在所述请求中的安全令牌的成功认证的结果:
至少部分地基于从第二数据存储库获得的第一元数据来确定先前未被存储在所述第一数据存储库中的所述软件镜像的层的子集;
将所述层的子集存储在所述第一数据存储库中;
将与存储在所述第一数据存储库中的所述层的子集有关的第二元数据存储在所述第二数据存储库中;并且
至少部分地基于所述层的子集使所述软件镜像在实例的软件容器中启动。
14.如条款13所述的一个或多个非暂态计算机可读存储介质,其中:
所述请求包括所述软件镜像的至少一个构建工件;并且
使所述分布式计算机系统接收所述请求的所述可执行指令包括使所述分布式计算机系统执行以下操作的指令:
将所述至少一个构建工件存储在受管理的资源控制服务;并且
从所述至少一个构建工件构建所述软件镜像的所述一组层。
15.如条款13或14所述的一个或多个非暂态计算机可读存储介质,其中:
所述第一数据存储库位于第一区域中;
所述实例托管在物理上位于第二区域的计算系统上;并且
使所述分布式计算机系统使所述软件镜像启动的所述可执行指令还包括使所述分布式计算机系统执行以下操作的可执行指令:
确定所述实例正在运行所述软件镜像的先前版本;
确定所述软件镜像是所述软件镜像的最新版本;
将所述层的子集从所述第一数据存储库复制到第二数据存储库以形成所复制的软件镜像,所述第二数据存储库托管在物理上位于所述第二区域中的计算系统上;并且
至少部分地基于所述所复制的镜像使所述软件镜像在所述软件容器中启动。
16.如条款13-15中任一项所述的一个或多和非暂态计算机可读存储介质,其中:
所述实例是所述计算资源服务提供方的第二顾客的实例;并且
所述顾客向所述第二顾客收取所述软件容器的使用费用,所述软件镜像在所述软件容器中启动。
17.如条款13-16中任一项所述的一个或多个非暂时性计算机可读存储介质,其中所述可执行指令还包括使所述分布式计算机系统依赖于确定所述软件镜像在所述实例的所述软件容器中成功启动使所述软件镜像在与所述顾客相关联的第二实例的第二软件容器中启动的可执行指令。
18.如条款13-17中任一项所述的一个或多个非暂态计算机可读存储介质,其中:
所述第一数据存储库保持与标签相关联的软件应用程序的第一版本;
所述软件镜像是软件应用程序的第二版本;并且
所述可执行指令还包括使所述分布式计算机系统执行以下操作的可执行指令:作为接收将所述标签与所述软件镜像的所述第二版本相关联的第二请求的结果:
取消所述标签与所述第一版本的关联;并且
将所述标签与所述第二版本相关联。
19.如条款13-18中任一项所述的一个或多个非暂态计算机可读存储介质,其中使所述分布式计算机系统存储所述层的子集的可执行指令包括使所述分布式计算机系统执行以下操作的可执行指令:
扫描所述层的子集以查找与一个或多个指定的条件的匹配;并且
至少部分地根据未找到与所述一个或多个指定条件的所述匹配将所述层的子集存储在所述第一数据存储库中。
20.如条款19所述的一个或多个非暂态计算机可读存储介质,其中使所述分布式计算机系统使所述软件镜像启动的可执行指令包括使所述分布式计算机系统执行以下操作的可执行指令:
从所述第一数据存储库获得所述软件镜像以形成所获得的软件镜像;
打开所述所获得的软件镜像以形成所打开的软件镜像;
扫描所述所打开的软件镜像以查找与一个或多个指定的条件的匹配;并且
至少部分地根据未找到与所述一个或多个指定条件的匹配在所述实例的所述软件容器中启动所述所打开的软件镜像。
21.一种系统,所述系统包括:
一个或多个处理器;以及
包括指令的存储器,作为由所述一个或多个处理器执行的结果,所述指令使所述系统:
从与计算资源服务提供方的第一顾客相关联的第一设备接收容器镜像和信息,所述信息指定用于终止所述容器镜像的执行的事件触发器,所述容器镜像包括一组软件层,所述第一顾客位于第一地理区域中;
将所述一组软件层存储在与所述第一顾客相关联的第一储存库中以形成所存储的容器镜像,所述第一储存库位于所述第一地理区域中;
将所述所存储的容器镜像复制到第二储存库以形成所复制的容器镜像,所述第二储存库位于与所述第一地理区域不同的第二地理区域中;
从与所述计算资源服务提供方的第二顾客相关联的第二设备接收将所述容器镜像部署到与所述第二顾客相关联的至少一个虚拟机实例中的请求,所述至少一个虚拟机实例位于所述第二地理区域中;
将所述所复制的容器镜像部署为软件容器以在所述至少一个虚拟机实例中执行;并且
作为事件触发器的发生的结果,终止所述软件容器的执行。
22.如条款21所述的系统,其中使所述系统部署所述所复制的容器镜像的所述指令包括使所述系统执行以下操作的指令:
至少部分地基于所述第二顾客的虚拟机实例的先前部署活动确定将所述所复制的容器镜像在高速缓存存储器中存储为已高速缓存的容器镜像;并且
将所述已高速缓存的容器镜像部署为所述软件容器以在所述至少一个虚拟机实例中执行。
23.如条款21或22所述的系统,其中通过出售容器镜像的在线市场的用户界面接收所述请求,所述在线市场由所述计算资源服务提供方托管。
24.如条款21-23中任一项所述的系统,其中所述事件触发器是运行所述软件容器的预定时间限制的期限,所述预定时间限制在交易中确定,所述交易在所述第一顾客与所述第二顾客之间通过导致所述请求被接收的用户界面进行。
25.一种计算机实现的方法,其包括:
在配置有可执行指令的一个或多个计算机系统的控制下,
接收与计算资源服务提供方的第一顾客账户相关联的软件镜像及用于识别指定事件的条件,所述软件镜像包括一组镜像层;
将所述一组镜像层存储在与所述第一顾客账户相关联的第一数据对象存储库中以形成所存储的软件镜像,所述第一数据对象存储库位于第一地理区域中;
将所述所存储的软件镜像复制到第二数据对象存储库以形成所复制的软件镜像,所述第二数据对象存储库位于与所述第一地理区域不同的第二地理区域中;
接收将所述软件镜像部署到与所述计算资源服务提供方的第二顾客账户相关联的至少一个软件实例中的请求;
将所述所复制的软件镜像部署到所述至少一个容器实例以形成所部署的软件;以及
作为识别所述指定事件的发生的结果,使所述所部署的软件变得对所述第二账户不可用。
26.如条款25所述的计算机实现的方法,其中部署所述软件镜像包括:
确定满足为所述软件镜像指定的资源需求的所述至少一个容器实例的第一实例;
将所述软件镜像部署到所述第一实例;以及
作为确定所述软件镜像到所述第一实例的部署成功的结果,将所述软件镜像部署到满足为所述软件镜像指定的资源需求的第二实例。
27.如条款25或26所述的计算机实现的方法,其中使所述所部署的软件对所述第二账户不可用包括以下项中的一项或多项:
终止部署有所述所复制的软件镜像的所述至少一个容器实例中的软件容器,
暂停部署有所述所复制的软件镜像的所述至少一个容器实例中的所述软件容器,或者
拒绝与所述第二顾客账户相关联的实体访问部署有所述所复制的软件镜像的所述至少一个容器实例中的所述软件容器。
28.如条款25-27中任一项所述的计算机实现的方法,所述方法还包括:
采集所述所部署的软件的使用信息;以及
至少部分地基于所述使用信息来为所述第二顾客账户计费和为所述第一顾客账户出资。
29.如条款25-28中任一项所述的计算机实现的方法,其中所述事件是运行所述所部署的软件的时间限制的期限,所述时间限制由与所述第一顾客账户相关联的顾客指定。
30.如条款29所述的计算机实现的方法,其中:
所述至少一个容器实例是容器实例集群的容器实例;并且
所述时间限制对应于运行所述所部署的软件的时间的总量,所述所部署的软件由运行所述所部署的软件的所述集群的每个容器实例运行。
31.如条款25-30中任一项所述的计算机实现的方法,其中作为在与所述第一账户相关联的第一顾客和与所述第二账户相关联的第二顾客之间通过在线市场进行的交易的结果来接收请求。
32.如条款31所述的计算机实现的方法,所述方法还包括,作为在所述第一顾客与所述第二顾客之间通过在线市场进行的第二交易的结果:
接收用于识别第二指定事件的条件;
在所述指定事件的所述发生之后,使所述所部署的软件变得对第二账户是可用的;以及
作为识别所述第二指定事件的发生的结果,使所述所部署的软件变得对所述第二账户不可用。
33.一个或多个非暂态计算机可读存储介质,其具有共同存储在其上的可执行指令,作为由分布式计算机系统的一个或多个处理器执行的结果,所述可执行指令使所述分布式计算机系统至少:
接收与计算资源服务提供方的第一顾客相关联的软件镜像及用于识别事件的条件,所述软件镜像包括一组层;
将所述一组层存储在第一数据存储库中以形成所存储的一组层,所述第一数据存储库物理上位于第一区域中;
将所述一组层复制到第二数据存储库以形成所复制的一组层;
启动所述所复制的一组图层作为在物理上位于第二区域中的实例中执行的容器;并且
作为识别所述事件的发生的结果,使所述容器对与所述实例相关联的实体不可用。
34.如条款33所述的一个或多个非暂态计算机可读存储介质,其中:
所述软件镜像是对应于第一容器引擎类型的第一镜像;并且
所述可执行指令还包括使所述分布式计算机系统执行以下操作的可执行指令:
至少部分地基于所述第一镜像构建对应于第二容器引擎类型的第二镜像的第二组层;并且
将所述第二组层存储在所述第一数据存储库中。
35.如条款33或34所述的一个或多个非暂态计算机可读存储介质,其中所述可执行指令还包括:进一步作为识别所述事件的所述发生的结果,使所述分布式计算机系统执行以下操作的可执行指令:
存储所述容器的当前状态;并且
作为识别第二事件的发生的结果:
将所述容器恢复到所述当前状态;并且
使所述容器对所述实体可用。
36.如条款33-35中任一项所述的一个或多个非暂态计算机可读存储介质,其中所述可执行指令还包括使所述计算机系统执行以下操作的可执行指令:
从所述实例接收第一应用编程接口请求,所述第一应用编程接口请求具有对应于第一容器引擎类型的格式;
将所述第一应用编程接口请求转换成具有对应于第二容器引擎类型的格式的第二应用编程接口请求;并且
向处理对应于所述第二容器引擎类型的所述格式的请求的服务提供所述第二应用编程接口请求。
37.如条款33-36中任一项所述的一个或多个非暂态计算机可读存储介质,其中所述可执行指令还包括使所述计算机系统执行以下操作的可执行指令:
至少部分地基于由所述实体授权的先前部署活动来做出是否至少将所述所复制的一组层存储在所述分布式计算机系统的一个或多个计算机系统的高速缓存存储器中的决定,所述分布式计算机系统物理地位于与所述第一区域不同的第二区域;并且
作为所述决定的结果,将所述一组层存储在所述高速缓存存储器中。
38.如条款37所述的一个或多个非暂态计算机可读存储介质,其中将所述复制的一组层存储在高速缓存存储器中的所述决定还至少部分地基于以下项中的一项或多项:
至少部分地取决于第一历史数据,对应于所述软件镜像的应用程序是否平均连续执行超过时间阈值的时间段,或者
至少部分地取决于第二历史数据,所述应用程序是否平均以超过频率阈值的频率启动。
39.如条款33-38中任一项所述的一个或多个计算机可读存储介质,其中:
所述可执行指令还包括使所述分布式计算机系统执行以下操作的可执行指令:
通过在线市场的接口提供购买用于下载所述镜像的许可;并且
至少部分地取决于通过与所述实体相关联的设备接受接收通过所述接口购买所述许可的选择,执行使所述分布式计算机系统启动所述所复制的一组层作为所述容器的所述可执行指令。
40.如条款39所述的一个或多个计算机可读存储介质,其中:
所述许可允许在预定持续时间内使用对应于所述一组层的软件;并且
所述事件的所述发生是所述预定持续时间的期限;并且
使所述分布式计算机系统使所述所述容器不可用的所述可执行指令包括使所述分布式计算机系统执行以下项中的一项或多项的可执行指令:
使所述分布式计算机系统终止所述容器的可执行指令,
使所述分布式计算机系统存储所述容器的当前状态的可执行指令,或
使所述分布式计算机系统阻止所述实体访问所述容器的可执行指令。
41.一种系统,其包括:
一个或多个处理器;以及
包括指令的存储器,作为由所述一个或多个处理器执行的结果,所述指令使所述系统:
接收对存储在至少一个储存库中的一组容器镜像执行扫描的请求,所述一组容器镜像的容器镜像包括存储在所述至少一个储存库中的镜像层,所述请求包括用于识别与安全漏洞相关联的镜像层的条件;并且
响应于接收所述请求:
搜索存储在结构化数据存储库的数据库中的一组清单,以获得所述镜像层的内容可寻址标识符,所述一组清单包括与所述一组容器镜像有关的元数据;
至少部分地基于所述内容可寻址标识符来确定与所述条件相匹配的镜像层;并且
将与所述条件相匹配的所述镜像层标记为不可引用;并且
作为对应于执行删除操作的时间计划表的当前时间的发生的结果:
通过分析所述一组清单来确定一个或多个未引用的镜像层,所述一个或多个未引用的镜像层是:
标记为不可引用,或
未被标记的容器镜像的清单引用;并且
删除所述一个或多个未引用的镜像层。
42.如条款41所述的系统,其中:
所述条件是指定的内容可寻址标识符;
所述请求是搜索所述内容可寻址标识符以查找所述指定的内容可寻址标识符的发生的请求;并且
使所述系统确定与所述条件相匹配的所述镜像层的所述指令包括使所述系统至少部分地基于所述内容可寻址标识符来确定来自具有与所述指定的内容可寻址标识符相匹配的内容可寻址标识符的层的所述镜像层的指令。
43.如条款41或42所述的系统,其中:
所述条件是数字指纹;
所述请求是搜索所述镜像层中的一个或多个文件以查找所述数字指纹的发生的请求;并且
使所述系统确定与所述条件相匹配的所述镜像层的所述指令包括使所述系统通过识别其中至少一个文件具有所述数字指纹的所述发生的所述镜像层的一个或多个层来确定所述镜像层的指令,识别的所述一个或多个层形成所述镜像层。
44.如条款41-43中任一项所述的系统,其中将所述镜像层标记为不可引用:
使标记为不可引用的所述镜像层对托管所述系统的计算资源服务提供方的顾客是不可访问的;并且
阻止所述系统启动包括标记为不可引用的所述镜像层的层的容器镜像。
45.一种计算机实现的方法,其包括:
在配置有可执行指令的一个或多个计算机系统的控制下,
接收扫描软件镜像以查找与指定要求的匹配的请求,所述软件镜像包括存储在分配给账户的数据对象存储库中的镜像层;
搜索结构化数据存储库中的元数据以获得所述镜像层的一组标识符,所述结构化数据存储库与所述数据对象存储库不同;
至少部分地基于所述一组标识符来确定所述镜像层的第一组与所述指定条件的匹配相关联;
将所述镜像层的所述第一组标记为不可引用;
检测触发删除不可引用的软件镜像层的事件的发生;
通过分析所述元数据来确定所述镜像层的一组不可引用层,所述一组不可引用层包括所述镜像层的所述第一组,并且所述镜像层的第二组包括存储在所述数据对象存储库中与未标记的软件镜像相关联的镜像层;以及
删除所述一组不可引用的层。
46.如条款45所述的计算机实现的方法,其中:
所述镜像层作为加密的镜像层存储在所述数据对象存储库中;并且
确定所述镜像层的所述第一组与所述指定条件的所述匹配相关联包括:
从与所述账户相关联的实体获得解密密钥;
使用所述解密密钥解密所述加密的镜像层以形成解密的镜像层;以及
从与所述指定条件的所述匹配相关联的所述解密的镜像层的一个或多个层确定所述镜像层的所述第一组。
47.如条款45或46所述的计算机实现的方法,其中:
分配给所述账户的所述数据对象存储库由计算资源服务提供方保持,所述计算资源服务提供方将所述软件镜像提供给所述计算资源服务提供方的一个或多个顾客;并且
作为确定所述镜像层的所述第一组与所述指定的条件的所述匹配相关联的结果,所述方法还包括:
确定具有实例的所述一个或多个顾客的组,所述软件镜像已经在所述实例中启动;以及
通知所述一个或多个顾客的所述组在所述软件镜像中发现的潜在漏洞。
48.如条款45-47中任一项所述的计算机实现的方法,其中确定所述一组不可引用层包括:
搜索所述结构化数据存储库的所述元数据以查找与标记的软件镜像不相关联的所述镜像层的一个或多个层;以及
为了删除,标识所述一个或多个层为所述第二组层。
49.如条款45-48中任一项所述的计算机实现的方法,其中所述事件是指令或时钟事件中的一个,所述指令来自与所述账户相关联的实体并通过应用编程接口接收;其中当前时间对应于用于执行删除操作的预定时间表。
50.如条款45-49中任一项所述的计算机实现的方法,其中所述元数据包括所述软件镜像的清单,针对所述镜像层的每个镜像层,所述清单包括唯一对应于所述镜像层的内容可寻址标识符和用于验证所述镜像层的完整性的校验和。
51.如条款45-50中任一项所述的计算机实现的方法,其中:
所述数据对象存储库包括与所述帐户相关联的一组储存库;
所述方法还包括:
通过应用编程接口接收对所述扫描的所述一组储存库中的一个或多个储存库的选择的指示,所述指示来自与所述账户相关联的计算资源服务提供方的顾客;并且
确定所述镜像层的所述第一组与所述指定条件的所述匹配相关联还包括从存储在所述一个或多个储存库中的所述镜像层的镜像层确定所述镜像层的所述第一组。
52.如条款45-51中任一项所述的计算机实现的方法,其中:
所述方法还包括通过应用编程接口从顾客接收针对所述扫描的一个或多个级别的漏洞的指示;并且
确定所述镜像层的所述第一组与所述指定条件的所述匹配相关联还包括确定所述指定条件的所述匹配与顾客所指示的所述一个或多个级别的漏洞相关联。
53.一个或多个非暂态计算机可读存储介质,其具有共同存储在其上的可执行指令,作为由分布式计算机系统的一个或多个处理器执行的结果,所述可执行指令使所述分布式计算机系统至少:
接收扫描软件镜像以查找指定条件的请求,所述软件镜像包括存储在第一数据存储库中的层;
搜遍第二数据存储中的元数据以获得对应于所述软件镜像的信息,所述第二数据存储库与所述第一数据存储库不同;
至少部分地基于所述信息来确定与对所述指定条件相匹配的所述层的第一组;
将所述层的所述第一组标记为不可引用;并且
与满足所述请求异步:
至少部分地基于所述元数据来确定待删除的所述层的第二组,所述层的所述第二组包括标记为不可引用的层;并且
删除所述层的所述第二组。
54.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款53所述,其中所述可执行指令还包括使所述分布式计算机系统执行以下操作的可执行指令:
至少部分地基于所述元数据来从所述层的一个或多个层确定未链接到具有标签的镜像的第三组层;并且
删除所述第三组层。
55.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款53或54所述,其中触发所述分布式计算机系统来确定待删除的所述层的所述第二组的事件是以下之一:
从与托管所述分布式计算机系统的计算资源服务提供方的顾客相关联的设备接收清除所述顾客的储存库的应用编程接口请求,所述储存库位于所述第二数据存储库中,
从与所述顾客相关联的所述设备接收从所述储存库中删除所述软件镜像的特定版本的应用编程接口请求,或
对应于用于执行垃圾收集的预定义时间表的当前时间的发生。
56.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款53-55中任一项所述,其中所述可执行指令还包括使所述分布式计算机系统响应于接收第二请求来启动所述软件镜像以作为实例中的软件容器运行的可执行指令:
做出所述层是否包括已经标记为不可引用层的决定;并且
至少部分基于所述决定,拒绝所述第二请求。
57.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款53-56中任一项所述,其中:
所述第一数据存储库是将所述层存储为一组数据对象的数据对象存储库;并且
所述第二数据存储库是结构化数据存储库,其托管用于存储与镜像有关的元数据的可扩缩的、分布式数据库。
58.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款57所述,其中:
所述指定条件包括层的至少一个指定的内容可寻址标识符;并且
使所述分布式计算机系统确定所述层的所述第一组的所述可执行指令包括使所述分布式计算机系统执行以下操作的指令:
搜索所述第二数据存储库的所述元数据以查找具有与所述至少一个指定的内容可寻址标识符相匹配的内容可寻址标识符的所述一组层的一个或多个层;并且
将所述一个或多个层识别为所述层的所述第一组。
59.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款53-58中任一项所述,其中:
所述指定条件包括用于识别层中一个或多个文件的参考条件;并且
使所述分布式计算机系统确定所述层的所述第一组的所述可执行指令包括使所述分布式计算机系统执行以下操作的可执行指令:
从所述第一数据存储库获得所述软件镜像;
打开所述软件镜像的所述层以形成所打开的层;并且
至少部分地从所述所打开的层的层确定所述层的所述第一组,所述打开的层包含与所述参考条件相匹配的一个或多个文件。
60.包括耦合到存储器的一个或多个处理器的所述系统,所述存储器如条款59所述,其中:
所述软件镜像作为加密的软件镜像存储在所述第一数据存储库中;并且
使所述分布式计算机系统确定所述层的所述第一组的所述可执行指令包括使所述分布式计算机系统执行以下操作的可执行指令:
使用在实体与所述分布式计算机系统之间共享的密码密钥来解密所述加密的软件镜像以形成解密的层,所述实体通过由托管所述分布式计算机系统的计算资源服务提供方托管的账户来与所述加密的软件镜像相关联;并且
至少部分地从所述解密的层的层确定所述层的所述第一组,所述解密的层包含与所述参考条件相匹配的一个或多个文件。
本公开的各种实施方案利用本领域技术人员可能熟悉的网络来支持使用多种可商购获得的协议中的任一种进行通信,所述协议诸如传输控制协议/互联网协议(“TCP/IP”)、用户数据报协议(“UDP”)、在开放系统互连(“OSI”)模型的各个层中操作的协议、文件传送协议(“FTP”)、通用即插即用(“UpnP”)、网络文件系统(“NFS”)、公共互联网文件系统(“CIFS”)以及AppleTalk。网络1704可以是(例如)局域网、广域网、虚拟专用网、互联网、内部网、外部网、公共交换电话网、红外网、无线网、卫星网络以及上述网络的任何组合。在一些实施方案中,面向连接的协议可用于在网络端点之间通信。面向连接的协议(有时称为基于连接的协议)能够以排序流的形式传输数据。面向连接的协议可以是可靠的或不可靠的。例如,TCP协议是可靠的面向连接的协议。异步传输模式(“ATM”)和帧中继是不可靠的面向连接的协议。面向连接的协议与面向分组的协议(诸如UDP)不同,面向分组的协议在不保证排序的情况下传输分组。
在利用web服务器的实施方案中,web服务器可运行多种服务器或中间层级应用程序中的任一种,包括超文本传送协议(“HTTP”)服务器、FTP服务器、通用网关接口(“CGI”)服务器、数据服务器、Java服务器、Apache服务器和业务应用服务器。所述服务器还可以能够响应于来自用户装置的请求而执行程序或脚本,诸如通过执行一个或多个可实现为一个或多个以任何编程语言(诸如
Figure BDA0001693035890000701
C、C#或C++)或任何脚本语言(诸如Ruby、PHP、Perl、Python或TCL)及其组合编写的脚本或程序的web应用程序。服务器还可包括数据库服务器,包括那些可从
Figure BDA0001693035890000702
Figure BDA0001693035890000703
商购获得的服务器以及开源服务器(诸如MySQL、Postgres、SQLite、MongoDB),以及能够存储、检索和访问结构化或非结构化数据的任何其他服务器。数据库服务器可包括基于表格的服务器、基于文档的服务器、非结构化服务器、关系型服务器、非关系型服务器或这些和/或其他数据库服务器的组合。
环境可包括如上文所讨论的多种数据存储库以及其他存储器和存储介质。这些可驻留在多种位置中,诸如在一个或多个计算机本地(和/或驻留在一个或多个计算机中)的存储介质上,或远离网络1704上的计算机中的任何或所有计算机。在一组特定实施方案中,信息可驻留在本领域技术人员熟悉的存储区域网(“SAN”)中。类似地,用于执行属于计算机、服务器或其他网络装置的功能的任何必要的文件可视情况存储在本地或远程。在系统包括计算机化装置的情况下,每个此类装置可包括可通过总线电耦合的硬件元件,所述元件包括例如中央处理单元(“CPU”或“处理器”)、输入装置(例如,鼠标、键盘、控制器、触摸屏或小键盘)和输出装置(例如,显示装置、打印机或扬声器)。此类系统还可包括一个或多个存储装置,诸如磁盘驱动器、光存储装置和固态存储装置(诸如随机存取存储器(“RAM”)或只读存储器(“ROM”)),以及可移动介质装置、存储卡、闪存卡等。
此类装置还可包括计算机可读存储介质读取器、通信装置(例如,调制解调器、无线或有线网卡、红外线通信装置等)和工作存储器,如上文所描述的。计算机可读存储介质读取器可与计算机可读存储介质连接或被配置来接收计算机可读存储介质,计算机可读存储介质表示远程、本地、固定和/或可移动存储装置以及用于临时和/或更永久地包含、存储、发射和检索计算机可读信息的存储介质。系统和各种设备通常还将包括位于工作存储器设备内的多个软件应用程序、模块、服务或其他元件,包括操作系统和应用程序,诸如客户端应用程序或web浏览器。例如,也可使用定制硬件,并且/或者特定元件可以硬件、软件(包括可移植软件,诸如小应用程序)或两者来实现。此外,可以采用与其他计算设备(诸如网络输入/输出设备)的连接。
用于包含代码或部分代码的存储介质和计算机可读介质可包括本领域已知或已使用的任何适当介质,包括存储介质和通信介质,诸如以用于存储和/或传输信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术所实现的易失性和非易失性、可移动和不可移动的介质,包括RAM、ROM、电可擦除可编程只读存储器(“EEPROM”)、闪存或其他存储器技术、光盘只读存储器(“CD-ROM”)、数字通用光盘(DVD)或其他光学存储装置、磁盒、磁带、磁盘存储装置或其他磁性存储装置,或可用于存储所需信息且可由系统装置访问的任何其他介质。基于所提供的公开和教导内容,本领域普通技术人员将了解用于实现各种实施方案的其他方式和/或方法。
因此,应以例示性意义而不是限制性意义来理解本说明书和附图。然而,将显而易见的是:在不脱离如权利要求书中阐述的本发明的更广泛的精神和范围的情况下,可对本发明做出各种修改和改变。
其他变型在本公开的精神内。因此,虽然所述技术可容许各种修改和替代构造,但在附图中已示出并且在上文中详细描述所示的其特定实施方案。然而,应当理解,并不意图将本发明局限于所公开的一种或多种具体形式,但相反,意图涵盖落在本发明的精神和范围内的所有修改、替代构造和等效物,如所附权利要求书中所限定。
在描述实施方案的上下文中(尤其是在以下权利要求书的上下文中),术语“一个(a/an)”和“所述”以及类似指称对象的使用应解释为涵盖单数和复数两者,除非本文另外指明或以其他方式明显地与上下文矛盾。术语“包括(comprising)”、“具有”、“包括(including)”和“含有”意图解释为开放式的术语(即,意味着“包括但不限于”)除非另外指明。在无修饰并且指代物理连接的情况下,术语“连接的”应解释为部分地或全部地纳入在以下解释内:附接到或连结在一起,即使存在介入物。除非另外指明,值范围的列举仅仅意图用作单独地表示落入所述范围的各单独值的速记方法,并且犹如所单独描述地那样将各单独值并入本说明书中。除非另外指明或与上下文矛盾,否则术语“集”(例如,“项目集”)或“子集”的使用解释为包括一个或多个成员的非空集合。此外,除非另外指明或与上下文矛盾,否则术语对应集的“子集”不一定指对应集的真子集,而是子集和对应集可以相等。
连接性语言,诸如“A、B和C中的至少一个”或“A、B和C中的至少一个”形式的短语,如一般情况下所使用,根据上下文理解来表示:项目、项等可以是A或B或C、或A和B和C的集的任何非空子集,除非另外特别指明或以其他方式明显地与上下文矛盾。例如,在具有三个成员的集的例示性实施例中,连接性短语“A、B和C中的至少一个”和“A、B和C中的至少一个”是指以下集中的任一集:{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}。因此,此类连接性语言一般并非意图暗示某些实施方案需要A中的至少一个、B中的至少一个以及C中的至少一个分别存在。
可按任何合适的顺序来执行所描述的过程的操作,除非另外指明或以其他方式明显地与上下文矛盾。所描述的过程(或者变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下实行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或者一个或多个应用程序)、由硬件或其组合来实现。代码可以(例如)计算机程序的形式存储在计算机可读储存介质上,所述计算机程序包括可由一个或多个处理器执行的指令。计算机可读存储介质可以是非暂态的。此外,在一些实施例中,计算机系统被配置来实现共同执行本文所描述的过程的操作的一个或多个服务。此类计算机系统可被配置(例如)带有能够执行操作的适用的硬件和/或软件。此外,实现本公开的各种实施方案的计算机系统,在一些实施例中,可以是单个设备,并且在其他实施例中,可以是包括不同操作的多个设备的分布式计算机系统,使得分布式计算机系统执行本文所描述的操作。
所提供的任何实例或示例性语言(例如,“诸如”)的使用仅意图更好地说明本发明的实施方案,并且除非另外要求,否则不会对本发明的范围施加限制。本说明书中的语言不应解释为将任何非要求的元素指示为实践本发明所必需。
本文中描述了本公开的实施方案,其包括发明人已知用于执行本发明的最佳模式。在阅读了上述描述后,这些所述实施方案的变化对本领域的技术人员将变得显而易见。发明人希望技术人员视情况采用此类变型,并且发明人意图以不同于如具体描述的方式来实践本公开的实施方案。因此,经适用的法律许可,本公开的范围包括在此所附的权利要求书中叙述的主题的所有修改和等效物。此外,本公开的范围涵盖其所有可能变型中的上述元素的任意组合,除非另外指明或以其他方式明显地与上下文矛盾。
所引用的所有参考文件,包括公开案、专利申请和专利,特此按如下程度以引用方式并入:如同每一个参考文件都个别地和特别地表示为以引用方式并入并且其全部内容都进行了陈述。

Claims (15)

1.一种计算机实现的方法,所述方法包括:
在配置有可执行指令的一个或多个计算机系统的控制下,
接收将包括一组镜像层的软件镜像存储在分配给由计算资源服务提供方保持的账户的数据对象存储库中的第一请求,所述第一请求包括至少部分地可用于认证所述第一请求的令牌;以及
作为确定所述令牌是真实且有效的以授权满足第一请求的结果:
将所述一组镜像层存储在与所述账户相关联的所述数据对象存储库中以形成所存储的软件镜像;
将与所述软件镜像有关的元数据存储在与所述数据对象存储库不同的结构化存储装置中;
接收将所述软件镜像部署到一个或多个容器实例的第二请求;
至少部分地基于所述结构化存储装置中的所述元数据从所述数据对象存储库获得所述所存储的软件镜像;以及
根据所述第二请求将所述所存储的软件镜像部署在所述一个或多个容器实例中。
2.如权利要求1所述的计算机实现的方法,其中:
所述一个或多个容器实例正在执行软件应用程序;
所述第二请求根据预定义的部署方案从自动化构建服务接收,所述预定义的部署方案指定自动地部署所述软件应用程序的最新版本以替换所述软件应用程序的先前版本;并且
所述方法还包括:作为根据所述预定义的部署方案确定所述软件镜像是所述软件应用程序的所述最新版本的镜像并且在所述一个或多个容器实例中执行的所述软件应用程序是先前版本的结果:
终止所述一个或多个容器实例中的所述软件应用程序的所述先前版本的执行;以及
启动所述软件镜像以在所述一个或多个容器实例中执行。
3.如权利要求1所述的计算机实现的方法,其中所述第二请求通过应用编程接口从与所述计算资源服务提供方的顾客相关联的设备接收。
4.如权利要求1所述的计算机实现的方法,其中确定所述令牌是真实且有效的包括:
使用在与所述账户相关联的实体与所述计算资源服务提供方之间作为秘密共享的密钥来解密所述令牌以形成一组凭据和限制;
认证所述一组凭据是与所述实体相关联的凭据;
确定所述实体被授权来将所述软件镜像存储在所述数据对象存储库中;以及
至少部分地基于所述限制来确定所述令牌是有效的。
5.如权利要求1所述的计算机实现的方法,所述方法还包括:
从所述一个或多个容器实例接收对应于第一容器引擎类型的第一应用编程接口请求,所述软件镜像被部署到所述一个或多个容器实例;
将所述第一应用编程接口请求转换成具有对应于第二容器引擎类型的格式的第二应用编程接口请求;以及
向处理对应于所述第二容器引擎类型的所述格式的请求的服务提供所述第二应用编程接口请求。
6.如权利要求1所述的计算机实现的方法,其中:
所述方法还包括将所述软件镜像转换成包括第二组镜像层的第二容器引擎类型的第二软件镜像;并且
存储所述一组镜像层包括将对应于所述第二软件镜像的所述第二组镜像层存储在所述数据对象存储库中以形成所存储的软件镜像。
7.如权利要求1所述的计算机实现的方法,其中:
所述第一请求包括所述软件镜像的构建工件;并且
所述方法还包括:
将所述构建工件存储在受管理的资源控制服务;以及
从所述构建工件构建所述软件镜像的所述一组镜像层。
8.如权利要求7所述的计算机实现的方法,所述方法还包括:依赖于成功地构建所述一组镜像层,根据与所述账户相关联的个体所指定的部署策略,调度所述所存储的软件镜像到所述一个或多个实例的部署。
9.一种包括耦合到存储器的一个或多个处理器的系统,所述存储器具有共同存储在其上的可执行指令,作为由所述系统的所述一个或多个处理器执行的结果,所述可执行指令使所述系统至少:
接收将软件镜像存储在与计算资源服务提供方的顾客相关联的第一数据存储库中的请求,所述请求包括存储所述软件镜像的一组层;并且
作为包括在所述请求中的安全令牌的成功认证的结果:
至少部分地基于从第二数据存储库获得的第一元数据来确定先前未被存储在所述第一数据存储库中的所述软件镜像的层的子集;
将所述层的子集存储在所述第一数据存储库中;
将与存储在所述第一数据存储库中的所述层的子集有关的第二元数据存储在所述第二数据存储库中;并且
至少部分地基于所述层的子集使所述软件镜像在实例的软件容器中启动。
10.如权利要求9所述的系统,其中:
所述请求包括所述软件镜像的至少一个构建工件;并且
使所述系统接收所述请求的所述可执行指令包括使所述系统执行以下操作的指令:
将所述至少一个构建工件存储在受管理的资源控制服务;并且
从所述至少一个构建工件构建所述软件镜像的所述一组层。
11.如权利要求9所述的系统,其中:
所述第一数据存储库位于第一区域中;
所述实例托管在物理上位于第二区域的计算机 系统上;并且
使所述系统使所述软件镜像启动的所述可执行指令还包括使所述系统执行以下操作的可执行指令:
确定所述实例正在运行所述软件镜像的先前版本;
确定所述软件镜像是所述软件镜像的最新版本;
将所述层的子集从所述第一数据存储库复制到第二数据存储库以形成所复制的软件镜像,所述第二数据存储库托管在物理上位于所述第二区域中的计算机 系统上;并且
至少部分地基于所述所复制的镜像使所述软件镜像在所述软件容器中启动。
12.如权利要求9所述的系统,其中所述可执行指令还包括使所述系统依赖于确定所述软件镜像在所述实例的所述软件容器中成功启动使所述软件镜像在与所述顾客相关联的第二实例的第二软件容器中启动的可执行指令。
13.如权利要求9所述的系统,其中:
所述第一数据存储库保持与标签相关联的软件应用程序的第一版本;
所述软件镜像是软件应用程序的第二版本;并且
所述可执行指令还包括使所述系统执行以下操作的可执行指令:作为接收将所述标签与所述软件镜像的所述第二版本相关联的第二请求的结果:
取消所述标签与所述第一版本的关联;并且
将所述标签与所述第二版本相关联。
14.如权利要求9所述的系统,其中使所述系统存储层的所述子集的所述可执行指令包括使所述系统执行以下操作的可执行指令:
扫描所述层的子集以查找与一个或多个指定的条件的匹配;并且
至少部分地根据未找到与所述一个或多个指定条件的所述匹配将所述层的子集存储在所述第一数据存储库中。
15.如权利要求9所述的系统,其中使所述系统使所述软件镜像启动的所述可执行指令包括使所述系统执行以下操作的可执行指令:
从所述第一数据存储库获得所述软件镜像以形成所获得的软件镜像;
打开所述所获得的软件镜像以形成所打开的软件镜像;
扫描所述所打开的软件镜像以查找与一个或多个指定的条件的匹配;并且
至少部分地根据未找到与所述一个或多个指定条件的匹配在所述实例的所述软件容器中启动所述所打开的软件镜像。
CN201680072795.4A 2015-12-18 2016-12-16 软件容器注册表服务 Active CN108369622B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US14/975,627 US10002247B2 (en) 2015-12-18 2015-12-18 Software container registry container image deployment
US14/975,631 2015-12-18
US14/975,637 US10032032B2 (en) 2015-12-18 2015-12-18 Software container registry inspection
US14/975,637 2015-12-18
US14/975,627 2015-12-18
US14/975,631 US10261782B2 (en) 2015-12-18 2015-12-18 Software container registry service
PCT/US2016/067292 WO2017106726A1 (en) 2015-12-18 2016-12-16 Software container registry service

Publications (2)

Publication Number Publication Date
CN108369622A CN108369622A (zh) 2018-08-03
CN108369622B true CN108369622B (zh) 2021-11-05

Family

ID=58191560

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680072795.4A Active CN108369622B (zh) 2015-12-18 2016-12-16 软件容器注册表服务

Country Status (3)

Country Link
EP (2) EP3798877A1 (zh)
CN (1) CN108369622B (zh)
WO (1) WO2017106726A1 (zh)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109309693B (zh) * 2017-07-26 2022-04-29 财付通支付科技有限公司 基于docker的多服务系统、部署方法及装置、设备及存储介质
EP3665566A4 (en) 2017-08-08 2021-04-21 Crypto4A Technologies Inc. SECURE MACHINE-EXECUTED CODE DEPLOYMENT AND EXECUTION PROCESS AND SYSTEM
CN107766126B (zh) * 2017-11-15 2023-01-13 腾讯科技(深圳)有限公司 容器镜像的构建方法、系统、装置及存储介质
US10606805B2 (en) 2017-11-16 2020-03-31 Red Hat, Inc. Object-level image query and retrieval
US10956563B2 (en) * 2017-11-22 2021-03-23 Aqua Security Software, Ltd. System for securing software containers with embedded agent
EP3579597A1 (en) * 2018-06-04 2019-12-11 Gemalto Sa Method for securely pulling a container image to a local registry of a node
CN110912955B (zh) * 2018-09-17 2022-04-05 阿里巴巴集团控股有限公司 容器镜像下载、上传方法及装置
CN110058923B (zh) * 2019-03-29 2021-03-26 华中科技大学 一种基于动态预取策略的Docker容器COW机制优化方法及系统
CN114600082A (zh) 2019-05-23 2022-06-07 微软技术许可有限责任公司 具有联合文件系统层装载的容器实例化
CN110442421B (zh) * 2019-06-28 2022-04-01 中国科学院计算技术研究所 一种基于Kubernetes的通用服务转换方法及系统
CN110427342B (zh) * 2019-07-09 2022-05-24 苏州浪潮智能科技有限公司 一种创建镜像库的方法、设备及可读介质
US11669246B2 (en) 2019-08-19 2023-06-06 International Business Machines Corporation Storage allocation enhancement of microservices
US11099882B2 (en) 2019-09-26 2021-08-24 International Business Machines Corporation Container optimization through automatic layer suggestions
US11561706B2 (en) 2019-11-20 2023-01-24 International Business Machines Corporation Storage allocation enhancement of microservices based on phases of a microservice run
US11822947B2 (en) 2019-11-27 2023-11-21 Amazon Technologies, Inc. Automated management of machine images
CN111209082B (zh) * 2020-01-06 2023-04-07 暨南大学 一种基于关联度的Docker容器注册表预取方法
CN111209087B (zh) * 2020-01-15 2024-01-30 南京中新赛克科技有限责任公司 一种基于Docker的大数据学习平台搭建方法
CN111859392A (zh) * 2020-07-14 2020-10-30 苏州浪潮智能科技有限公司 一种镜像管控方法、装置、设备及存储介质
US11474873B2 (en) * 2020-09-22 2022-10-18 Rockwell Automation Technologies, Inc. Implementing serverless functions using container orchestration systems and operational technology devices
CN112182563B (zh) * 2020-09-28 2023-04-07 邢韬 一种linux系统Bash安全防护方法
KR102380434B1 (ko) * 2020-10-06 2022-03-31 숭실대학교 산학협력단 도커 파일 분석을 수행하는 도커 이미지 취약점 검사 장치 및 방법
CN113760442A (zh) * 2020-10-19 2021-12-07 北京沃东天骏信息技术有限公司 一种应用的运行和访问方法、装置及设备
US11922158B2 (en) * 2021-06-25 2024-03-05 Intigua, Inc. Unified local patch repository
CN113885790B (zh) * 2021-08-29 2023-06-16 苏州浪潮智能科技有限公司 一种磁盘阵列响应方法、系统、存储介质及设备
KR20230041361A (ko) * 2021-09-17 2023-03-24 한국전자통신연구원 도커 이미지 생성 장치 및 방법
US11966723B2 (en) * 2021-12-06 2024-04-23 Sap Se Automatic management of applications in a containerized environment
US20230259347A1 (en) * 2022-02-11 2023-08-17 Micro Focus Llc Container based generation of inputs for generic functions
EP4328772A1 (de) * 2022-08-26 2024-02-28 Siemens Aktiengesellschaft Kaskadiert signierbares artefakt einer container-instanz
US11947342B1 (en) * 2022-09-19 2024-04-02 Rockwell Automation Technologies, Inc. Container registry and subscription service for industrial systems
CN115879862A (zh) * 2023-03-08 2023-03-31 广州嘉为科技有限公司 一种制品安全管控方法、装置及存储介质
CN117312222B (zh) * 2023-11-29 2024-05-21 博思数采科技股份有限公司 一种基于spi的政府采购方法、系统、设备和介质
CN117931812B (zh) * 2024-03-25 2024-06-07 北京大数据先进技术研究院 一种面向数据空间的数字对象元注册表系统及搜索方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101470621A (zh) * 2007-12-28 2009-07-01 埃森哲环球服务有限公司 虚拟机配置系统
CN104899047A (zh) * 2015-06-25 2015-09-09 广州杰赛科技股份有限公司 网页框架部署方法和系统
WO2015164521A1 (en) * 2014-04-23 2015-10-29 Intralinks, Inc. Systems and methods of secure data exchange

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6384709B2 (en) * 1997-05-30 2002-05-07 Intellikey Corporation Access control system for mobile platform using electronic key-embedded location verification data
US7284054B2 (en) * 2003-04-11 2007-10-16 Sun Microsystems, Inc. Systems, methods, and articles of manufacture for aligning service containers
US8601467B2 (en) * 2006-10-03 2013-12-03 Salesforce.Com, Inc. Methods and systems for upgrading and installing application packages to an application platform
US8468356B2 (en) * 2008-06-30 2013-06-18 Intel Corporation Software copy protection via protected execution of applications
US8495356B2 (en) * 2010-12-31 2013-07-23 International Business Machines Corporation System for securing virtual machine disks on a remote shared storage subsystem
US8412945B2 (en) * 2011-08-09 2013-04-02 CloudPassage, Inc. Systems and methods for implementing security in a cloud computing environment
US9372827B2 (en) * 2011-09-30 2016-06-21 Commvault Systems, Inc. Migration of an existing computing system to new hardware
US9973566B2 (en) * 2013-11-17 2018-05-15 Nimbix, Inc. Dynamic creation and execution of containerized applications in cloud computing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101470621A (zh) * 2007-12-28 2009-07-01 埃森哲环球服务有限公司 虚拟机配置系统
WO2015164521A1 (en) * 2014-04-23 2015-10-29 Intralinks, Inc. Systems and methods of secure data exchange
CN104899047A (zh) * 2015-06-25 2015-09-09 广州杰赛科技股份有限公司 网页框架部署方法和系统

Also Published As

Publication number Publication date
EP3391270A1 (en) 2018-10-24
EP3391270B1 (en) 2020-10-07
EP3798877A1 (en) 2021-03-31
WO2017106726A1 (en) 2017-06-22
CN108369622A (zh) 2018-08-03

Similar Documents

Publication Publication Date Title
CN108369622B (zh) 软件容器注册表服务
US11789723B2 (en) Software container registry service
US10032032B2 (en) Software container registry inspection
US10002247B2 (en) Software container registry container image deployment
US10644881B2 (en) Unified management of cryptographic keys using virtual keys and referrals
US9430211B2 (en) System and method for sharing information in a private ecosystem
US11790077B2 (en) Methods, mediums, and systems for establishing and using security questions
US10587697B2 (en) Application-specific session authentication
US8539231B1 (en) Encryption key management
US9076004B1 (en) Systems and methods for secure hybrid third-party data storage
JP5635978B2 (ja) 人間が介入しないアプリケーションのための認証されたデータベース接続
WO2022237123A1 (zh) 一种获取区块链数据的方法、装置、电子设备及存储介质
US8977857B1 (en) System and method for granting access to protected information on a remote server
US10630722B2 (en) System and method for sharing information in a private ecosystem
US10326731B2 (en) Domain name service information propagation
US10645073B1 (en) Systems and methods for authenticating applications installed on computing devices
US11363012B1 (en) System and methods for using role credentials associated with a VM instance
US20180152434A1 (en) Virtual content repository
WO2023072817A1 (en) Control of access to computing resources implemented in isolated environments
US20230205908A1 (en) Protected storage for decryption data
US12010227B1 (en) System and methods for securing role credentials
CN116155528A (zh) 用于系统管理的云密钥管理

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