blob: 8c3fa5b400688f1020eb930acbc9c774e419fec6 [file] [log] [blame] [edit]
# 阶段 1: builder - 构建应用 JAR 包并准备分层结构
# 使用包含 Maven 和 JDK 的基础镜像
FROM maven:3.9.9-eclipse-temurin-24-alpine AS builder
# 设置工作目录
WORKDIR /app
# 复制 pom.xml 文件,以便 Maven 可以下载依赖
# 这一步利用 Docker 缓存,如果 pom.xml 没有变化,则不会重新下载依赖
COPY pom.xml .
# 复制项目源代码
COPY src ./src
# 执行 Maven package 构建项目
# spring-boot-maven-plugin 会生成一个可执行 JAR (例如 demo-0.0.1-SNAPSHOT.jar),
# 并且在 target 目录下也会有 BOOT-INF/lib (所有依赖) 和 BOOT-INF/classes (您的应用代码) 等分层结构
RUN mvn package -DskipTests
# 阶段 2: runner - 运行最终应用 JAR 包的精简运行时环境
# 使用轻量级的 OpenJDK JRE 镜像,只包含运行时环境,减小镜像大小
FROM openjdk:17-jdk-slim-buster AS runner
WORKDIR /app
# 复制可执行 jar 包
COPY --from=builder /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 直接运行 Spring Boot JAR(推荐方式)
ENTRYPOINT ["java", "-jar", "app.jar"]