Skip to main content

docker-image-size-limit

wemake.services Build status codecov Python Version wemake-python-styleguide

Limit your docker image size with a simple CLI command. Perfect to be used inside your CI process.

Read the announcing post.

Installation

pip install docker-image-size-limit

Or use our Github Action or pre-built docker image.

Usage

We support just a single command:

$ disl your-image-name:label 300MiB
your-image-name:label exceeds 300MiB limit by 114.4 MiB

Add --max-layers flag to also lint the maximum amount of layers possible in your image:

# If your image has 7 layers:
$ disl your-image-name:label 300MiB --max-layers=5
your-image-name:label exceeds 5 maximum layers by 2

# If your image has 5 layers:
$ disl your-image-name:label 300MiB --max-layers=5
# ok!

Add --current-size flag to show the current size your image:

$ disl your-image-name:label 300MiB --current-size
your-image-name:label size is 414.4 MiB
your-image-name:label exceeds 300MiB limit by 114.4 MiB

Add --exit-zero flag to force the exit code to be 0 even if there are errors:

$ disl your-image-name:label 300MiB --exit-zero
your-image-name:label exceeds 300MiB limit by 114.4 MiB

$ echo $?
0

You can combine all flags together:

$ disl your-image-name:label 300MiB --max-layers=5 --current-size --exit-zero
your-image-name:label size is 414.4 MiB
your-image-name:label exceeds 300MiB limit by 114.4 MiB
your-image-name:label exceeds 5 maximum layers by 2

Run disl as a module:

$ python -m docker_image_size_limit your-image-name:label 300MiB
your-image-name:label exceeds 300MiB limit by 114.4 MiB

Options

You can specify your image as:

  • Image name: python
  • Image name with tag: python:3.6.6-alpine

You can specify your size as:

  • Raw number of bytes: 1024
  • Human-readable megabytes: 30 MB or 30 MiB
  • Human-readable gigabytes: 1 GB or 1 GiB
  • Any other size supported by humanfriendly

Programmatic usage

You can also import and use this library as python code:

from docker import from_env
from docker_image_size_limit import check_image_size

oversize = check_image_size(from_env(), 'image-name:latest', '1 GiB')
assert oversize < 0, 'Too big image!'  # negative oversize - is a good thing!

We also ship PEP-561 compatible type annotations with this library.

GitHub Action

You can also use this check as a GitHub Action:

- uses: wemake-services/docker-image-size-limit@master
  with:
    image: "$YOUR_IMAGE_NAME"
    size: "$YOUR_SIZE_LIMIT"
    # optional fields:
    max_layers: 5
    show_current_size: false
    exit_zero: false

Here's an example.

Docker Image

We have a pre-built image available.

First, pull our pre-built docker image:

docker pull wemakeservices/docker-image-size-limit

Then you can use it like so:

docker run -v /var/run/docker.sock:/var/run/docker.sock --rm \
  -e INPUT_IMAGE="$YOUR_IMAGE_NAME" \
  -e INPUT_SIZE="$YOUR_SIZE_LIMIT" \
  -e INPUT_MAX_LAYERS="$YOUR_MAX_LAYERS" \
  -e INPUT_SHOW_CURRENT_SIZE="true" \
  -e INPUT_EXIT_ZERO="true" \
  wemakeservices/docker-image-size-limit

Should I use it?

You can use this script instead:

LIMIT=1024  # adjust at your will
IMAGE='your-image-name:latest'

SIZE="$(docker image inspect "$IMAGE" --format='{{.Size}}')"
test "$SIZE" -gt "$LIMIT" && echo 'Limit exceeded'; exit 1 || echo 'Ok!'

But I prefer to reuse tools over custom bash scripts here and there.

License

MIT.

Release files for docker-image-size-limit 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docker-image-size-limit 2.2.0
File Size Uploaded
docker_image_size_limit-2.2.0.tar.gz 6.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for docker-image-size-limit 2.2.0
File Interpreter ABI Platform
docker_image_size_limit-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.7 kB

Release files / docker_image_size_limit-2.2.0.tar.gz

Download URL docker_image_size_limit-2.2.0.tar.gz
Size 6.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f583a03b1c561b4424b02f92c68a4035bbe50b8c5f0e59ae2c559db1cf854edd
BLAKE2b-256 checksum
How to use checksums
a74d1f10277d3cb97d446955ea864fc93167df468ea7f7879044baf9f689b5f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.11.9 Darwin/23.5.0

Release files / docker_image_size_limit-2.2.0-py3-none-any.whl

Download URL docker_image_size_limit-2.2.0-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ba7929035f4f781667263645c34f4b7965e2900a084335dacca151ca83dc9fe8
BLAKE2b-256 checksum
How to use checksums
d5f71e6f1e2bf7ee2358a0bd1f302ce6c68626ae743ba4b9e3bb513872c90330
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.11.9 Darwin/23.5.0

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page