LAOP-admin/Dockerfile
2026-09-18 16:45:38 +08:00

64 lines
2.8 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =====================================================================
# 翼云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"]