- Install MinToolkit (aka DockerSlim): https://github.com/mintoolkit/mint#installation
- Shrink your container image:
mint slim your-container-image
Note: you may need additional CLI flags. See the examples in this repo and the README in the app repo: https://github.com/mintoolkit/mint
mintoolkit
(aka docker-slim
and slimtoolkit
) has been used with Node.js, Python, Ruby, Java, Go, Rust, Elixir and PHP (some app types) running on Ubuntu, Debian, CentOS and Alpine Linux.
Active areas of interest:
- Complex Python, Ruby and PHP examples with the popular application servers and Nginx or Apache.
- Python, Node.js, Ruby and PHP applications packaged in CentOS-based images.
- Examples with fat container images with multiple components/applications/services.
- Examples with the most popular process supervisors / init tools.
Node.js application images:
- from ubuntu:14.04 - 432MB => 14MB (minified by 30.85X)
- from debian:jessie - 406MB => 25.1MB (minified by 16.21X)
- from node:alpine - 66.7MB => 34.7MB (minified by 1.92X)
- from node:distroless - 72.7MB => 39.7MB (minified by 1.83X)
Python application images:
- from ubuntu:14.04 - 438MB => 16.8MB (minified by 25.99X)
- from python:2.7-alpine - 84.3MB => 23.1MB (minified by 3.65X)
- from python:2.7.15 - 916MB => 27.5MB (minified by 33.29X)
- from centos:7 - 647MB => 23MB (minified by 28.57X)
- from centos/python-27-centos7 - 700MB => 24MB (minified by 29.01X)
- from python2.7:distroless - 60.7MB => 18.3MB (minified by 3.32X)
Ruby application images:
- from ubuntu:14.04 - 433MB => 13.8MB (minified by 31.31X)
- from ruby:2.2-alpine - 319MB => 27MB (minified by 11.88X)
- from ruby:2.5.3 - 978MB => 30MB (minified by 32.74X)
Go application images:
- from golang:latest - 700MB => 1.56MB (minified by 448.76X)
- from ubuntu:14.04 - 531MB => 1.87MB (minified by 284.10X)
- from golang:alpine - 258MB => 1.56MB (minified by 165.61X)
- from centos:7 - 615MB => 1.87MB (minified by 329.14X)
Rust application images:
- from rust:1.31 - 2GB => 14MB (minified by 147.16X)
Java application images:
- from ubuntu:14.04 - 743.6 MB => 100.3 MB
PHP application images:
- from php:7.0-cli - 368MB => 26.6MB (minified by 13.85X)
Haskell application images:
- (Scotty service) from haskell:8 - 2.09GB => 16.6MB (minified by 125.32X)
- (Scotty service) from haskell:7 - 1.5GB => 21MB (minified by 71X)
Elixir application images:
- (Phoenix service) from elixir:1.6 - 1.1GB => 37MB (minified by 29.25X)
.NET application images:
- from mcr.microsoft.com/dotnet/runtime-deps:5.0-alpine-amd64 - 31MB => 28MB (minified by 1.11X)
- from mcr.microsoft.com/dotnet/runtime-deps:5.0-buster-slim-amd64 - 132MB => 32MB (minified by 4.11X)
- from mcr.microsoft.com/dotnet/runtime-deps:5.0-focal-amd64 - 140MB => 32MB (minified by 4.31X)
While Mint is capable of more, at the moment, the majority of the examples illustrate
the image minification procedure using mint build
(aka mint slim
) command in its various modes.
A typical example has a README file describing its purpose and basic usage.
Normally, there is also a Makefile with the default
target. So, running
make
or make default
from inside of the example folder would execute the example
for you end-to-end outputting all the used commands on the way.
Most frequently used make
targets:
# All example types
make # run example (semi-automatic)
make test-e2e # run the acceptance test suite
make clean # remove all artifacts created by this example
# 'CLI application' example type
make fat-build # build the "fat" version of the image
make fat-run-interactive # run the CLI app using the "fat" image
make slim-build # turn the "fat" image into a "slim" one
make slim-run-interactive # run the CLI app using the "slim" image
make slim-build-from-dockerfile # build the "slim" version of the image using the "fat" Dockerfile
# 'Web Service' example type
make fat-build # build the "fat" version of the image
make fat-run # run the web service using the "fat" image
make fat-run-seccomp # run the "fat" image using generated seccomp profile
make fat-validate # send a request to the running web service
make fat-stop # stop the running web service
make slim-build # turn the "fat" image into a "slim" one
make slim-run # run the web service using the "slim" image
make slim-run-seccomp # run the "slim" image using generated seccomp profile
make slim-validate # send a request to the running web service
make slim-stop # stop the running web service
make slim-build-from-dockerfile # build the "slim" version of the image using the "fat" Dockerfile
make debug-sidecar # run a debug sidecar container with an interactive shell
# 'Docker Compose' example type
make fat-build # build the "fat" version of the image
make fat-run # run the compose file using the "fat" image
make fat-validate # send a request to the running web service
make fat-stop # stop the running web service
make slim-build-compose # turn the "fat" image into a "slim" one using docker-compose file
make slim-run # run the compose file using the "slim" image
make slim-validate # send a request to the running web service
make slim-stop # stop the running web service