Skip to main content

DockerShrink

Talk to us on Slack | Vote for Feature Requests


Dockershrink is an AI-powered Commandline Tool that helps you reduce the size of your Docker images

Typical interaction with dockershrink CLI

It combines the power of algorithmic analysis with Generative AI to apply state-of-the-art optimizations to your Image configurations :brain:

Dockershrink can automatically apply techniques like Multi-Stage builds, switching to Lighter base images like alpine and running dependency checks. PLUS a lot more is on the roadmap :rocket:

Currently, the tool only supports NodeJS applications.

[!IMPORTANT] Dockershrink is BETA software.

You can provide your feedback by creating an Issue in this repository.

Why does dockershrink exist?

Every org using containers in development or production environments understands the pain of managing hundreds or even thousands of bloated Docker images in their infrastructure.

High data storage and transfer costs, long build times, underprodctive developers - we've seen it all.

The issue becomes even more painful and costly with interpreted languages such as Nodejs & Python. Apps written in these languages need to pack the interpreters and all their dependencies inside their container images, significantly increasing their size.

But not everyone realizes that by just implementing some basic techniques, they can reduce the size of a 1GB Docker image down to as little as 100 MB!

(I also made a video on how to do this.)

Imagine the costs saved in storage & data transfer, decrease in build times AND the productivity gains for developers :exploding_head:

Dockershrink aims to automatically apply advanced optimization techniques so engineers don't have to waste time on it and the organization still saves :moneybag:!

You're welcome :wink:

How it works

When you invoke the dockershrink CLI on your project, it analyzes code files.

Dockershrink looks for the following files:

:point_right: Dockerfile (Required)

:point_right: package.json (Optional)

:point_right: .dockerignore (Optional, created if it doesn't already exist)

It then creates a new directory (default: dockershrink.optimized) inside the project, which contains modified versions of your configuration files that will result in a smaller Docker Image.

The CLI outputs a list of actions it took over your files.

It may also include suggestions on further improvements you could make.

Installation

You can install dockershrink using PIP or PIPX

$ pip install dockershrink
$ pipx install dockershrink

Alternatively, you can also install it using Homebrew:

brew install duaraghav8/tap/dockershrink

But you should prefer to use pip instead because installation via brew takes a lot longer and occupies significanlty more space on your system (see this issue)

Usage

Navigate into the root directory of one of your Node.js projects and invoke dockershrink with the optimize command:

$ dockershrink optimize

Dockershrink will create a new directory with the optimized files and output the actions taken and (maybe) some more suggestions.

For detailed information about the optimize command, run

dockershrink optimize --help

You can also use the --verbose option to get stack traces in case of failures:

$ dockershrink optimize --verbose

To enable DEBUG logs, you can set the environment variable

export DOCKERSHRINK_CLI_LOGLEVEL=DEBUG
dockershrink optimize

Using AI Features

[!NOTE] Using AI features is optional, but highly recommended for more customized and powerful optimizations.

To use AI, you need to supply your own OpenAI API key, so even though Dockershrink itself is free, openai usage might incur some cost for you.

By default, dockershrink only runs rule-based analysis to optimize your image definition.

If you want to enable AI, you must supply your OpenAI API Key.

dockershrink optimize --openai-api-key <your openai api key>

# Alternatively, you can supply the key as an environment variable
export OPENAI_API_KEY=<your openai api key>
dockershrink optimize

[!NOTE] Dockershrink does not store your OpenAI API Key.

So you must provide your key every time you want "optimize" to use AI features. This is to avoid any unexpected costs.

Default file paths

By default, the CLI looks for the files to optimize in the current directory.

You can also specify the paths to all files using options (see dockershrink optimize --help for the available options).


Development :computer:

[!NOTE] This section is for authors and contributors. If you're simply interested in using Dockershrink, you can skip this section.

  1. Clone this repository
  2. Navigate inside the root directory of the project and create a new virtual environment
python3 -m venv .venv
source .venv/bin/activate
  1. Install all dependencies
pip install --no-cache-dir -r requirements.txt
  1. Install the editable CLI tool
# -e ensures that the tool is editable, ie, code changes reflect in the tool immediately, without having to re-install it
pip install -e .

# Try running the cli
dockershrink --help
  1. Make your code changes
  2. Run black
black .
  1. In case of any changes in dependencies, update requirements.txt
pip freeze > requirements.txt

Release :rocket:

Once all code changes have been made for the next release:

Then proceed to follow these steps to release new dockershrink version on PyPI:

  1. Build dockershrink from source
python -m build
  1. Upload to testpypi
twine upload --repository testpypi dist/*
  1. The new version of the package should now be available in TestPyPI.
  2. Try installing the test package
pip install --index-url https://test.pypi.org/simple/ --no-deps dockershrink
  1. Create a new Tag and push it
git tag -a <VERSION> -m "Tag version <VERSION>"
git push origin <VERSION>
  1. Create a new release in this repository
  2. Upload the package to PyPI
twine upload dist/*
  1. The new version of the package should now be available in PyPI
  2. Update the package in Dockershrink Homebrew Tap as well.

Metadata

Release files for dockershrink 0.1.6

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

Source distribution (sdist)

Source distribution for dockershrink 0.1.6
File Size Uploaded
dockershrink-0.1.6.tar.gz 48.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dockershrink 0.1.6
File Interpreter ABI Platform
dockershrink-0.1.6-py3-none-any.whl Python 3 none any Details

Total release size: 98.6 kB

Release files / dockershrink-0.1.6.tar.gz

Download URL dockershrink-0.1.6.tar.gz
Size 48.3 kB
Tags Source
SHA-256 checksum
How to use checksums
11ed04b2706f68c0d2bf6417f304c0e2976d7177506d41bfb7ec86d2c9840edc
BLAKE2b-256 checksum
How to use checksums
60d58893e3585251aeb67a35d40e6672c8b26bac067348d4acdda369472f5c4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.1

Release files / dockershrink-0.1.6-py3-none-any.whl

Download URL dockershrink-0.1.6-py3-none-any.whl
Size 50.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a1018d17a3a706a0e255defe33d8ec946bf5250575de37058ed6884c9520aea9
BLAKE2b-256 checksum
How to use checksums
de1725ba9fc0a20c8ecdbc1c1fcc821736b088a0262aa932fe4fb990b2788c86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.1

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

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