TL;DR Creating the smallest possible Docker container is simple. There is a standard base image available called scratch. However, if you want to do something with the scratch container, you need to provide it with an executable that has no dependencies. This blog post explains how to create such an executable using GoLang. It also describes how to control Docker from withun Docker and how to create a Docker container that creates a Docker container.