1- FROM eclipse-temurin:23
2- LABEL author=
"Otavio Ximarelli" maintainer=
"[email protected] " 1+ # ---- Estágio de Build ----
2+ # Usamos uma imagem completa do Maven com JDK 23 para compilar o projeto.
3+ # Damos um nome a este estágio, "build", para nos referirmos a ele mais tarde.
4+ FROM maven:3.9.6-eclipse-temurin-23 AS build
5+
6+ # Define o diretório de trabalho dentro do contêiner.
37WORKDIR /app
4- COPY target/AiFoodAPP-0.0.1-SNAPSHOT.jar /app/aifoodapp.jar
5- # COPY .env /app/.env
6- ENTRYPOINT ["java" , "-jar" , "aifoodapp.jar" ]
7- EXPOSE 8080
8+
9+ # Copia apenas o pom.xml primeiro. O Docker armazena essa camada em cache.
10+ # As dependências só serão baixadas novamente se o pom.xml mudar.
11+ COPY pom.xml .
12+
13+ # Baixa todas as dependências do projeto.
14+ RUN mvn dependency:go-offline
15+
16+ # Copia todo o resto do código-fonte do projeto.
17+ COPY src ./src
18+
19+ # Compila a aplicação, empacota em um .jar e pula os testes (que já devem ter rodado no CI/CD).
20+ # O Spring Boot Plugin irá criar um único JAR executável.
21+ RUN mvn package -DskipTests
22+
23+ # ---- Estágio Final (Produção) ----
24+ # Usamos uma imagem "slim", que contém apenas o Java Runtime Environment (JRE).
25+ # É muito menor e mais segura que a imagem completa do JDK.
26+ FROM eclipse-temurin:23-jre
27+
28+ # Define o diretório de trabalho.
29+ WORKDIR /app
30+
31+ # Copia APENAS o arquivo .jar do estágio de "build" para a imagem final.
32+ # Nenhum código-fonte ou dependência do Maven é incluído aqui.
33+ COPY --from=build /app/target/AiFoodAPP-0.0.1-SNAPSHOT.jar app.jar
34+
35+ # Expõe a porta em que a aplicação Spring roda.
36+ EXPOSE 8080
37+
38+ # Comando que será executado quando o contêiner iniciar.
39+ ENTRYPOINT ["java" , "-jar" , "app.jar" ]
0 commit comments