Official Ubuntu Docker image became very thin, LTS 18.04 version has only 37 MB. Docker images can become huge if we are not careful. Some of best practices for having thin images.
1. Best Practices creating Docker image
1.1. Install only necessary tools
While creating Docker images follow single responsibility principle. Image should run only one task. Some exceptions are allowed for images that are used in infrastructure.
1.2. Clean up after installation
Cleanup unnecessary packages after installation. In Ubuntu, you can remove apt package lists (a few megabytes).
rm -rf /var/lib/apt/lists/*
1.3. Create meaningful layers
Docker creates a new layer for each
ADD, while it is a bad practice to invoke each copy or command as separate instructions, sometimes is better to create separate layer for specific installation. This way is possible to reuse layers in later builds.
1.4. Add labels
Add labels to all Docker images. You can put any relevant information in labels. This way will be easier in future to identify image. In big environment each product can have multiple images, for different stages, different branches, etc.
2. Dockerfile example
FROM ubuntu:18.04 LABEL maintainer="email@example.com" LABEL net.plavcak.version="1.0.0" LABEL net.plavcak.repository="https://github.com/plavc/static-site-tools.git" LABEL net.plavcak.branch="master" RUN apt-get update && \ apt-get install hugo -y --no-install-recommends && \ apt-get install ruby -y --no-install-recommends && \ rm -rf /var/lib/apt/lists/* RUN gem install asciidoctor && \ mkdir /workspace WORKDIR /workspace EXPOSE 1313