52 lines
2.6 KiB
Docker
52 lines
2.6 KiB
Docker
# =====================================================================
|
||
# 翼云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"]
|