Bird
Raised Fist0
Dockerdevops~10 mins

Layer caching and ordering in Docker - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the Dockerfile line to set the base image.

Docker
FROM [1]
Drag options to blanks, or click blank then click option'
Aubuntu:20.04
BRUN apt-get update
CCOPY . /app
DEXPOSE 80
Attempts:
3 left
💡 Hint
Common Mistakes
Using RUN or COPY instead of FROM for the base image.
Forgetting to specify a tag for the image.
2fill in blank
medium

Complete the Dockerfile line to copy files into the image.

Docker
COPY [1] /app
Drag options to blanks, or click blank then click option'
Aapp/
Bapt-get update
C/app
DRUN
Attempts:
3 left
💡 Hint
Common Mistakes
Using commands like RUN instead of a path.
Using absolute paths incorrectly.
3fill in blank
hard

Fix the error in the Dockerfile line to install packages.

Docker
RUN apt-get [1] && apt-get install -y curl
Drag options to blanks, or click blank then click option'
Ainstall
Bupgrade
Cupdate
Dremove
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'install' instead of 'update' in the first command.
Using 'remove' which deletes packages.
4fill in blank
hard

Fill both blanks to create a cache-friendly Dockerfile line that installs packages.

Docker
RUN apt-get [1] && apt-get [2] -y curl wget
Drag options to blanks, or click blank then click option'
Aupdate
Binstall
Cremove
Dupgrade
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping the order of commands.
Using 'remove' or 'upgrade' incorrectly.
5fill in blank
hard

Fill all three blanks to create a cache-efficient Dockerfile snippet that copies files, installs dependencies, and cleans up.

Docker
COPY [1] /app
RUN apt-get update && apt-get [2] -y python3-pip && apt-get [3] -y
Drag options to blanks, or click blank then click option'
Arequirements.txt
Binstall
Cautoremove
Dupdate
Attempts:
3 left
💡 Hint
Common Mistakes
Copying wrong files.
Using 'update' instead of 'install' for package installation.
Not cleaning up unused packages.

Practice

(1/5)
1. What is the main benefit of ordering instructions properly in a Dockerfile regarding layer caching?
easy
A. It allows running containers faster
B. It reduces the final image size automatically
C. It makes the Dockerfile easier to read
D. It speeds up rebuilds by reusing cached layers

Solution

  1. Step 1: Understand Docker layer caching

    Docker caches each build step as a layer. If a step and all previous steps are unchanged, Docker reuses the cached layer.
  2. Step 2: Effect of instruction order on caching

    Placing stable instructions early means those layers rarely change and get reused, speeding up rebuilds.
  3. Final Answer:

    It speeds up rebuilds by reusing cached layers -> Option D
  4. Quick Check:

    Layer caching = faster rebuilds [OK]
Hint: Put stable steps first to reuse cache and speed builds [OK]
Common Mistakes:
  • Thinking order reduces image size automatically
  • Believing order affects container runtime speed
  • Confusing readability with caching benefits
2. Which of the following Dockerfile instructions is best placed near the top to maximize cache reuse?
easy
A. RUN apt-get update && apt-get install -y curl
B. ENV APP_ENV=production
C. COPY ./app /app
D. RUN pip install -r requirements.txt

Solution

  1. Step 1: Identify stable vs frequently changing instructions

    ENV instructions usually change less often than copying app code or installing packages.
  2. Step 2: Place stable instructions early

    Placing ENV early helps cache it and subsequent layers, avoiding rebuilds when code changes.
  3. Final Answer:

    ENV APP_ENV=production -> Option B
  4. Quick Check:

    Stable instructions early = better cache [OK]
Hint: Put environment variables before copying code [OK]
Common Mistakes:
  • Putting COPY before ENV causing cache bust
  • Installing packages after code copy
  • Assuming RUN commands never change
3. Given this Dockerfile snippet, what happens if you change only app.py and rebuild?
FROM python:3.12
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY app.py /app/
CMD ["python", "/app/app.py"]
medium
A. Only the last COPY and CMD steps are rebuilt; earlier layers are cached
B. All layers are rebuilt from the first COPY instruction
C. The RUN step is rebuilt but COPY steps are cached
D. The entire image is rebuilt ignoring cache

Solution

  1. Step 1: Identify which layers change

    Changing app.py affects only the COPY app.py step and later steps.
  2. Step 2: Understand Docker caching behavior

    Layers before COPY app.py remain unchanged and cached, so only last COPY and CMD rebuild.
  3. Final Answer:

    Only the last COPY and CMD steps are rebuilt; earlier layers are cached -> Option A
  4. Quick Check:

    Change in later file = rebuild later layers only [OK]
Hint: Change late files to rebuild fewer layers [OK]
Common Mistakes:
  • Assuming all layers rebuild on any file change
  • Thinking RUN step rebuilds when app.py changes
  • Believing CMD step never rebuilds
4. You have this Dockerfile:
FROM node:20
COPY . /app
RUN npm install
CMD ["node", "/app/index.js"]

After changing index.js, the npm install step runs again. Why?
medium
A. Because COPY . /app invalidates cache for all later steps
B. Because package.json was changed
C. Because npm install always runs
D. Because index.js is copied before npm install

Solution

  1. Step 1: Analyze Dockerfile order and cache invalidation

    COPY . /app copies all files including index.js before npm install step.
  2. Step 2: Effect of changing index.js on cache

    Changing index.js changes the context for COPY . /app, invalidating cache for that step and all following steps, including npm install.
  3. Final Answer:

    Because COPY . /app invalidates cache for all later steps -> Option A
  4. Quick Check:

    Later COPY changes bust cache for previous RUN [OK]
Hint: Copy package files before code to cache npm install [OK]
Common Mistakes:
  • Thinking npm install always runs
  • Assuming index.js change affects package.json
  • Believing COPY . /app is placed after npm install
5. You want to optimize this Dockerfile for faster rebuilds when source code changes:
FROM python:3.12
COPY . /app
RUN pip install -r /app/requirements.txt
CMD ["python", "/app/app.py"]

What is the best change to improve layer caching?
hard
A. Add ENV variables before COPY
B. Move CMD before RUN to cache install step
C. Copy only requirements.txt first, run pip install, then copy rest of source code
D. Combine COPY and RUN into one step

Solution

  1. Step 1: Identify frequent changes and stable files

    Source code changes often, requirements.txt changes less frequently.
  2. Step 2: Reorder Dockerfile for caching

    Copy requirements.txt and run pip install first to cache dependencies, then copy source code to avoid reinstalling on code changes.
  3. Final Answer:

    Copy only requirements.txt first, run pip install, then copy rest of source code -> Option C
  4. Quick Check:

    Separate dependencies copy for caching [OK]
Hint: Copy dependencies first, then source code [OK]
Common Mistakes:
  • Moving CMD before RUN (invalid order)
  • Combining COPY and RUN loses cache benefits
  • Adding ENV doesn't affect caching of installs
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