A container-based processing environment enables a customer of a serverless computing environment (sometimes referred to as a serverless container service, a serverless environment, and/or a serverless architecture) to provide an application-specific image to be executed by the serverless computing environment or a similar environment securely and in a cost-effective manner. Such environments provide a way to run applications securely isolated in a container, such as by running an application container in the serverless computing environment. A container may consist of an application, user-added files, and/or metadata for an application. Each container may be built from an image, which may specify what the container holds, what process to run when the container is launched, and a variety of other configuration data. The image may be a read-only template from which the container is launched. The image may consist of a series of layers and may be built from one or more base images. A container-based processing environment may execute an application by creating a container based on an image and begin servicing customer requests, accordingly.
Some implementations described herein relate to a system for rehydrating a universal container base image in a container-based processing environment. The system may include one or more memories and one or more processors communicatively coupled to the one or more memories. The one or more processors may be configured to receive a universal container base image, the universal container base image including a first set of instructions associated with an operating system associated with multiple applications. The one or more processors may be configured to receive an application-specific code separate from the universal container base image, the application-specific code including a second set of instructions associated with an application, of the multiple applications. The one or more processors may be configured to execute the application based on at least the first set of instructions included in the universal container base image and the second set of instructions included in the application-specific code. The one or more processors may be configured to receive an updated universal container base image, the updated universal container base image including a third set of instructions associated with an updated operating system associated with the multiple applications. The one or more processors may be configured to execute the application based on at least the second set of instructions included in the application-specific code and the third set of instructions included in the updated universal container base image.
Some implementations described herein relate to a method for executing an application binary file. The method may include receiving, by a container processing device, a universal container base image, the universal container base image including a first set of instructions associated with an operating system associated with multiple applications. The method may include creating, by the container processing device, a container based on the first set of instructions included in the universal container base image. The method may include receiving, by the container processing device, an application-specific code separate from the universal container base image, the application-specific code including a second set of instructions associated with an application, of the multiple applications. The method may include injecting, by the container processing device, the second set of instructions into the container during a runtime of the container. The method may include executing, by the container processing device, the application based on at least the first set of instructions included in the container and the second set of instructions included in the container.
Some implementations described herein relate to a non-transitory computer-readable medium that stores a set of instructions. The set of instructions, when executed by one or more processors of a container processing device, may cause the container processing device to receive a universal container base image, the universal container base image including a first set of instructions associated with an operating system associated with multiple applications. The set of instructions, when executed by one or more processors of the container processing device, may cause the container processing device to create a container based on the first set of instructions included in the universal container base image. The set of instructions, when executed by one or more processors of the container processing device, may cause the container processing device to receive an application-specific code separate from the universal container base image, the application-specific code including a second set of instructions associated with an application, of the multiple applications. The set of instructions, when executed by one or more processors of the container processing device, may cause the container processing device to inject the second set of instructions into the container during a runtime of the container. The set of instructions, when executed by one or more processors of the container processing device, may cause the container processing device to execute the application based on at least the first set of instructions included in the container and the second set of instructions included in the container.
Some implementations described herein relate to creating an updatable universal container base image. The method may include creating, by a container image management device, a universal container base image, wherein the universal container base image includes a first set of instructions associated with an operating system associated with multiple applications. The method may include depositing, by the container image management device, the universal container base image in a container image repository. The method may include creating, by the container image management device, an application binary file separate from the universal container base image, wherein the application binary file includes a second set of instructions associated with an application, of the multiple applications, and wherein the application binary file is configured to be injected into a container associated with the universal container base image during a runtime of the container. The method may include depositing, by the container image management device, the application binary file in a binary file repository.
The following detailed description of example implementations refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements.
Container-based processing environments enable secure processing of applications in a serverless computing environment or a similar environment. An application developer may provide an application-specific image, such an application-specific container image (e.g., an application-specific Docket image) or a similar image, to be run in the container-based processing environment. Docker is an open platform for developing, shipping, and running applications that enables developers to package and run an application in a loosely isolated environment called a container. Docker and similar platforms provide isolation and security to allow a serverless computing environment or a similar platform to run many containers simultaneously on a given host. Containers are lightweight and contain everything needed to run the application, so that developers do not need to rely on what is currently installed on the host. For example, a container may include an operating system (OS) layer, an application language library layer, an application code layer (e.g., a binary file), among other layers, that are used to execute the application within the container and/or independent of host software and/or OSs.
In some examples, as part of a container-based processing architecture (e.g., a Docker-based architecture), a customer of a serverless computing environment (e.g., an application team) builds their application code and creates an application binary file (e.g., a .jar file or a .zip file) as part of their continuous improvement/continuous development (CI/CD) pipeline. The customer may put the application binary inside a container image, resulting in an application-specific container image. The customer may hand the application-specific container image over to a serverless computing environment hosting provider or a similar provider, such as Amazon Web Services (AWS) Serverless Fargate, or a similar provider. The serverless computing environment hosting provider may load the application-specific container image to create a container to serve a request from a user of the application. Accordingly, in such examples, the responsibility of a customer of the serverless computing environment (e.g., an application development team) is to create an application-specific container image, while the responsibility of serverless computing environment hosting provider or a similar provider is to load the application-specific container image and/or to run the application-specific container to serve user requests.
In some examples, an application-specific container image may need to be updated, such as when a vulnerability arises in an OS associated with the application (e.g., an OS layer of the application-specific container image). In some examples, updating an OS layer of the application-specific container image or a similar application-specific container image may be referred to as rehydrating the OS layer of the image. Moreover, in some examples, the OS layer may be associated with a base image, which is an image upon which multiple applications may be built, such as by adding application-specific code and/or an application binary to the base image, and/or that includes the OS layer, an application library layer, and/or similar layers. Accordingly, updating an OS layer of the application-specific container image or a similar application-specific container image may be referred to as rehydrating the base image.
For example, upon detecting a vulnerability in an OS, an OS provider may provide, to various customers, an updated version of the OS and/or may provide a security patch for the OS to address the vulnerability. An application team may then update (e.g., rehydrate) application-specific container images to include the updated OS and/or to include the security patch for the OS. This may be time and/or resource intensive, particularly for application teams in charge of numerous applications (and thus numerous application-specific container images). For example, an entity-level application team may spend approximately half of its time and/or power, computing, and network resource consumption rehydrating application-specific container images in order to address vulnerabilities in an OS or otherwise.
Some implementations described herein enable rehydration of a universal container base image without requiring updates to numerous application-specific container images (e.g., application-specific Docker images). In some implementations, rehydration of a universal container base image without requiring updates to numerous application-specific container images is achieved by separating a an image including an OS layer, an application library layer, and/or similar layers from application-specific code (e.g., an application binary file) within a file repository. Put another way, the application binary file may be removed from the universal container base image, such that the serverless computing environment may separately retrieve the universal container base image and the application specific code when running a particular application. In some implementations, the universal container base image may not include hardcoded application binary information, but instead the universal container base image may include a startup script or similar instructions that includes a dynamic variable that is to be replaced with application-specific code during container runtime (e.g., the application-specific code may be injected in the container during container runtime), such as application-specific code that is pulled from an application code repository or a similar system. As a result, if an OS layer or a similar layer of the universal container base image needs to be updated, such as to address a security vulnerability in OS layer or the like, a single universal container base container used for multiple applications may be updated, without requiring numerous (e.g., thousands) of application-specific container images (e.g., application-specific Docker images) to be rehydrated. As a result, time spent rehydrating application-specific container images may be reduced, and/or power, computing, and network resource consumption otherwise required to rehydrate numerous application-specific container images may be conserved.
In some examples, the container processing device 105 may be a device associated with a container-based processing environment (e.g., a container runtime processing environment, such as a serverless computing environment or the like) that is configured to retrieve an image from a repository (e.g., the image repository device 110), create a container based on the image in order to run an application associated with the image in the container-based processing environment separate from other applications (e.g., other containers) operating in the container-based processing environment, and/or serve requests from users of the application. In that regard, the container processing device 105 may include one or more layers and/or devices associated with processing and/or hosting container-based applications. In some examples, the container processing device 105 may be associated with an AWS service, such as an AWS serverless Lambda service, an AWS elastic container service (ECS) serverless Fargate service, or a similar AWS service, while, in some other examples, the container processing device 105 may be associated with a cloud provider of a serverless container service other than an AWS service. In examples associated with an AWS ECS serverless Fargate service, an entity (e.g., an application team of an entity) using the AWS ECS serverless Fargate service may build application code and create an application binary (e.g., a .jar file or a .zip file) as part of a CI/CD pipeline, and the entity may put the application binary inside a container image (resulting in an application-specific container image) and/or provide the application-specific container image to AWS. AWS may load the application-specific container image during runtime and/or may start an application container from the application-specific container image to serve customer requests. In this way, the entity's application binary may be included in a an application-specific container image that may sit at a top layer at AWS (e.g., a top layer of the container processing device 105, such as an application container layer 145 described in more detail below), with remaining lower layers being managed by AWS. In this way, AWS ECS serverless Fargate abstracts an entity compute cloud (EC2) plane, thereby saving numerous EC2 rehydration hours across the entity.
In some examples, the container processing device 105 may include, and/or may be associated with, a data plane stack that includes a physical server layer 120, a hypervisor layer 125, a guest kernel and OS layer 130, an agent layer 135, a container engine layer 140, and/or an application container layer 145. The physical server layer 120 may include computing resources (e.g., hardware and software components) used to serve applications, data, and the like to customers, such as a personal computer, a server in a data center, or a similar computing device that runs on an operating system and/or that includes components such as the hardware components described below in connection with
As shown in
As indicated by reference number 155, when a certain application is to be run in the container-based processing environment (e.g., a serverless computing environment), the container processing device 105 may select and retrieve an application-specific container image (e.g., an application-specific Docker image) that is associated with the application from the image repository device 110. As indicated by reference number 160, upon retrieving the application-specific container image from the image repository device 110, the container processing device 105 may create a container to execute the selected application-specific container image, thereby isolating the application from other applications running the container-based processing environment (which themselves may be operating in corresponding containers).
In some cases, the one or more application-specific container images may need to be updated, such as for a purpose of updating and/or patching an OS layer (e.g., a base image) associated with the application-specific container images in order to address a security vulnerability or the like. For example, upon detecting a security vulnerability in an OS, an OS provider may update the OS and provide the updated OS to various application development teams and/or similar customers. Upon receiving the updated OS, an application development team or a similar entity may update (e.g., rehydrate) each of multiple application-specific container images (e.g., applications-specific Docker images) associated with that particular OS, such as by replacing an OS layer of each application-specific container image with the updated OS and then rebuilding each application-specific container image via a CI/CD process. For example, as shown in
As indicated by reference number 170, after rehydrating the numerous application-specific container images, the image management device 115 may deposit the updated application-specific container images at the image repository device 110 such that the container processing device 105 may retrieve the updated application-specific container images during subsequent executions of the applications. More particularly, as indicated by reference number 175, when a certain application is to be run in the container-based processing environment (e.g., a serverless computing environment), the container processing device 105 may select and retrieve an updated application-specific container image from the image repository device 110 that is associated with the application. And, as indicated by reference number 180, upon retrieving the updated application-specific container image from the image repository device 110, the container processing device 105 may create a container to execute the selected application-specific container image, thereby isolating the application from other applications running the container-based processing environment (which themselves may be operating in corresponding containers). As new versions of an OS become available (e.g., as additional security patches are implemented), the operations described above in connection with
In this way, an application team associated with an entity that uses a service provided by the container processing device 105 (e.g., an AWS ECS serverless Fargate service or a similar serverless container processing service) may be responsible for business application requirements, and an operation team of the entity may be responsible for setting up a pipeline (e.g., a CI/CD pipeline) to build the application, create an application binary version, containerize (e.g., Dockerize) the application (e.g., to create an application-specific container image), and store the application-specific container image in a registry (e.g., an ECS container registry) and/or a repository (e.g., a binary repository). A cloud provider of a serverless container service (e.g., AWS or a similar provider) may in turn be responsible for pulling the application-specific container image at runtime and/or running the application, as described above. Thus, a responsibility of a customer of a cloud provider of a serverless container service or a similar serverless environment may be to create the application-specific container image, and a responsibility of the cloud provider of a serverless container service may be to load the application-specific container image and run the application in a container-based environment. In this regard, the above-described architecture (e.g., an AWS ECS serverless Fargate service or a similar serverless container service) may eliminate a certain infrastructure maintenance burden at an entity, such as by eliminating numerous EC2 rehydration hours at the entity. However, the above-described architecture introduces additional entity overhead in terms of managing container image rehydration. According to some implementations of the disclosure, a universal container base image (e.g., a universal Docker base image) and/or a universal container image build pipeline (e.g., a universal Docker image build pipeline) may be implemented in order to reduce time and/or resource consumption associated with managing container image rehydration. Aspects of a universal container image and/or a universal container image build pipeline are described in more detail below in connection with
As indicated above,
In some implementations, the container processing device 105 may be configured to create a container based on a universal container base image (e.g., a universal Docker base image, such as an image including an OS layer, an application library layer, and/or similar layers that is applicable to multiple applications) and inject application-specific code (e.g., an application binary file) into the container during runtime. By maintaining the application-specific code separate from the universal container base image, a single universal container base image that is associated with multiple applications may be updated when needed (e.g., to perform a security patch or the like), thereby reducing time, power, computing, and network resource consumption otherwise required to patch numerous application-specific container images. Put another way, in response to receiving an updated OS or the like, an application development team may not need to rehydrate numerous (e.g., millions) of application components across an entity, but instead may perform a limited number of rehydration tasks associated with a universal container base image.
More particularly, as shown in
As indicated by reference number 220, the customer associated with the image management device 115 (e.g., an application development team associated with an entity or a similar customer) may also create one or more application binary files separate from the universal container base image and/or may deposit the application binary files in a binary file repository associated with the binary file repository device 205. In some implementations, the application binary files may include application-specific code that is configured to run using the OS associated with the universal container base image and/or the application language library associated with the universal container base image. For example, the application binary files may be configured to be injected into a container associated with the universal container base image during a runtime of the container. In that regard, the application binary files may each include a set of instructions associated with one application, of the multiple applications associated with universal container base image. As further indicated by reference number 220, the customer and/or the image management device 115 may deposit the application binary files (e.g., application-specific code) at the binary file repository device 205, such as in a binary file repository associated with the binary file repository device 205.
In some implementations, the customer associated with the image management device 115 may create an application binary file for each of the multiple applications associated with the universal container base image and/or may deposit each of the application binary files at the binary file repository device. In this regard, the container processing device 105 may be configured to select a certain application binary file for an application to be executed in a container and/or inject the application binary file into the container during runtime of the container depending on a specific application that is to be run in the serverless computing environment.
More particularly, as indicated by reference number 225, in order to execute an application, the container processing device 105 may receive the universal container base image from the image repository device 110 (e.g., from a container image repository associated with the image repository device 110). As indicated by reference number 230, the container processing device 105 may create a container to execute an application in the container-based processing environment (e.g., the serverless computing environment) based on the universal container base image. More particularly, the container processing device 105 may create a container using the instructions included in the universal container base image, such as the instructions associated with the OS, the application language library, and/or any additional instructions included in the universal container base image.
As shown in
More particularly, as shown by reference number 240, the container processing device 105 may inject the application-specific code into the container during runtime. Additionally, or alternatively, the container processing device 105 may execute the application within the container based on the instructions contained in the universal container base image and the instructions contained in the application-specific code, among other instructions. More particularly, the container processing device 105 may execute the application based on at least the set of instructions included in the universal container base image and the set of instructions included in the application-specific code.
In this regard, by abstracting the OS layer and other layers from the application-specific code (e.g., the application binary file), the universal container base image may be periodically updated, such as for a purpose of patching a security vulnerability or the like, without requiring rehydration of numerous application-specific container images (e.g., numerous application-specific Docker images). More particularly, an entity may maintain a single and/or universal container base image that is associated with multiple applications, with each of the application's code maintained separate from the universal container base image, and thus the entity may only need to update the single universal container base image, when necessary. For example, as shown in
As indicated by reference number 255, when the application is to be run in the container-based processing environment (e.g., the serverless computing environment), the container processing device 105 may receive the updated universal container base image from the image repository device (e.g., a container image repository associated with the image repository device 110). Moreover, as indicated by reference number 260, the container processing device 105 may create an updated container to execute an application in the container-based processing environment (e.g., the serverless computing environment) based on the updated universal container base image. More particularly, the container processing device 105 may create an updated container using the instructions included in the updated universal container base image, such as the instructions associated with the updated OS, the application language library, and/or any additional instructions included in the updated universal container base image.
As shown in
As shown by reference number 270, the container processing device 105 may inject the application-specific code into the updated container during runtime. Additionally, or alternatively, the container processing device 105 may execute the application within the updated container based on the instructions contained in the updated universal container base image and the instructions contained in the application-specific code, among other instructions. More particularly, the container processing device 105 may execute the application based on at least the set of instructions included in the updated universal container base image and the set of instructions included in the application-specific code.
In some implementations, by utilizing the above-described architecture, a customer associated with the image management device 115 (e.g., an entity-level application development team or a similar customer) may reduce time and resource consumption associated with rehydrating numerous entity-wide application-specific container images (e.g., application-specific Docker images), or the like. More particularly, in response to receiving an updated OS or the like, an application development team may not need to rehydrate numerous (e.g., millions) of application components across an entity. Instead, a universal container base image build team of the entity may update an universal container base image one time, and deploy the updated universal container base image entity-wide for the various application build teams' use. Put another way, the universal container base image build team of the entity may create one or more universal container base images (e.g., one or more universal Docker base images), one for each OS and/or application language library being used by the entity's various application build teams, and/or may provide the one or more universal container base images to the various application build teams. In some implementations, the universal container base image build team may set up a CI/CD pipeline to build the one or more universal container base images, such as whenever the universal container base image build team learns of an OS version vulnerability. In some implementations, an application build team may add additional application-specific third party binary (e.g., non-application-code binary) on top of a universal container base image, such as via part of the application build team's CI/CD pipeline.
In some implementations, a universal container base image startup script (e.g., a Docker startup script) may be standardized and/or included as part of the universal container base image build team's one or more universal container base images. The universal container base image startup script may not include any hardcoded application binary information, but may instead include a dynamic variable that may be replaced during container runtime (e.g., with application code binary). In some implementations, the universal container base image build team may push the one or more universal container base image metadata into an entity repository or a similar database for leverage during a pipeline build time. Additionally, or alternatively, the universal container base image build team may provide a customized version of the universal container base image build team's container image build pipeline (e.g., Docker image build pipeline), such as for a purpose of enabling the application teams to build an application-specific container base image on top of the one or more universal container base images.
In this regard, an application build team may utilize a build pipeline with an optional container (e.g., Docker) build stage. For example, an optional container stage may exist in the application build CI/CD pipeline, however no application container image build may occur at the container stage. Instead, the container stage may pull the latest universal container base image version (e.g., the vulnerability-free container base image provided by the universal container base image build team of the entity) from the entity repository or similar database, and the application build CI/CD pipeline may perform a scan using an image scanning security tool (e.g., a Docker image scan tool) on the universal container base image.
In this regard, when building a certain application, an application build team may push application code changes to an application code component repository. The application build CI/CD pipeline may then begin a CI/CD process by checking out the application code from the application code component repository. The application build CI/CD pipeline may perform an application build and/or static code analysis (SCA) stage as part of a CI stage of the application build CI/CD pipeline. The application build CI/CD pipeline may thus create an application code binary (e.g., a .jar or .zip file) with a particular artifact version, and/or the application build CI/CD pipeline may deposit the application code binary to a repository and/or a similar database (e.g., the binary file repository device 205). The application build CI/CD pipeline may also include an optional container build stage. For example, based on a status of a flag (sometimes referred to as is_docker_build_required, but which in some other implementations may be any suitable variable used for pipeline identification purposes) associated with a build file of the application, a container stage of the application build CI/CD pipeline may determine whether to build an application-specific container image or whether to pull a universal container base image from the entity repository or similar database. In that regard, if the flag (e.g., is_docker_build_required or a similar variable) is set to true, an application-specific container image may be built at the container stage. On the other hand, if the flag is set to false, no application-specific container image may be built at the container stage. Instead, the container startup script may include business logic to dynamically load the application code binary from a repository (e.g., the binary file repository device 205) during container startup time. Accordingly, the application build CI/CD pipeline may set an application binary artifact version and/or a universal container base image version to a pipeline context which may later be read by a cloud provider of a serverless container service.
The infrastructure as code (IAC) tools may read the pipeline context and thus create a container manifest (e.g., a cloud provider serverless container definition) dynamically by setting a variable (sometimes referred to as containerImage, but which in some other implementations may be any other suitable variable) to the universal container base image (e.g., the universal Docker base image) and/or by setting an application binary artifact version and/or an artifact location as part of a cloud provider serverless container definition environment variables. Accordingly, during container startup by a cloud provider of a serverless container service, the container processing device 105 may pull the universal container base image (e.g., the universal Docker base image) from a repository (e.g., the image repository device 110), and/or the container processing device 105 may download the application binary from a repository (e.g., the binary file repository device 205). A same pattern (e.g., pulling the universal base image from a repository as part of container startup and/or downloading the application binary from a repository) may be applied at a quality assurance stage of the application build CI/CD pipeline and/or a product deployment stage of the application build CI/CD pipeline.
In this way, an application binary file may be removed from the universal container bases image (e.g., the universal container base image provided by a customer to a cloud provider of a serverless container service), which may seemingly be contrary to an immutability principle and/or a reproducibility principle of utilizing container images in container-based environments. However, while removing the application binary from the container image and passing the application binary during runtime may be contrary to the immutability principle, removing the application binary from the container image and passing the application binary during runtime may not be contrary to the immutability principle at a cloud provider serverless container definition file level. A cloud provided serverless container definition file (e.g., a template file) may be an immutable file (e.g., a snapshot) that holds a container image version information (e.g., containerImage), other configuration information (e.g., virtual central processing unit (vCPU), memory, and/or the like), and/or environment variables, which may not be able to be mutated once created. More particularly, when the application build CI/CD pipeline creates the cloud provider serverless container definition revision, the application build CI/CD pipeline may set the container base image version and/or the application artifact version as part of the template, such that the container base image version and/or the application artifact cannot be altered later. Moreover, in some implementations, the application build CI/CD pipeline may use a gsign or a similar signature security software in order to add an encrypted signatures to each cloud provider serverless container definition revision.
Moreover, the reproducibility principle may be associated with an ability to take an application container image and run the image anywhere (e.g., locally at a developer, within the cloud, or the like), with the application container image working seamlessly as long as the necessary parameters are passed to the container image. From an auditing and/or debugging incident perspective, the reproducibility principle aims to reproduce what container image was running in a cloud environment on a particular day. In some implementations, in order to improve reproducibility associated with a universal container base image and/or application-specific code, a manifest file (e.g., a manifest JSON file) may be created (e.g., the by the application build CI/CD pipeline) that replicates the cloud provider serverless container definition file described above and/or that is tagged with the application binary artifact version. In such implementations, the application build CI/CD pipeline may store the manifest file in the repository where the application binary artifact resides (e.g., the binary file repository device 205). In that regard, if a developer, auditing team, and/or a similar entity wishes to run a specific version (e.g., associated with a specific day) of an application, such as for debugging and/or auditing purposes, the developer, auditing team, and/or the similar entity may retrieve the manifest file and/or the application binary artifact from the repository and/or may run the container image. For example, the developer, auditing team, and/or the similar entity may utilize a utility script to pull both files (e.g., the application binary and the universal container base image) and/or run the container with information listed in the manifest file and by injecting the application binary at runtime.
Additionally, or alternatively, as part of a deployment pre-hook stage of the application build CI/CD pipeline, a metadata script or similar script may be utilize to infer a latest container base image version from the entity repository or similar database (e.g., the image repository database 110) and/or to infer an application artifact currently running version (e.g., in development, quality assurance, production, or the like) from a certain entity, database, cloud environment, cloud provider serverless container service, or a similar location. Accordingly, the application build CI/CD pipeline may set an application binary artifact version and/or a universal container base image version to a pipeline context which may later be read by a cloud provider of a serverless container service.
Accordingly, during container startup by a cloud provider of a serverless container service, the universal container base image (e.g., the universal Docker base image) may be pulled from a repository (e.g., the image repository device 110), and/or the application binary maybe downloaded from a repository (e.g., the binary file repository device 205). In some implementations, a post-deployment hook (e.g., a post-deployment hook Lambda or a similar cloud function) may be utilized, such as for a purpose of running a component functional test before switching traffic to a new version of application that uses the universal container base image. In that regard, if a functional test associated with the new version of the universal base image fails, the container processing device 105 may decline to utilize the new version of the universal container base image and instead proceed with the old version of the universal container base image without switching traffic.
In this way, the OS or other components of a universal container base image (e.g., a universal Docker base image) may be periodically updated, such as for a purpose of performing a security patch or the like, without requiring rehydration of numerous entity-wide application-specific container images (e.g., application-specific Docker images), thereby conserving time, power, computing, and network resources otherwise require for application-specific container image rehydration.
As indicated above,
The cloud computing system 302 may include computing hardware 303 (e.g., the physical server layer 120), a resource management component 304, a host OS 305 (e.g., the guest kernel and OS layer 130), and/or one or more virtual computing systems 306. The cloud computing system 302 may execute on, for example, an Amazon Web Services platform, a Microsoft Azure platform, or a Snowflake platform. The resource management component 304 may perform virtualization (e.g., abstraction) of computing hardware 303 to create the one or more virtual computing systems 306. Using virtualization, the resource management component 304 enables a single computing device (e.g., a computer or a server) to operate like multiple computing devices, such as by creating multiple isolated virtual computing systems 306 from computing hardware 303 of the single computing device. In this way, computing hardware 303 can operate more efficiently, with lower power consumption, higher reliability, higher availability, higher utilization, greater flexibility, and lower cost than using separate computing devices.
The computing hardware 303 may include hardware and corresponding resources from one or more computing devices. For example, computing hardware 303 may include hardware from a single computing device (e.g., a single server) or from multiple computing devices (e.g., multiple servers), such as multiple computing devices in one or more data centers. As shown, computing hardware 303 may include one or more processors 307, one or more memories 308, and/or one or more networking components 309. Examples of a processor, a memory, and a networking component (e.g., a communication component) are described elsewhere herein.
The resource management component 304 may include a virtualization application (e.g., executing on hardware, such as computing hardware 303) capable of virtualizing computing hardware 303 to start, stop, and/or manage one or more virtual computing systems 306. For example, the resource management component 304 may include a hypervisor (e.g., hypervisor layer 125 and/or a bare-metal or Type 1 hypervisor, a hosted or Type 2 hypervisor, or another type of hypervisor) or a virtual machine monitor, such as when the virtual computing systems 306 are virtual machines 310. Additionally, or alternatively, the resource management component 304 may include a container manager (e.g., container engine layer 140), such as when the virtual computing systems 306 are containers 311. In some implementations, the resource management component 304 executes within and/or in coordination with a host operating system 305.
A virtual computing system 306 may include a virtual environment that enables cloud-based execution of operations and/or processes described herein using computing hardware 303. As shown, a virtual computing system 306 may include a virtual machine 310, a container 311, or a hybrid environment 312 that includes a virtual machine and a container, among other examples. A virtual computing system 306 may execute one or more applications using a file system that includes binary files, software libraries, and/or other resources required to execute applications on a guest operating system (e.g., within the virtual computing system 306) or the host operating system 305.
Although the container processing system 301 may include one or more elements 303-312 of the cloud computing system 302, may execute within the cloud computing system 302, and/or may be hosted within the cloud computing system 302, in some implementations, the container processing system 301 may not be cloud-based (e.g., may be implemented outside of a cloud computing system) or may be partially cloud-based. For example, the container processing system 301 may include one or more devices that are not part of the cloud computing system 302, such as device 400 of
The network 320 may include one or more wired and/or wireless networks. For example, the network 320 may include a cellular network, a public land mobile network (PLMN), a local area network (LAN), a wide area network (WAN), a private network, the Internet, and/or a combination of these or other types of networks. The network 320 enables communication among the devices of the environment 300.
The image management device 330 may include hardware and corresponding resources from one or more computing devices, such as one or more computing devices associated with an application development team. For example, the image management device 330 may include hardware from a single computing device (e.g., a single personal computer (PC)) or from multiple computing devices (e.g., multiple PCs) capable of developing container images (e.g., container base images), binary files (e.g., application-specific code), or the like. The image management device 330 may include one or more processors, one or more memories, and/or one or more networking components. Examples of a processor, a memory, and a networking component (e.g., a communication component) are described elsewhere herein. In some implementations, the image management device 330 may include, or may be associated with, a software development hosting platform (e.g., GitHub), a CI/CD pipeline, and/or similar software development tools.
The image repository device 340 may include hardware and corresponding resources from one or more computing devices for hosting one or more container images. For example, the image repository device 340 may include hardware and corresponding resources from one or more computing devices for hosting a container image repository, as described elsewhere herein.
The binary file repository device 350 may include hardware and corresponding resources from one or more computing devices for hosting one or more binary files (e.g., application-specific code). For example, the image repository device 340 may include hardware and corresponding resources from one or more computing devices for hosting a binary file repository and/or an application code repository, as described elsewhere herein. In some implementations, the image repository device 340 and the binary file repository device 350 may be associated with the same device and/or set of devices, as described above in connection with reference number 210.
The number and arrangement of devices and networks shown in
The bus 410 may include one or more components that enable wired and/or wireless communication among the components of the device 400. The bus 410 may couple together two or more components of
The memory 430 may include volatile and/or nonvolatile memory. For example, the memory 430 may include random access memory (RAM), read only memory (ROM), a hard disk drive, and/or another type of memory (e.g., a flash memory, a magnetic memory, and/or an optical memory). The memory 430 may include internal memory (e.g., RAM, ROM, or a hard disk drive) and/or removable memory (e.g., removable via a universal serial bus connection). The memory 430 may be a non-transitory computer-readable medium. The memory 430 may store information, one or more instructions, and/or software (e.g., one or more software applications) related to the operation of the device 400. In some implementations, the memory 430 may include one or more memories that are coupled (e.g., communicatively coupled) to one or more processors (e.g., processor 420), such as via the bus 410. Communicative coupling between a processor 420 and a memory 430 may enable the processor 420 to read and/or process information stored in the memory 430 and/or to store information in the memory 430.
The input component 440 may enable the device 400 to receive input, such as user input and/or sensed input. For example, the input component 440 may include a touch screen, a keyboard, a keypad, a mouse, a button, a microphone, a switch, a sensor, a global positioning system sensor, a global navigation satellite system sensor, an accelerometer, a gyroscope, and/or an actuator. The output component 450 may enable the device 400 to provide output, such as via a display, a speaker, and/or a light-emitting diode. The communication component 460 may enable the device 400 to communicate with other devices via a wired connection and/or a wireless connection. For example, the communication component 460 may include a receiver, a transmitter, a transceiver, a modem, a network interface card, and/or an antenna.
The device 400 may perform one or more operations or processes described herein. For example, a non-transitory computer-readable medium (e.g., memory 430) may store a set of instructions (e.g., one or more instructions or code) for execution by the processor 420. The processor 420 may execute the set of instructions to perform one or more operations or processes described herein. In some implementations, execution of the set of instructions, by one or more processors 420, causes the one or more processors 420 and/or the device 400 to perform one or more operations or processes described herein. In some implementations, hardwired circuitry may be used instead of or in combination with the instructions to perform one or more operations or processes described herein. Additionally, or alternatively, the processor 420 may be configured to perform one or more operations or processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software.
The number and arrangement of components shown in
As shown in
As further shown in
As further shown in
As further shown in
As further shown in
Although
As shown in
As further shown in
As further shown in
As further shown in
Although
The foregoing disclosure provides illustration and description, but is not intended to be exhaustive or to limit the implementations to the precise forms disclosed. Modifications may be made in light of the above disclosure or may be acquired from practice of the implementations.
As used herein, the term “component” is intended to be broadly construed as hardware, firmware, or a combination of hardware and software. It will be apparent that systems and/or methods described herein may be implemented in different forms of hardware, firmware, and/or a combination of hardware and software. The hardware and/or software code described herein for implementing aspects of the disclosure should not be construed as limiting the scope of the disclosure. Thus, the operation and behavior of the systems and/or methods are described herein without reference to specific software code—it being understood that software and hardware can be used to implement the systems and/or methods based on the description herein.
Although particular combinations of features are recited in the claims and/or disclosed in the specification, these combinations are not intended to limit the disclosure of various implementations. In fact, many of these features may be combined in ways not specifically recited in the claims and/or disclosed in the specification. Although each dependent claim listed below may directly depend on only one claim, the disclosure of various implementations includes each dependent claim in combination with every other claim in the claim set. As used herein, a phrase referring to “at least one of” a list of items refers to any combination and permutation of those items, including single members. As an example, “at least one of: a, b, or c” is intended to cover a, b, c, a-b, a-c, b-c, and a-b-c, as well as any combination with multiple of the same item. As used herein, the term “and/or” used to connect items in a list refers to any combination and any permutation of those items, including single members (e.g., an individual item in the list). As an example, “a, b, and/or c” is intended to cover a, b, c, a-b, a-c, b-c, and a-b-c.
When “a processor” or “one or more processors” (or another device or component, such as “a controller” or “one or more controllers”) is described or claimed (within a single claim or across multiple claims) as performing multiple operations or being configured to perform multiple operations, this language is intended to broadly cover a variety of processor architectures and environments. For example, unless explicitly claimed otherwise (e.g., via the use of “first processor” and “second processor” or other language that differentiates processors in the claims), this language is intended to cover a single processor performing or being configured to perform all of the operations, a group of processors collectively performing or being configured to perform all of the operations, a first processor performing or being configured to perform a first operation and a second processor performing or being configured to perform a second operation, or any combination of processors performing or being configured to perform the operations. For example, when a claim has the form “one or more processors configured to: perform X; perform Y; and perform Z,” that claim should be interpreted to mean “one or more processors configured to perform X; one or more (possibly different) processors configured to perform Y; and one or more (also possibly different) processors configured to perform Z.”
No element, act, or instruction used herein should be construed as critical or essential unless explicitly described as such. Also, as used herein, the articles “a” and “an” are intended to include one or more items, and may be used interchangeably with “one or more.” Further, as used herein, the article “the” is intended to include one or more items referenced in connection with the article “the” and may be used interchangeably with “the one or more.” Furthermore, as used herein, the term “set” is intended to include one or more items (e.g., related items, unrelated items, or a combination of related and unrelated items), and may be used interchangeably with “one or more.” Where only one item is intended, the phrase “only one” or similar language is used. Also, as used herein, the terms “has,” “have,” “having,” or the like are intended to be open-ended terms. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise. Also, as used herein, the term “or” is intended to be inclusive when used in a series and may be used interchangeably with “and/or,” unless explicitly stated otherwise (e.g., if used in combination with “either” or “only one of”).