Back to roadmaps docker Course

Optimizing Builds: Managing Layers and Build Cache

Slow container builds disrupt local development loops. Let us explore strategies to speed up your builds by leveraging Docker's layer cache.


1. How the Docker Build Cache Works

When building an image, Docker evaluates each step in your Dockerfile sequentially. If a step and its input files have not changed since the previous build, Docker uses the cached layer instead of executing the instruction again:

Step 3/6 : COPY package.json .
 ---> Using cache

If a step is invalidated (for example, a file copied by a COPY directive is modified), Docker discards the cache for that step and all subsequent steps, rebuilding them from scratch.


2. Best Practices for Cache Utilization

Order of Copying

Place steps that change frequently (like your application source code) as late in the Dockerfile as possible. Place slow, stable steps (like installing dependencies) early in the file:

# GOOD STRUCTURE
COPY package.json package-lock.json ./
RUN npm install # Only re-runs if package.json files are modified

COPY src/ ./src # Changes to source code do not invalidate the npm install layer cache

Minimize Layers

Each RUN, COPY, and ADD directive creates a new layer in your image. Combine multiple shell operations into a single RUN directive using && and backslashes to reduce the final layer count:

# BAD: Creates 3 separate image layers
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y curl

# GOOD: Creates 1 single image layer
RUN apt-get update && apt-get install -y \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*
Published on Last updated: