Skip to content

Commit 5615785

Browse files
committed
🐳 Improve: Optimizar Dockerfile del backend con multi-stage build y mejores prácticas
## Mejoras implementadas: ### 🏗️ **Multi-stage build** - Separa la fase de build de la imagen final - Reduce el tamaño de la imagen final significativamente ### 🚀 **Optimizaciones de performance** - Cache de dependencias de Gradle separado del código - Variables de entorno para optimizar Gradle - JVM configurada para contenedores ### 🔒 **Mejoras de seguridad** - Usuario no-root para ejecutar la aplicación - Ownership correcto de archivos ### 📊 **Monitoreo y salud** - Healthcheck integrado usando actuator - Configuración optimizada de JVM ### 🛠️ **Mejor mantenibilidad** - Estructura clara y comentada - Nombres de archivo más descriptivos - Configuración explícita de variables
1 parent 931d186 commit 5615785

File tree

1 file changed

+50
-8
lines changed

1 file changed

+50
-8
lines changed

backend/Dockerfile

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,55 @@
1+
# Multi-stage build para optimizar el tamaño de la imagen final
12
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+
27
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
88

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+
1033
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
1248
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

Comments
 (0)