-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDockerfile
More file actions
47 lines (35 loc) · 1.86 KB
/
Copy pathDockerfile
File metadata and controls
47 lines (35 loc) · 1.86 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
42
43
44
45
46
47
# Nivel 1 - Docker para la API.
#
# Build multi-stage: la primera etapa compila el proyecto con Maven (no
# necesitas tener Maven instalado en tu máquina), la segunda copia solo el
# .jar final a una imagen mínima con el JRE. Esto hace que la imagen final
# sea mucho más liviana que si incluyera todo el JDK + Maven + el código fuente.
# Si no entiendes algo de lo que hace este Dockerfile, puedes leer la documentación oficial de Docker:
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
# Si no entiendes algo de Maven, puedes leer la documentación oficial de Maven:
# https://maven.apache.org/guides/index.html
# Si no entiendes algo de Java, puedes leer la documentación oficial de Java:
# https://docs.oracle.com/en/java/javase/17/docs/api/index.html
# Si no entiendes algo de Spring Boot, puedes leer la documentación oficial de Spring Boot:
# https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
# Si no entiendes algo de Spring Data JPA, puedes leer la documentación oficial de Spring Data JPA:
# https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference
# Si no entiendes algo de los terminos aqui descritos... bueno averigualo mi bro, ya me cansé de escribir.
# ---- Etapa 1: build ----
FROM maven:3.9-eclipse-temurin-17 AS build
WORKDIR /build
COPY pom.xml .
# Descarga las dependencias primero para aprovechar la cache de Docker:
# si solo cambias código Java (no el pom.xml), este paso no se repite.
RUN mvn -q dependency:go-offline
COPY src ./src
RUN mvn -q clean package -DskipTests
# ---- Etapa 2: runtime ----
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# Buena práctica: no correr el proceso como root dentro del contenedor.
RUN addgroup -S spring && adduser -S spring -G spring
USER spring
COPY --from=build /build/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]