-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
41 lines (31 loc) · 1.32 KB
/
Copy pathDockerfile
File metadata and controls
41 lines (31 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# --- Etapa 1: BUILD ---
FROM maven:3.9-eclipse-temurin-21 AS build
WORKDIR /app
# 1. Optimización de Capa de Caché de Docker:
COPY pom.xml .
# 2. Descargamos todas las dependencias.
RUN mvn dependency:go-offline
# 3. Copiamos el código fuente de la aplicación.
COPY src ./src
# 4. Compilamos la aplicación y creamos el .jar.
RUN mvn package -DskipTests
# --- Etapa 2: PRODUCTION ---
# Empezamos desde una imagen JRE mínima. Esta imagen no contiene Maven
# ni el JDK, reduciendo drásticamente el tamaño y la superficie de ataque.
FROM eclipse-temurin:21-jre-jammy AS production
WORKDIR /app
# Definimos el puerto de la aplicación como un argumento.
ARG APP_PORT=8080
ENV PORT=${APP_PORT}
# Expone el puerto 8080 del contenedor a la red interna de Docker.
EXPOSE ${APP_PORT}
# 1. Mejor Práctica de Seguridad: Crear un usuario no privilegiado.
RUN addgroup --system spring && adduser --system --ingroup spring springuser
USER springuser
# 2. Copiamos el artefacto.jar compilado desde la etapa 'build'.
COPY --from=build /app/target/*.jar app.jar
# 3. ENTRYPOINT (Forma Exec):
# Este es el comando que se ejecutará cuando el contenedor inicie.
# Usar esta sintaxis permite que los argumentos pasados (desde docker-compose)
# se añadan correctamente, como por ejemplo --spring.profiles.active=prod.
ENTRYPOINT ["java", "-jar", "app.jar"]