64 lines
2.8 KiB
Docker
64 lines
2.8 KiB
Docker
# =====================================================================
|
||
# 翼云Hub · LAOP-admin 后端镜像 Dockerfile
|
||
# --------------------------------------------------------------------
|
||
# 说明:
|
||
# - 项目 pom.xml 指定 Java 17(source/target),编译期和运行期版本严格一致,
|
||
# - jar 包最终名为 laop-admin.jar(由 pom.xml finalName 决定)。
|
||
# =====================================================================
|
||
|
||
# -------------------------------------------------------------------
|
||
# 阶段1:构建期(maven + jdk17,与 pom.xml 严格对齐)
|
||
# -------------------------------------------------------------------
|
||
FROM maven:3.9-eclipse-temurin-17 AS builder
|
||
|
||
WORKDIR /build
|
||
|
||
# 先单独 COPY pom.xml,利用 Docker 缓存层加速依赖下载
|
||
COPY pom.xml ./
|
||
# 预下载依赖(仅当 pom 变化时重新执行,提升后续构建速度)
|
||
RUN mvn dependency:go-offline -B
|
||
|
||
# 复制源码
|
||
COPY src ./src
|
||
|
||
# 打包:激活 prod profile,让 application.yml 中的 @spring.profiles.active@ 替换为 prod
|
||
# -DskipTests:构建镜像时跳过测试,测试应在 CI 流水线单独执行
|
||
RUN mvn clean package -DskipTests -Pprod
|
||
|
||
|
||
# -------------------------------------------------------------------
|
||
# 阶段2:运行期(JRE 17 LTS)
|
||
# -------------------------------------------------------------------
|
||
FROM eclipse-temurin:17-jre-jammy
|
||
|
||
LABEL maintainer="laop-admin"
|
||
LABEL description="翼云Hub · 无人机信息开放平台 后端服务"
|
||
|
||
WORKDIR /app
|
||
|
||
# 时区设置为中国时区(与 application.yml 中 jackson.time-zone 一致)
|
||
ENV TZ=Asia/Shanghai
|
||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||
|
||
# 预创建静态文件挂载目录 /data/static
|
||
# - compose 通过 volumes 挂载宿主机 /home/laop/admin 到此处,持久化上传文件
|
||
# - 这里显式创建是为了:即使未挂载(如直接 docker run 调试),代码写文件也不会因目录缺失失败
|
||
# - 同时通过 ENV LAOP_STATIC_DIR=/data/static 给镜像内置默认值,与 compose 挂载点对齐
|
||
RUN mkdir -p /data/static
|
||
ENV LAOP_STATIC_DIR=/data/static
|
||
|
||
# 拷贝构建产物
|
||
COPY --from=builder /build/target/laop-admin.jar app.jar
|
||
|
||
# 容器内暴露端口(与 application.yml server.port=8081 一致)
|
||
EXPOSE 8081
|
||
|
||
# JVM 参数:容器内内存限制感知 + GC 优化(2核8G 服务器)
|
||
# -XX:+UseContainerSupport:让 JVM 感知 cgroup 限制(JDK10+ 默认开启,显式声明)
|
||
# -XX:MaxRAMPercentage=75.0:限制堆内存占容器内存 75%,给非堆留空间
|
||
# -Djava.security.egd=file:/dev/./urandom:加速 SecureRandom 启动
|
||
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Djava.security.egd=file:/dev/./urandom"
|
||
|
||
# 运行:显式指定 prod profile,覆盖任何默认配置
|
||
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar --spring.profiles.active=prod"]
|