Docker is a popular platform for containerizing applications, allowing developers to package their applications with all the necessary dependencies and configurations into a single unit that can be easily deployed across different environments. However, one common issue with Docker images is their large size, which can lead to slow build times and increased storage costs. This is where the Docker-slim tool comes in handy.
Docker-slim is an popular open-source DevOps tool that helps create slim/minimal Docker images by optimizing the container size and removing unnecessary files, packages and dependencies. In this article, we will guide you on how to install Docker -slim and use it to create a slim Docker image for Golang compiler.
Docker-slim can be installed in different ways depending on your platform, as shown below. But first we need to download executable binaries:
Download Slim tool
You can download the Docker-slim binary for your platform using the links provided below:
- Latest Mac binaries(
curl -L -o ds.zip https://downloads.dockerslim.com/releases/1.40.0/dist_mac.zip)
- Latest Mac M1 binaries (
curl -L -o ds.zip https://downloads.dockerslim.com/releases/1.40.0/dist_mac_m1.zip)
- Latest Linux binaries (
curl -L -o ds.tar.gz https://downloads.dockerslim.com/releases/1.40.0/dist_linux.tar.gz)
- Latest Linux ARM binaries (
curl -L -o ds.tar.gz https://downloads.dockerslim.com/releases/1.40.0/dist_linux_arm.tar.gz)
- Latest Linux ARM64 binaries (
curl -L -o ds.tar.gz https://downloads.dockerslim.com/releases/1.40.0/dist_linux_arm64.tar.gz)
Once downloaded, extract the archive and optionally move the executable binaries to your
bin directory or any directory which is in
$PATH. For Linux/Mac, use the following commands:
tar -xvf ds.tar.gz mv ds/* /usr/local/bin/.
You can use
slim update to update slim to latest version after installation.
Another way to install Docker-slim is by using a script on Linux and macOS platforms. Use the following command to start bash script which installs
slim tool on your machine:
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -
If you are using Homebrew package manager on macOS, you can install Docker-slim using the following command:
brew install docker-slim
Creating a Slim Docker Image for Go
We have a custom
Dockerfile for building Go compiler image as follows:
FROM golang:1.16 RUN apt-get -y install git WORKDIR /usr/src/app RUN git clone https://github.com/kr/godep.git COPY . . CMD ["tail", "-f", "/dev/null"]
We can see that few commands we need to keep for a functional Go compiler which are as follows:
go- Golang executable for compiling and executing programs.
apt-get- Installing git.
git- Download extra dependencies for Go.
tail- Output appended data to
bash- Optionals tools to do basic operations in Linux
- Build docker image using normal method. In this example, we will use the docker build command for building the image from
docker build -t go-env:latest .
Check the new image we built:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE go-env latest c27eca3990ed 13 seconds ago 921MB
- Next command will analyse the target container image (in this case, Go with debian distro image), along with the
goprogram, and build a new optimized image named
slim build --target go-env:latest --tag go-env:slim --http-probe=false --exec "go version"
--http-probe=falseoption disables the HTTP probe that docker-slim uses to verify that the container is running correctly.
--execoption specifies the command to run inside the container to determine the application's runtime dependencies. (makes sure that this package is not removed to make the image slim)
You can check images using the command below:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE go-env slim 65d9cdf799a6 5 seconds ago 17.1MB docker-slim-empty-image latest 3f098d6f3d22 9 seconds ago 0B go-env latest c27eca3990ed 10 minutes ago 921MB
Similarly, we can specify other tools to keep in the go docker image by separating with
&& operater as follows:
$ slim build --target go-env:latest --tag go-env:slim1 --http-probe=false --exec "go version && bash && mv --help && cp --help && cat --help && ls --help && tail --help && apt-get --help && git --help"
- Finally, you can verify that the new slim image is significantly smaller than the original image by running the
docker image lscommand:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE go-env slim1 4433a43fec5d 5 seconds ago 32.8MB go-env slim 65d9cdf799a6 3 minutes ago 17.1MB docker-slim-empty-image latest 3f098d6f3d22 3 minutes ago 0B go-env latest c27eca3990ed 14 minutes ago 921MB
This command will display the list of Docker images, along with their sizes. You should see that the new slim image takes up significantly less space than the original image.
Creating slim Docker images using docker-slim is a straightforward process that can help reduce the size of your Docker images and improve their security and performance. With docker-slim, you can analyze your container image and application, and build a new optimized image that takes up less space and consumes fewer resources.