Bird
Raised Fist0
Dockerdevops~5 mins

Squashing layers in Docker - Commands & Configuration

Choose your learning style10 modes available
Introduction
When you build a Docker image, each command creates a new layer. Squashing layers means combining these layers into fewer layers to make the image smaller and simpler.
When you want to reduce the size of your Docker image to save disk space and speed up downloads.
When you want to hide intermediate build steps and keep your image clean.
When you have many small layers from multiple RUN commands and want to combine them.
When you want to improve caching efficiency by reducing the number of layers.
When you want to optimize images for production deployment.
Config File - Dockerfile
Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl
RUN curl -o /tmp/sample.txt https://example.com/sample.txt
RUN echo "Hello World" > /tmp/hello.txt
CMD ["cat", "/tmp/hello.txt"]

This Dockerfile starts from an Ubuntu base image.

It updates package lists and installs curl in one layer.

Then it downloads a sample file in another layer.

It creates a text file in a third layer.

The CMD runs a command to show the hello.txt content.

Commands
This command builds the Docker image from the Dockerfile in the current folder and squashes all layers into one to reduce image size.
Terminal
docker build --squash -t my-squashed-image .
Expected OutputExpected
[+] Building 10.2s (8/8) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 123B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/ubuntu:22.04 => [1/4] FROM docker.io/library/ubuntu:22.04 => CACHED => [2/4] RUN apt-get update && apt-get install -y curl => [3/4] RUN curl -o /tmp/sample.txt https://example.com/sample.txt => [4/4] RUN echo "Hello World" > /tmp/hello.txt => exporting to image => => exporting layers => => writing image sha256:abc123def4567890 => => naming to docker.io/library/my-squashed-image
→
--squash - Combines all layers into one during build to reduce image size.
→
-t - Tags the image with a name for easy reference.
This command lists the image details to verify the image was created and check its size.
Terminal
docker images my-squashed-image
Expected OutputExpected
REPOSITORY TAG IMAGE ID CREATED SIZE my-squashed-image latest abc123def456 10 seconds ago 75MB
Runs the image to check that the final command works and the image behaves as expected.
Terminal
docker run --rm my-squashed-image
Expected OutputExpected
Hello World
→
--rm - Automatically removes the container after it exits.
Key Concept

If you remember nothing else from this pattern, remember: squashing combines multiple image layers into one to make Docker images smaller and cleaner.

Common Mistakes
Trying to use --squash without enabling experimental features in Docker.
The --squash flag requires Docker's experimental mode to be enabled, otherwise the build will fail.
Enable experimental features by adding {"experimental": "enabled"} to the Docker CLI config file or use Docker BuildKit which supports squashing.
Using multiple RUN commands without squashing and expecting a small image.
Each RUN command creates a new layer, so the image size grows with each command.
Combine commands in a single RUN or use --squash to merge layers.
Summary
Use the --squash flag with docker build to combine image layers into one.
Squashing reduces image size and hides intermediate build steps.
Verify the image size and functionality by listing images and running the container.

Practice

(1/5)
1. What is the main purpose of docker build --squash?
easy
A. To speed up the build process by skipping some steps
B. To create multiple images from one Dockerfile
C. To combine multiple image layers into a single layer to reduce image size
D. To automatically update the base image to the latest version

Solution

  1. Step 1: Understand what layers are in Docker images

    Docker images are made of layers created by each command in the Dockerfile.
  2. Step 2: Purpose of squashing layers

    Squashing merges these layers into one to reduce the final image size and improve efficiency.
  3. Final Answer:

    To combine multiple image layers into a single layer to reduce image size -> Option C
  4. Quick Check:

    Squashing = combining layers [OK]
Hint: Squash means merge layers to save space [OK]
Common Mistakes:
  • Thinking it speeds up build time
  • Confusing squashing with creating multiple images
  • Assuming it updates base images automatically
2. Which of the following is the correct syntax to build a Docker image with squashed layers?
easy
A. docker build -squash=true -t myimage .
B. docker build -squash -t myimage .
C. docker build --squash=true -t myimage .
D. docker build --squash -t myimage .

Solution

  1. Step 1: Check the correct flag format for squashing

    The correct flag is --squash without an equals sign or single dash.
  2. Step 2: Validate the full command syntax

    The command docker build --squash -t myimage . correctly uses the flag and tags the image.
  3. Final Answer:

    docker build --squash -t myimage . -> Option D
  4. Quick Check:

    Correct flag is double dash --squash [OK]
Hint: Use double dash --squash without equals sign [OK]
Common Mistakes:
  • Using single dash -squash
  • Adding =true after --squash
  • Misplacing the flag after the context dot
3. Given this Dockerfile:
FROM alpine
RUN echo 'Hello' > /file1
RUN echo 'World' > /file2

What is the main difference in the image size when built with and without --squash?
medium
A. The image with --squash is smaller because layers are combined
B. The image with --squash is larger because it adds extra metadata
C. Both images have the same size because layers do not affect size
D. The image without --squash is smaller because layers are cached

Solution

  1. Step 1: Understand how layers affect image size

    Each RUN command creates a new layer, adding to the total image size.
  2. Step 2: Effect of --squash on layers

    Using --squash merges layers, removing intermediate data and reducing size.
  3. Final Answer:

    The image with --squash is smaller because layers are combined -> Option A
  4. Quick Check:

    Squash reduces size by merging layers [OK]
Hint: Squash merges layers, reducing image size [OK]
Common Mistakes:
  • Thinking squashing adds metadata and increases size
  • Believing layers do not affect image size
  • Confusing caching with squashing effects
4. You run docker build --squash -t myapp . but get an error saying the flag is unknown. What is the most likely cause?
medium
A. The image tag is missing
B. Docker experimental features are not enabled
C. The Dockerfile has syntax errors
D. The build context path is incorrect

Solution

  1. Step 1: Understand requirements for --squash flag

    The --squash flag requires Docker experimental features to be enabled.
  2. Step 2: Identify cause of unknown flag error

    If experimental features are off, Docker does not recognize --squash and throws an error.
  3. Final Answer:

    Docker experimental features are not enabled -> Option B
  4. Quick Check:

    Enable experimental features to use --squash [OK]
Hint: Enable experimental features to use --squash [OK]
Common Mistakes:
  • Assuming Dockerfile errors cause unknown flag
  • Thinking missing tag causes flag error
  • Blaming build context path for flag issues
5. You want to reduce your Docker image size by squashing layers but also keep some intermediate layers for caching. Which approach is best?
hard
A. Use multi-stage builds and squash only the final stage
B. Use --squash on every build to squash all layers
C. Avoid squashing and rely on layer caching only
D. Manually delete intermediate files after build

Solution

  1. Step 1: Understand multi-stage builds

    Multi-stage builds allow creating intermediate images for caching and a final optimized image.
  2. Step 2: Combine multi-stage builds with squashing

    Squashing only the final stage reduces image size while keeping intermediate layers for cache.
  3. Final Answer:

    Use multi-stage builds and squash only the final stage -> Option A
  4. Quick Check:

    Multi-stage + squash final stage = best size and cache [OK]
Hint: Squash final stage in multi-stage builds for best results [OK]
Common Mistakes:
  • Squashing all layers loses caching benefits
  • Avoiding squashing misses size reduction
  • Deleting files manually is error-prone
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard