rhythm-backend/Dockerfile
2026-04-16 11:56:27 +02:00

46 lines
1.2 KiB
Docker

# ---- STAGE 1: Build ----
# Use an OpenJDK image that matches the version you develop with.
# It contains the JDK, but not Maven.
FROM eclipse-temurin:25-jdk-jammy AS builder
# Set the working directory
WORKDIR /app
# ---- Caching Dependencies ----
# First, copy the files that define the build, including the Maven Wrapper
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
# Make the wrapper executable
RUN chmod +x ./mvnw
# Run a Maven command to download dependencies.
# Since pom.xml and wrapper files rarely change, this layer will be cached by Docker,
# speeding up subsequent builds significantly.
RUN ./mvnw dependency:go-offline
# ---- Building the Application ----
# Now, copy the source code. If only source code changes, the layers above are cached.
COPY src ./src
# Build the application JAR using the Maven Wrapper
RUN ./mvnw clean package -DskipTests
# ---- STAGE 2: Runtime ----
# Use a lean Eclipse Temurin JRE image for a small and secure final container.
FROM eclipse-temurin:25-jre-jammy
# Set the working directory
WORKDIR /app
# Copy only the built JAR file from the 'builder' stage
COPY --from=builder /app/target/*.jar app.jar
# Expose the application port
EXPOSE 8080
# Command to run the application
ENTRYPOINT ["java", "-jar", "app.jar"]