Practice
1. What is the main purpose of a
Dockerfile in a Spring Boot project?easy
Solution
Step 1: Understand the role of Dockerfile
A Dockerfile contains instructions to build a Docker image that packages the app and its environment.Step 2: Identify its use in Spring Boot
For Spring Boot, it defines how to copy the app jar, expose ports, and run the app in a container.Final Answer:
To define how to package and run the Spring Boot app inside a container -> Option BQuick Check:
Dockerfile = Package & run app [OK]
Hint: Dockerfile builds container image for your app [OK]
Common Mistakes:
- Confusing Dockerfile with source code files
- Thinking Dockerfile configures app logic
- Assuming Dockerfile is for testing only
2. Which of the following is the correct syntax to copy the Spring Boot jar file into the Docker image in a Dockerfile?
easy
Solution
Step 1: Understand COPY command syntax
The COPY command syntax is: COPY source_path destination_path inside the image.Step 2: Apply to Spring Boot jar
We copy the built jar from local 'target/app.jar' to '/app.jar' inside the image.Final Answer:
COPY target/app.jar /app.jar -> Option DQuick Check:
COPY source destination [OK]
Hint: COPY source then destination path [OK]
Common Mistakes:
- Using MOVE instead of COPY
- Missing destination path in ADD
- Reversing source and destination paths
3. Given this Dockerfile snippet:
What happens when you run the built Docker image?
FROM openjdk:17-jdk-slim COPY target/app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]
What happens when you run the built Docker image?
medium
Solution
Step 1: Analyze Dockerfile commands
FROM sets base image with Java 17. COPY adds app.jar. EXPOSE 8080 declares port. ENTRYPOINT runs the jar.Step 2: Understand container behavior
When run, container starts Java app listening on port 8080 as declared.Final Answer:
The container runs the Spring Boot app on port 8080 -> Option CQuick Check:
ENTRYPOINT runs app, EXPOSE 8080 [OK]
Hint: ENTRYPOINT runs app; EXPOSE shows port [OK]
Common Mistakes:
- Thinking EXPOSE runs the app
- Assuming default port 80 without config
- Ignoring ENTRYPOINT command
4. You wrote this Dockerfile:
But when running the container, it fails with 'file not found'. What is the likely cause?
FROM openjdk:17-jdk-slim COPY app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]
But when running the container, it fails with 'file not found'. What is the likely cause?
medium
Solution
Step 1: Check COPY source path
COPY expects a local file named 'app.jar' but likely the jar is named differently or in a different folder.Step 2: Understand error cause
If the jar is missing or misnamed, container cannot find '/app.jar' to run, causing failure.Final Answer:
The jar file is not named 'app.jar' in the build folder -> Option AQuick Check:
COPY source must match actual jar name [OK]
Hint: Check jar filename matches COPY source [OK]
Common Mistakes:
- Assuming EXPOSE affects file copying
- Miswriting ENTRYPOINT array syntax
- Blaming base image for missing file
5. You want to optimize your Spring Boot Dockerfile to use a smaller image and faster startup. Which Dockerfile snippet achieves this best?
hard
Solution
Step 1: Compare base images
openjdk:17-jre-slim has only Java runtime, smaller than jdk images which include compilers.Step 2: Evaluate options for size and startup
Using jre-slim reduces image size and speeds startup. Alpine lacks Java by default, causing errors.Final Answer:
FROM openjdk:17-jre-slim COPY target/app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] -> Option AQuick Check:
Use JRE slim for smaller, faster images [OK]
Hint: Use JRE slim base image for smaller Docker images [OK]
Common Mistakes:
- Using full JDK image unnecessarily
- Choosing Alpine without Java setup
- Ignoring image size impact
