LAOP-admin/Dockerfile
2026-09-20 11:26:24 +08:00

52 lines
2.6 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
# --------------------------------------------------------------------
# 设计:本地 mvn package 预先生成 jar,Dockerfile 只 COPY jar 进 JRE 镜像
# --------------------------------------------------------------------
# 为什么不用多阶段构建(FROM maven → mvn package → FROM jre)?
# - 多阶段构建在镜像内执行 mvn package,每次都要下载依赖,慢
# - 跨架构构建(Mac arm64 → 服务器 x86_64)需 QEMU 模拟,慢上加慢
# - Java 字节码与 CPU 架构无关,本地 Mac 编译的 jar 可直接跑在 x86_64 JRE 上
# 改进后:
# - 本地 mvn package 秒级完成(原生速度,无跨架构)
# - Dockerfile 只 COPY jar,构建瞬间完成
# - 不需要 QEMU,不需要基础镜像固化依赖
# --------------------------------------------------------------------
# 前置:本地执行过 mvn clean package -DskipTests -Pprod
# 生成 target/laop-admin.jar
# 脚本 build-and-push.sh 会自动完成这步并复制到 build context
# =====================================================================
FROM eclipse-temurin:17-jre-jammy
LABEL maintainer="laop-admin"
LABEL description="无人机信息开放平台 后端服务"
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
# 拷贝本地预编译好的 jar 包
# 脚本 build-and-push.sh 在构建前会执行:
# cp target/laop-admin.jar ./laop-admin.jar
# 把 jar 复制到 build context 根目录(避免把整个 target/ 进入上下文)
COPY laop-admin.jar app.jar
# 容器内暴露端口(与 application.yml server.port=8081 一致)
EXPOSE 8081
# JVM 参数:容器内内存限制感知 + GC 优化(2核8G 服务器)
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"]