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
1+ # ---- Estágio de Build com Java 23 ----
52
6- # Define o diretório de trabalho dentro do contêiner.
3+ # Começamos com a imagem oficial do Java 23 (JDK completo).
4+ FROM eclipse-temurin:23-jdk AS build
5+
6+ # Define variáveis para a versão do Maven, para facilitar a atualização.
7+ ARG MAVEN_VERSION=3.9.6
8+ ARG MAVEN_URL=https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz
9+
10+ # Instala ferramentas necessárias (curl para download) e baixa e instala o Maven.
11+ RUN apt-get update && \
12+ apt-get install -y curl && \
13+ curl -fsSL ${MAVEN_URL} -o /tmp/maven.tar.gz && \
14+ tar -xzf /tmp/maven.tar.gz -C /usr/share && \
15+ ln -s /usr/share/apache-maven-${MAVEN_VERSION}/bin/mvn /usr/bin/mvn && \
16+ rm /tmp/maven.tar.gz && \
17+ apt-get purge -y --auto-remove curl
18+
19+ # Define o diretório de trabalho.
720WORKDIR /app
821
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.
22+ # Copia o pom.xml e baixa as dependências (para aproveitar o cache do Docker).
1123COPY pom.xml .
12-
13- # Baixa todas as dependências do projeto.
1424RUN mvn dependency:go-offline
1525
16- # Copia todo o resto do código-fonte do projeto .
26+ # Copia o resto do código-fonte.
1727COPY src ./src
1828
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.
29+ # Compila e empacota a aplicação.
2130RUN mvn package -DskipTests
2231
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 .
32+ # ---- Estágio Final (Produção) com Java 23 ----
33+
34+ # Usamos a imagem JRE (Java Runtime Environment) do Java 23, que é menor e mais segura .
2635FROM eclipse-temurin:23-jre
2736
2837# Define o diretório de trabalho.
2938WORKDIR /app
3039
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.
40+ # Copia APENAS o arquivo .jar gerado no estágio anterior.
3341COPY --from=build /app/target/AiFoodAPP-0.0.1-SNAPSHOT.jar app.jar
3442
35- # Expõe a porta em que a aplicação Spring roda .
43+ # Expõe a porta da aplicação.
3644EXPOSE 8080
3745
38- # Comando que será executado quando o contêiner iniciar .
46+ # Comando para iniciar a aplicação .
3947ENTRYPOINT ["java" , "-jar" , "app.jar" ]
0 commit comments