|
| 1 | +# Multi-stage build para optimizar el tamaño de la imagen final |
1 | 2 | FROM eclipse-temurin:21-jdk AS build |
| 3 | + |
| 4 | +# Configurar variables de entorno para optimizar Gradle |
| 5 | +ENV GRADLE_OPTS="-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true" |
| 6 | + |
2 | 7 | WORKDIR /app |
3 | | -COPY . . |
4 | | -RUN ./gradlew -v || true |
5 | | -RUN apt-get update && apt-get install -y dos2unix || true |
6 | | -RUN dos2unix gradlew || true |
7 | | -RUN gradle build -x test || true |
8 | 8 |
|
9 | | -FROM eclipse-temurin:21-jre |
| 9 | +# Copiar archivos de configuración primero (para aprovechar el cache de Docker) |
| 10 | +COPY build.gradle.kts settings.gradle.kts ./ |
| 11 | +COPY gradle/ gradle/ |
| 12 | +COPY gradlew gradlew.bat ./ |
| 13 | + |
| 14 | +# Dar permisos de ejecución al wrapper de Gradle |
| 15 | +RUN chmod +x gradlew |
| 16 | + |
| 17 | +# Descargar dependencias (se cachea si no cambian los archivos de configuración) |
| 18 | +RUN ./gradlew dependencies --no-daemon |
| 19 | + |
| 20 | +# Copiar el código fuente |
| 21 | +COPY src/ src/ |
| 22 | +COPY config/ config/ |
| 23 | + |
| 24 | +# Construir la aplicación |
| 25 | +RUN ./gradlew build -x test --no-daemon |
| 26 | + |
| 27 | +# Imagen final optimizada |
| 28 | +FROM eclipse-temurin:21-jre-jammy |
| 29 | + |
| 30 | +# Crear usuario no-root para seguridad |
| 31 | +RUN groupadd -r appuser && useradd -r -g appuser appuser |
| 32 | + |
10 | 33 | WORKDIR /app |
11 | | -COPY --from=build /app/build/libs/*.jar /app/app.jar |
| 34 | + |
| 35 | +# Copiar solo el JAR compilado |
| 36 | +COPY --from=build /app/build/libs/*.jar /app/sismoview-backend.jar |
| 37 | + |
| 38 | +# Cambiar ownership al usuario no-root |
| 39 | +RUN chown -R appuser:appuser /app |
| 40 | + |
| 41 | +# Cambiar al usuario no-root |
| 42 | +USER appuser |
| 43 | + |
| 44 | +# Configurar JVM para contenedores |
| 45 | +ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC" |
| 46 | + |
| 47 | +# Exponer puerto |
12 | 48 | EXPOSE 8080 |
13 | | -ENTRYPOINT ["java","-jar","/app/app.jar"] |
| 49 | + |
| 50 | +# Healthcheck para Docker |
| 51 | +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ |
| 52 | + CMD curl -f http://localhost:8080/actuator/health || exit 1 |
| 53 | + |
| 54 | +# Punto de entrada optimizado |
| 55 | +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/sismoview-backend.jar"] |
0 commit comments