0
0
Dockerdevops~20 mins

Layer caching and ordering in Docker - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Layer Caching Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Effect of Dockerfile instruction order on cache usage

Consider this Dockerfile snippet:

FROM python:3.12-slim
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app/
CMD ["python", "/app/app.py"]

If you change the order of the COPY instructions to copy the entire app directory before copying requirements.txt, what will happen when you rebuild the image after only changing app.py?

Docker
FROM python:3.12-slim
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app/
CMD ["python", "/app/app.py"]
ADocker will reuse the cached layer for pip install because requirements.txt did not change.
BDocker will fail to build because of conflicting COPY instructions.
CDocker will skip copying app.py because it was not changed.
DDocker will rerun pip install because copying the entire app directory first invalidates the cache for requirements.txt.
Attempts:
2 left
💡 Hint

Think about how Docker caches layers based on the exact content of files copied before a RUN command.

🧠 Conceptual
intermediate
1:30remaining
Why is ordering Dockerfile instructions important for caching?

Which statement best explains why ordering instructions in a Dockerfile affects build speed?

ADocker caches each layer and reuses it only if the instruction and its context have not changed, so ordering stable instructions first maximizes cache reuse.
BDocker executes instructions in parallel, so order does not affect caching.
CDocker ignores file changes when caching layers, so ordering only affects readability.
DDocker rebuilds all layers every time regardless of instruction order.
Attempts:
2 left
💡 Hint

Think about what triggers cache invalidation in Docker builds.

Troubleshoot
advanced
2:00remaining
Diagnosing unexpected cache invalidation in Docker builds

You notice that your Docker build always reruns RUN npm install even though package.json has not changed. Your Dockerfile snippet is:

FROM node:20
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]

What is the most likely cause?

Docker
FROM node:20
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]
ACopying the entire directory before <code>RUN npm install</code> causes cache invalidation if any file changes, even unrelated ones.
BThe <code>npm install</code> command always runs and is never cached.
CThe <code>WORKDIR</code> instruction invalidates the cache for <code>RUN npm install</code>.
DThe <code>CMD</code> instruction causes cache invalidation for previous layers.
Attempts:
2 left
💡 Hint

Consider what files affect the cache for the RUN npm install layer.

🔀 Workflow
advanced
2:30remaining
Optimizing Dockerfile for faster rebuilds with frequent code changes

You have a Python app with dependencies listed in requirements.txt. You frequently change app.py but rarely change dependencies. Which Dockerfile instruction order best optimizes build caching?

A
COPY . /app
RUN pip install -r /app/requirements.txt
CMD ["python", "/app/app.py"]
B
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app/
CMD ["python", "/app/app.py"]
C
RUN pip install -r /app/requirements.txt
COPY . /app/
CMD ["python", "/app/app.py"]
D
COPY app.py /app/
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
CMD ["python", "/app/app.py"]
Attempts:
2 left
💡 Hint

Think about which files change often and which do not, and how Docker caches layers.

Best Practice
expert
3:00remaining
Best practice for minimizing Docker image rebuild time with frequent source code changes

Which Dockerfile layering strategy best minimizes rebuild time when source code changes frequently but dependencies rarely change?

ACombine all COPY commands into one to reduce layers and copy everything at once.
BCopy source code first, then dependency files, then install dependencies to ensure latest code is always used.
CCopy dependency files first, run dependency installation, then copy source code separately to maximize cache reuse of dependencies.
DRun dependency installation before any COPY commands to avoid copying unnecessary files.
Attempts:
2 left
💡 Hint

Consider how Docker cache invalidation works with file changes and layer order.