In this lesson, you will learn how Docker’s layered architecture functions as a "stack of transparencies" to build your images efficiently.
The Stacked Approach
When you build a Docker image, Docker doesn't just create one giant file. Instead, it creates a series of read-only layers. Think of these layers like a stack of transparent plastic sheets. Each layer represents a specific instruction from your Dockerfile, such as RUN, COPY, or ENV.
When you run a command like RUN apt-get update, Docker executes the command and saves the resulting filesystem changes as a new, immutable layer on top of the existing ones. Because each layer is read-only, once a layer is created, it cannot be modified—it can only be replaced by a new layer on top of it.
Impact on the Build Process
This architecture is the secret behind Docker’s speed. Docker uses a build cache to identify if a layer needs to be rebuilt. If you change a line in your Dockerfile, Docker checks every instruction from top to bottom:
# Layer 1: Base image
FROM ubuntu:22.04
# Layer 2: Changes here will trigger a rebuild for this and all subsequent layers
RUN apt-get update && apt-get install -y python3
# Layer 3: This will use the cache if Layer 2 hasn't changed
COPY app.py /app/app.py
If you modify Layer 2, Docker realizes that the cache for that step is invalidated. Because Layer 3 depends on the environment created by Layer 2, Docker must rebuild Layer 3 as well, even if the COPY instruction itself hasn't changed. This is why the order of your instructions is critical; by placing commands that change frequently (like copying source code) toward the end of your Dockerfile, you ensure that the more stable, time-consuming layers (like installing system dependencies) are reused from the cache.
By understanding that each command creates a snapshot, you can structure your build process to minimize work and speed up your CI/CD pipelines significantly.
Key Takeaway: Docker builds images as an immutable stack of layers, where modifying an instruction invalidates the cache for that layer and all subsequent layers in the build.