Bird
Raised Fist0
Nginxdevops~20 mins

Multi-stage builds for static sites in Nginx - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Multi-stage Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of multi-stage Docker build for static site
Given this Dockerfile for a static site using multi-stage build, what will be the output of docker images after building?
Nginx
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
AAn image named 'node' with the source code and node_modules installed
BAn image named 'nginx' with the static site files in /usr/share/nginx/html
CTwo images: one for 'node' builder and one for 'nginx' with static files
DNo images created because multi-stage builds do not produce images
Attempts:
2 left
💡 Hint
Think about what the final stage in a multi-stage build produces as the image.
❓ Configuration
intermediate
1:30remaining
Correct COPY command in multi-stage Dockerfile
Which COPY command correctly copies the built static files from the builder stage to the nginx image in a multi-stage Dockerfile?
ACOPY --from=nginx /app/dist /usr/share/nginx/html
BCOPY /app/dist /usr/share/nginx/html
CCOPY --from=builder /app/dist /usr/share/nginx/html
DCOPY --from=builder /usr/share/nginx/html /app/dist
Attempts:
2 left
💡 Hint
Remember to specify the source stage and correct source and destination paths.
🔀 Workflow
advanced
2:30remaining
Order of steps in multi-stage Dockerfile for static site
Arrange the following steps in the correct order for a multi-stage Dockerfile that builds a static site and serves it with nginx.
A4,1,2,3
B4,2,1,3
C2,4,1,3
D1,4,2,3
Attempts:
2 left
💡 Hint
Start with the builder stage, then build, then switch to nginx stage and copy files.
❓ Troubleshoot
advanced
2:00remaining
Why does nginx serve a 404 error after multi-stage build?
You built a static site with a multi-stage Dockerfile but nginx returns 404 for all pages. What is the most likely cause?
AThe COPY command copied files to the wrong directory inside nginx image
BThe builder stage failed to run npm install
Cnginx image does not support static files
DThe Dockerfile is missing the EXPOSE 80 instruction
Attempts:
2 left
💡 Hint
Check where nginx expects static files to be located.
✅ Best Practice
expert
3:00remaining
Optimizing multi-stage Dockerfile for smallest image size
Which practice best reduces the final image size when building a static site with multi-stage Dockerfile?
ARun npm install in the final stage instead of builder stage
BInstall all build tools in the final nginx image
CCopy node_modules folder to the final image for caching
DUse a minimal base image like nginx:alpine for the final stage
Attempts:
2 left
💡 Hint
Think about what is needed in the final image to serve static files only.

Practice

(1/5)
1. What is the main benefit of using multi-stage builds for static sites with nginx?
easy
A. It automatically updates static files without rebuilding the image.
B. It allows running multiple nginx servers in one container.
C. It reduces the final image size by separating build and serve stages.
D. It enables dynamic content generation inside the nginx container.

Solution

  1. Step 1: Understand multi-stage build purpose

    Multi-stage builds separate the build process from the final image, so only necessary files are included.
  2. Step 2: Identify benefits for static sites

    This separation reduces the final image size and improves security by excluding build tools from the runtime image.
  3. Final Answer:

    It reduces the final image size by separating build and serve stages. -> Option C
  4. Quick Check:

    Multi-stage builds = smaller images [OK]
Hint: Remember: build tools stay out of final image for smaller size [OK]
Common Mistakes:
  • Thinking multi-stage runs multiple nginx servers
  • Believing static files update automatically without rebuild
  • Confusing static site builds with dynamic content generation
2. Which Dockerfile snippet correctly copies static files from a builder stage to the nginx stage?
easy
A. COPY --to=builder /app/dist /usr/share/nginx/html
B. COPY /app/dist /usr/share/nginx/html --from=builder
C. COPY /usr/share/nginx/html /app/dist --from=builder
D. COPY --from=builder /app/dist /usr/share/nginx/html

Solution

  1. Step 1: Recall correct COPY syntax for multi-stage

    The syntax is COPY --from=stage source_path destination_path.
  2. Step 2: Match snippet to syntax

    COPY --from=builder /app/dist /usr/share/nginx/html uses COPY --from=builder /app/dist /usr/share/nginx/html which is correct.
  3. Final Answer:

    COPY --from=builder /app/dist /usr/share/nginx/html -> Option D
  4. Quick Check:

    COPY --from=stage source dest = correct [OK]
Hint: COPY uses --from=stage before source path [OK]
Common Mistakes:
  • Placing --from after paths
  • Using --to instead of --from
  • Reversing source and destination paths
3. Given this Dockerfile snippet, what will be the size impact on the final image?
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
medium
A. Final image will be small because only nginx and static files are included.
B. Final image will be empty because build files are not copied.
C. Final image will be large because node is included.
D. Final image will contain both node and nginx layers.

Solution

  1. Step 1: Analyze multi-stage build layers

    The builder stage uses node to build files, but the final stage uses nginx:alpine only.
  2. Step 2: Understand what is copied to final image

    Only the /app/dist folder from builder is copied into nginx image, so node and build tools are excluded.
  3. Final Answer:

    Final image will be small because only nginx and static files are included. -> Option A
  4. Quick Check:

    Multi-stage excludes build tools = smaller image [OK]
Hint: Final image excludes builder tools, so size stays small [OK]
Common Mistakes:
  • Assuming node stays in final image
  • Thinking build files are missing
  • Believing both node and nginx layers combine
4. You wrote this Dockerfile but the static files are missing in the nginx container:
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build

FROM nginx:alpine
COPY /app/dist /usr/share/nginx/html
What is the error?
medium
A. COPY command misses --from=builder to copy from the build stage.
B. npm run build did not generate files in /app/dist.
C. nginx:alpine image does not support static files.
D. WORKDIR is not set in the nginx stage.

Solution

  1. Step 1: Check COPY command in final stage

    The COPY command lacks --from=builder, so it copies from the current stage which is empty.
  2. Step 2: Understand multi-stage copy syntax

    To copy files from builder stage, COPY must use --from=builder to access that stage's files.
  3. Final Answer:

    COPY command misses --from=builder to copy from the build stage. -> Option A
  4. Quick Check:

    Missing --from=builder causes empty copy [OK]
Hint: Always use --from=builder to copy from build stage [OK]
Common Mistakes:
  • Forgetting --from=builder in COPY
  • Assuming build files auto-copy without --from
  • Blaming nginx image for missing files
5. You want to optimize your multi-stage Dockerfile for a static site by minimizing layers and image size. Which approach is best?
hard
A. Combine build and nginx in one stage to avoid copying files.
B. Use a builder stage to create static files, then copy only those files into a minimal nginx image.
C. Install node and build tools inside the nginx image to keep one image.
D. Copy the entire project folder into nginx image to ensure all files are present.

Solution

  1. Step 1: Understand multi-stage build best practices

    Best practice is to separate build tools from runtime to keep images small and secure.
  2. Step 2: Choose approach minimizing layers and size

    Using a builder stage to create static files, then copying only those files into a minimal nginx image achieves this.
  3. Final Answer:

    Use a builder stage to create static files, then copy only those files into a minimal nginx image. -> Option B
  4. Quick Check:

    Separate build and serve stages = optimized image [OK]
Hint: Build separately, copy only static files to nginx [OK]
Common Mistakes:
  • Combining build and serve increases image size
  • Installing build tools in nginx image adds unnecessary layers
  • Copying entire project wastes space and layers
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