68 lines
1.4 KiB
Docker
68 lines
1.4 KiB
Docker
# Multi-stage build for Java 24
|
|
FROM openjdk:24-jdk-slim AS builder
|
|
|
|
# Install required packages
|
|
RUN apt-get update && apt-get install -y \
|
|
curl \
|
|
unzip \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy gradle wrapper and build files
|
|
COPY gradle/ gradle/
|
|
COPY gradlew .
|
|
COPY gradle.properties .
|
|
COPY settings.gradle.kts .
|
|
COPY build.gradle.kts .
|
|
|
|
# Make gradlew executable
|
|
RUN chmod +x gradlew
|
|
|
|
# Download dependencies (for better caching)
|
|
RUN ./gradlew dependencies --no-daemon
|
|
|
|
# Copy source code
|
|
COPY src/ src/
|
|
|
|
# Build the application
|
|
RUN ./gradlew shadowJar --no-daemon
|
|
|
|
# Runtime stage
|
|
FROM openjdk:24-jdk-slim
|
|
|
|
# Install required runtime packages
|
|
RUN apt-get update && apt-get install -y \
|
|
curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create app user
|
|
RUN groupadd -r ccoin && useradd -r -g ccoin ccoin
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy the built JAR from builder stage
|
|
COPY --from=builder /app/build/libs/*.jar app.jar
|
|
|
|
# Change ownership to app user
|
|
RUN chown -R ccoin:ccoin /app
|
|
|
|
# Switch to app user
|
|
USER ccoin
|
|
|
|
# Expose port
|
|
EXPOSE 8080
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD curl -f http://localhost:8080/health || exit 1
|
|
|
|
# JVM options for production
|
|
ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC -XX:+UseStringDeduplication"
|
|
|
|
# Run the application
|
|
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
|
|
|