| # 阶段 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"] |