With the advent of the Multi Stage Dockerfile, it's very common for people to very specific layers that do a single task; which often utilise the same
"primary" base layer.
FROM elixir:1.8 AS deps RUN mix deps.get FROM elixir:1.8 AS compile COPY --from=deps ... RUN mix compile
This allows lengthy tasks to utilise the build cache and pass artefacts between layers, without rerunning the lengthy task. However, I often see this "primary" layer duplicated 4/6/10 times in a single Dockerfile; making maintenance cumbersome.
Create an empty layer with your primary image:
FROM elixir:1.8 AS base FROM base AS deps # ... FROM base AS compile # ...
This reduces duplication and makes maintenance, and pull-requests, easier to review/manage/change.
Until next time