Skip to content

Commit 0014c21

Browse files
chore: refactor Dockerfile to use multi-stage build for improved efficiency and security
1 parent 97e8942 commit 0014c21

File tree

1 file changed

+38
-6
lines changed

1 file changed

+38
-6
lines changed

Dockerfile

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,39 @@
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.
37
WORKDIR /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

Comments
 (0)