Fast pull from registry
The performance of pulling public and private images from registries into Modal can be significantly improved by adopting the eStargz compression format.
By applying eStargz compression during your image build and push, Modal will be much more efficient at pulling down your image from the registry.
How to use estargz
If you have Buildkit version greater than 0.10.0
, adopting estargz
is as simple as
adding some flags to your docker buildx build
command:
type=registry
flag will instruct BuildKit to push the image after building.- If you do not push the image from immediately after build and instead attempt to push it later with docker push, the image will be converted to a standard gzip image.
compression=estargz
specifies that we are using the eStargz compression format.oci-mediatypes=true
specifies that we are using the OCI media types, which is required for eStargz.force-compression=true
will recompress the entire image and convert the base image to eStargz if it is not already.
docker buildx build --tag "<registry>/<namespace>/<repo>:<version>" \
--output type=registry,compression=estargz,force-compression=true,oci-mediatypes=true \
.
Then reference the container image as normal in your Modal code.
app = modal.App(
"example-estargz-pull",
image=modal.Image.from_registry(
"public.ecr.aws/modal/estargz-example-images:text-generation-v1-esgz"
)
)
At build time you should see the eStargz-enabled puller activate:
Building image im-TinABCTIf12345ydEwTXYZ
=> Step 0: FROM public.ecr.aws/modal/estargz-example-images:text-generation-v1-esgz
Using estargz to speed up image pull (index loaded in 1.86s)...
Progress: 10% complete... (1.11s elapsed)
Progress: 20% complete... (3.10s elapsed)
Progress: 30% complete... (4.18s elapsed)
Progress: 40% complete... (4.76s elapsed)
Progress: 50% complete... (5.51s elapsed)
Progress: 62% complete... (6.17s elapsed)
Progress: 74% complete... (6.99s elapsed)
Progress: 81% complete... (7.23s elapsed)
Progress: 99% complete... (8.90s elapsed)
Progress: 100% complete... (8.90s elapsed)
Copying image...
Copied image in 5.81s
Supported registries
Currently, Modal supports fast estargz pulling images with the following registries:
- AWS Elastic Container Registry (ECR)
- Docker Hub (docker.io)
- Google Artifact Registry (gcr.io, pkg.dev)
We are working on adding support for GitHub Container Registry (ghcr.io).