DEV Community

loading...

Dockerfile Tip 1: Define a Base Layer

David McKay
đŸ’ŧ @EquinixMetal 🌟 #CloudNative #DevRel #InfluxAce #Observability đŸŽŦ https://rawkode.live đŸ’Ŧ https://rawkode.live/chat (Discord) 💁‍♂ī¸ https://rawko.de/office-hours ℹī¸ He / Him
ãƒģ1 min read

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.

Example:

FROM elixir:1.8 AS deps

RUN mix deps.get

FROM elixir:1.8 AS compile

COPY --from=deps ...

RUN mix compile
Enter fullscreen mode Exit fullscreen mode

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.

The Tip

Create an empty layer with your primary image:

FROM elixir:1.8 AS base

FROM base AS deps

# ...

FROM base AS compile

# ...
Enter fullscreen mode Exit fullscreen mode

This reduces duplication and makes maintenance, and pull-requests, easier to review/manage/change.

Until next time
🤘

Discussion (0)