Bird
Raised Fist0
Dockerdevops~5 mins

Multiple FROM statements in Docker - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does using multiple FROM statements in a Dockerfile allow you to do?
It allows you to create multi-stage builds, where you can use different base images in stages and copy only needed artifacts to the final image. This helps keep the final image small and clean.
Click to reveal answer
beginner
How do you name a build stage when using multiple FROM statements?
You add an alias after the FROM statement like this: FROM node:18 AS builder. This name can be used later to copy files from that stage.
Click to reveal answer
beginner
Why is multi-stage build useful in Docker?
It helps reduce the final image size by excluding build tools and intermediate files. You only keep what is necessary to run the application.
Click to reveal answer
intermediate
What command copies files from one build stage to another in a multi-stage Dockerfile?
The COPY --from=stage_name /source/path /destination/path command copies files from a named build stage to the current stage.
Click to reveal answer
intermediate
Can you use multiple FROM statements without naming stages?
Yes, but without names you cannot selectively copy files between stages. Naming stages is best practice for clarity and control.
Click to reveal answer
What is the main benefit of using multiple FROM statements in a Dockerfile?
ATo run multiple containers at once
BTo allow multiple users to build the image
CTo speed up Docker daemon startup
DTo create multi-stage builds that reduce final image size
How do you refer to a previous build stage when copying files in a multi-stage Dockerfile?
AUsing the stage alias with COPY --from=alias
BUsing the image tag with COPY --image=tag
CUsing the container ID with COPY --id=container
DUsing the FROM statement again
Which of these is a correct syntax for naming a build stage?
AFROM python:3.12 LABEL builder
BFROM python:3.12 AS builder
CFROM python:3.12 STAGE builder
DFROM python:3.12 NAME builder
What happens if you do not use multiple FROM statements in a Dockerfile?
AYou cannot create multi-stage builds and the image may be larger
BDocker will automatically create multiple stages
CThe build will fail
DYou can still copy files from other images
Which command copies files from a previous build stage named 'builder'?
ACOPY --image=builder /app/build /app
BCOPY --stage=builder /app/build /app
CCOPY --from=builder /app/build /app
DCOPY --source=builder /app/build /app
Explain how multiple FROM statements help optimize Docker images.
Think about how you can separate building and running steps.
You got /4 concepts.
    Describe the syntax and purpose of naming a build stage in a Dockerfile.
    Naming helps copy files from one stage to another.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using multiple FROM statements in a Dockerfile?
      easy
      A. To create multi-stage builds that reduce final image size
      B. To run multiple containers at the same time
      C. To specify different base images for different containers
      D. To define environment variables for the container

      Solution

      1. Step 1: Understand the role of FROM in Dockerfile

        The FROM statement sets the base image for building a Docker image.
      2. Step 2: Recognize multi-stage build benefits

        Using multiple FROM statements allows building in stages, copying only needed files to the final image, reducing size.
      3. Final Answer:

        To create multi-stage builds that reduce final image size -> Option A
      4. Quick Check:

        Multiple FROM = multi-stage build [OK]
      Hint: Multiple FROM means multi-stage build for smaller images [OK]
      Common Mistakes:
      • Thinking multiple FROM runs multiple containers
      • Confusing FROM with environment variable setting
      • Assuming FROM defines runtime commands
      2. Which of the following is the correct syntax to copy files from a previous build stage named builder?
      easy
      A. COPY --stage=builder /app/build /app
      B. COPY --from=builder /app/build /app
      C. COPY --source=builder /app/build /app
      D. COPY --stage-name=builder /app/build /app

      Solution

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

        The correct flag to copy from another stage is --from=stage_name.
      2. Step 2: Match the option with correct syntax

        Only COPY --from=builder /app/build /app uses --from=builder, which is valid syntax.
      3. Final Answer:

        COPY --from=builder /app/build /app -> Option B
      4. Quick Check:

        Copy from stage uses --from [OK]
      Hint: Use COPY --from=stage_name to copy files between stages [OK]
      Common Mistakes:
      • Using --stage or --source instead of --from
      • Misspelling the flag name
      • Omitting the equals sign (=) after --from
      3. Given this Dockerfile snippet, what will be the final image size behavior?
      FROM node:18 AS builder
      RUN npm install && npm run build
      FROM nginx:alpine
      COPY --from=builder /app/build /usr/share/nginx/html
      medium
      A. Final image includes full Node.js and npm layers, making it large
      B. Final image will fail to build due to missing /app/build directory
      C. Final image only contains nginx and the built files, keeping it small
      D. Final image contains both Node.js and nginx running simultaneously

      Solution

      1. Step 1: Analyze the multi-stage build steps

        The first stage builds the app with Node.js. The second stage uses nginx base image.
      2. Step 2: Understand the COPY --from usage

        The built files from the builder stage are copied into nginx image, but Node.js layers are not included.
      3. Final Answer:

        Final image only contains nginx and the built files, keeping it small -> Option C
      4. Quick Check:

        Multi-stage copy keeps final image small [OK]
      Hint: Final image excludes build tools if copied from previous stage [OK]
      Common Mistakes:
      • Assuming all build layers stay in final image
      • Thinking COPY --from copies the entire image
      • Confusing build failure with missing files
      4. Identify the error in this Dockerfile snippet using multiple FROM statements:
      FROM python:3.12 AS builder
      RUN pip install -r requirements.txt
      FROM alpine
      COPY --from=build /app /app
      medium
      A. The stage name 'build' does not match the defined stage 'builder'
      B. Alpine image cannot be used after python image
      C. COPY command syntax is incorrect; missing destination path
      D. pip install command should be in the second stage

      Solution

      1. Step 1: Check stage names in FROM statements

        The first stage is named 'builder', but COPY uses 'build' which is undefined.
      2. Step 2: Understand COPY --from requires exact stage name

        Stage names must match exactly; otherwise, Docker throws an error.
      3. Final Answer:

        The stage name 'build' does not match the defined stage 'builder' -> Option A
      4. Quick Check:

        Stage names must match exactly in COPY --from [OK]
      Hint: Match stage names exactly in COPY --from [OK]
      Common Mistakes:
      • Assuming similar names are accepted
      • Thinking base image order matters here
      • Ignoring COPY destination path correctness
      5. You want to build a Docker image that compiles a Go application and then creates a minimal final image with only the compiled binary. Which Dockerfile snippet correctly uses multiple FROM statements to achieve this?
      hard
      A. FROM golang:1.20 AS builder WORKDIR /app COPY . . RUN go build -o myapp FROM scratch COPY --from=builder /app/myapp /myapp CMD ["/myapp"]
      B. FROM golang:1.20 WORKDIR /app COPY . . RUN go build -o myapp FROM alpine COPY /app/myapp /myapp CMD ["/myapp"]
      C. FROM alpine AS builder RUN apk add --no-cache go WORKDIR /app COPY . . RUN go build -o myapp FROM alpine COPY --from=builder /app/myapp /myapp CMD ["/myapp"]
      D. FROM golang:1.20 AS builder WORKDIR /app COPY . . RUN go build -o myapp FROM alpine COPY --from=builder /app/myapp /myapp CMD ["/myapp"]

      Solution

      1. Step 1: Identify the build stage with Go compiler

        Stage named 'builder' uses golang image to compile the app.
      2. Step 2: Use a minimal runtime image for final stage

        The final stage uses alpine (small image) and copies only the binary from builder.
      3. Step 3: Verify COPY --from syntax and CMD

        COPY uses --from=builder to get binary; CMD runs the binary correctly.
      4. Final Answer:

        FROM golang:1.20 AS builder WORKDIR /app COPY . . RUN go build -o myapp FROM alpine COPY --from=builder /app/myapp /myapp CMD ["/myapp"] -> Option D
      5. Quick Check:

        Multi-stage build with builder and minimal final image [OK]
      Hint: Use builder stage for compile, minimal image for final [OK]
      Common Mistakes:
      • Using scratch without proper setup
      • Copying files without --from flag
      • Building in final stage instead of builder
      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