Skip to content

Commit 5eb0017

Browse files
chore: refactor Dockerfile to switch to eclipse-temurin base images and improve Maven installation process
1 parent 4bf5606 commit 5eb0017

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

Dockerfile

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,47 @@
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.
720
WORKDIR /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).
1123
COPY pom.xml .
12-
13-
# Baixa todas as dependências do projeto.
1424
RUN mvn dependency:go-offline
1525

16-
# Copia todo o resto do código-fonte do projeto.
26+
# Copia o resto do código-fonte.
1727
COPY 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.
2130
RUN 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.
2635
FROM eclipse-temurin:23-jre
2736

2837
# Define o diretório de trabalho.
2938
WORKDIR /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.
3341
COPY --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.
3644
EXPOSE 8080
3745

38-
# Comando que será executado quando o contêiner iniciar.
46+
# Comando para iniciar a aplicação.
3947
ENTRYPOINT ["java", "-jar", "app.jar"]

0 commit comments

Comments
 (0)