This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the containerization category.
Last Updated: 2024-11-23
A Dockerfile runs a sequence of commands and caches the result of each one. Imagine you have ten commands: if the cache is invalidated for the sixth, then the last four are run without a cache.
This means you should trigger changes using artifacts. E.g. if you want the
results of npm install
to update based on package.json, ensure you COPY
package.json
before running the npm install
.
Also, watch out for commands like RUN git clone xyz
- this will get cached no
matter what. In which case, get around it either by busting the cache by
changing something before that point in the Dockerfile, or running docker build
with --no-cache
.
Another option is to automatically modify the Dockerfile each time with another
script - such that the line in question becomes: RUN touch
/foo-1234567abc.sh
, i.e. the filename 123467abc there being a unique id