ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 1 | # 阶段 1: builder - 构建应用 JAR 包并准备分层结构 |
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 2 | # 使用包含 Maven 和 JDK 的基础镜像 |
ZBD | c7746b4 | 2025-05-10 01:42:30 +0800 | [diff] [blame] | 3 | FROM maven:3.9.9-eclipse-temurin-24-alpine AS builder |
4 | |||||
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 5 | # 设置工作目录 |
ZBD | c7746b4 | 2025-05-10 01:42:30 +0800 | [diff] [blame] | 6 | WORKDIR /app |
7 | |||||
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 8 | # 复制 pom.xml 文件,以便 Maven 可以下载依赖 |
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 9 | # 这一步利用 Docker 缓存,如果 pom.xml 没有变化,则不会重新下载依赖 |
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 10 | COPY pom.xml . |
11 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 12 | # 复制项目源代码 |
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 13 | COPY src ./src |
14 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 15 | # 执行 Maven package 构建项目 |
16 | # spring-boot-maven-plugin 会生成一个可执行 JAR (例如 demo-0.0.1-SNAPSHOT.jar), | ||||
17 | # 并且在 target 目录下也会有 BOOT-INF/lib (所有依赖) 和 BOOT-INF/classes (您的应用代码) 等分层结构 | ||||
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 18 | RUN mvn package -DskipTests |
19 | |||||
20 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 21 | # 阶段 2: runner - 运行最终应用 JAR 包的精简运行时环境 |
22 | # 使用轻量级的 OpenJDK JRE 镜像,只包含运行时环境,减小镜像大小 | ||||
ZBD | b704c9f | 2025-05-23 21:51:39 +0800 | [diff] [blame] | 23 | FROM openjdk:17-jdk-slim-buster AS runner |
ZBD | c7746b4 | 2025-05-10 01:42:30 +0800 | [diff] [blame] | 24 | WORKDIR /app |
25 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 26 | # 复制可执行 jar 包 |
ZBD | c7746b4 | 2025-05-10 01:42:30 +0800 | [diff] [blame] | 27 | COPY --from=builder /app/target/demo-0.0.1-SNAPSHOT.jar app.jar |
28 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 29 | # 暴露端口 |
ZBD | c7746b4 | 2025-05-10 01:42:30 +0800 | [diff] [blame] | 30 | EXPOSE 8080 |
31 | |||||
ZBD | 4b0e05a | 2025-06-08 18:11:26 +0800 | [diff] [blame] | 32 | # 直接运行 Spring Boot JAR(推荐方式) |
33 | ENTRYPOINT ["java", "-jar", "app.jar"] |