How container provisioning works
In the container lifecycle, images are generally created (built) and uploaded (pushed) to a container registry, and then these images are downloaded (pulled) for the execution of a specific pipeline.
The Wave container provisioning process streamlines the container lifecycle by delivering container images on-demand during the pipeline execution and making sure each container includes the dependencies required by the requesting actor, such as a pipeline task or a user.
Wave provides the following container provisioning capabilities:
- Container augmentation
- Container freezing
Container augmentation
The container augmentation provisioning mode allows extending the content of a container image without rebuilding it. Instead, this mechanism modifies a container image during the pull phase made by a Docker-compatible client. Augmented containers are ephemeral: they are not stored in a container repository, and they can only be accessed for a short period of time. The extended content added by Wave is served from a CDN. The augmentation process does not perform any build operation behind the scenes.
This approach supports use cases such as the following:
- Authenticate access to your private repositories with Seqera Platform credentials
- Extend existing containers by adding infrastructure and pipeline dependencies on the fly, without rebuilding and maintaining additional container images
Container augmentation works as follows:
- The client, either Nextflow or Wave CLI, submits a container request specifying:
- The Seqera Platform user identity
- The container image to be augmented
- The container extension configuration, which can be either a custom payload, one or more extension layers, or container images.
- The Wave service validates the request and authorizes the user submitting a request to the Platform service.
- The Wave service responds with an ephemeral container image name e.g.
wave.seqera.io/wt/<id_token>/library/alpine:latest
. The<id_token>
is uniquely assigned and is used to identify and authorize the following container request. - The Docker client uses the returned image name to pull the container binary content of the upstream image directly from the target registry.
- The content added by Wave as one or more layer extensions is shipped by the Wave service.
Notable parts of this workflow include:
- Wave acts as a proxy between the Docker client and the target registry that hosts the container image.
- Wave modifies, if needed, the container manifest to add the new content as specified by the request, but it does not (and cannot) alter the container layer blob files that have a unique checksum, which is preserved.
- Image blobs are downloaded directly from the target registry, not from Wave.