updated on December 23
So you ever wondered why your docker build takes so long to startup when all you do is adding a few files to your image and setting which command to run?
Fear no more!
.dockerignore to the rescue ⚓️.
Whenever you build a docker image the first thing you will always see is the following:
docker build -t my-image . Sending build context to Docker daemon 203.2MB Step 1/6 : FROM ...
The important thing to note is the context with a size of
203.2MB in this case. What does it mean?
Every time a docker image gets built, it requires the context. By default it’s simply the directory of your
Dockerfile. Basically it’s the folder from which you can add files to the image you are building.
This means that for each build, the docker client sends the whole directory to the docker engine to build.
If you are unlucky this includes either the whole node_modules folder, maybe a virtual env folder for your python or simply everything in your dist folder. In my case it was a venv with 200+MB of data.
This slows down the process significantly and if you are iterating on a dockerfile making only a few tweak this can be very tearing.
Waiting is the most boring (duh) and painful thing ever.Every person on this planet
Simply create a
.dockerignore file inside of your context (basically in the same directory as your
Dockerfile) and specify what to include, what to ignore. It works just like our trusted
Im my case I only wanted to have my
requirements.txt and the
.py files inside of my
# Ignore everything ** !/requirements.txt !/src **/__pycache__
If I run
docker build again watch what happens:
docker build -t my-image . Sending build context to Docker daemon 37.38kB Step 1/6 : FROM ...
Awesome! The context shrunk from 200MB to under 50kB and the startup time of docker build was greatly reduced. This will help substantially if you have a lot of files, like e.g. a node_modules folder.