46 lines
1.1 KiB
Docker
46 lines
1.1 KiB
Docker
# =======================
|
|
# Builder stage
|
|
# =======================
|
|
FROM maven:3.8.5-eclipse-temurin-17 AS builder
|
|
|
|
WORKDIR /workdir/server
|
|
|
|
# Copy only pom.xml first for better layer caching
|
|
COPY pom.xml .
|
|
|
|
# Download dependencies with optimization flags
|
|
RUN mvn dependency:resolve dependency:resolve-plugins -B -T 1C
|
|
|
|
# Copy source code
|
|
COPY src ./src
|
|
|
|
# Build the application
|
|
RUN mvn package -B -T 1C -DskipTests -Dmaven.javadoc.skip=true
|
|
|
|
# Verify the JAR was created
|
|
RUN ls -la target/
|
|
|
|
# =======================
|
|
# Runtime stage
|
|
# =======================
|
|
FROM eclipse-temurin:17-jre-focal
|
|
|
|
# Expose port
|
|
EXPOSE 8080
|
|
|
|
# Create app and uploads directories
|
|
RUN mkdir -p /app && \
|
|
mkdir -p /app/uploads && \
|
|
chmod 755 /app/uploads
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy the JAR from builder stage
|
|
COPY --from=builder /workdir/server/target/*.jar /app/
|
|
|
|
# Create volume for uploads (optional but recommended)
|
|
VOLUME ["/app/uploads"]
|
|
|
|
# Entry point: dynamically run the first JAR in /app
|
|
ENTRYPOINT ["sh", "-c", "java -jar /app/$(ls /app | grep .jar | head -n1)"] |