- Rename Dockerfile.boot to Dockerfile.prod for consistency - Add Dockerfile.jdk21-maven custom base image * Pre-installed Maven 3.8.8 from Apache binary * Pre-configured timezone and build tools * Eliminates apt update on every build (saves 2-3 minutes) - Update CI workflow to use Dockerfile.prod - Update pnpm-lock.yaml with missing dependencies Benefits: ✅ Faster CI/CD builds (skip apt operations) ✅ All images from Harbor registry ✅ Reusable base image for Java projects ✅ Stable Maven installation using official binary 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
69 lines
2.1 KiB
Docker
69 lines
2.1 KiB
Docker
# ============================================================================
|
||
# LJWX Health - ljwx-boot 构建 Dockerfile
|
||
# 构建上下文:项目根目录
|
||
# 构建命令:docker build -f Dockerfile.boot -t ljwx-boot .
|
||
# ============================================================================
|
||
|
||
# ============================================================================
|
||
# 阶段1: 构建阶段
|
||
# ============================================================================
|
||
FROM harbor.omniverseai.net/ljwx/jdk21-maven:latest AS builder
|
||
|
||
LABEL maintainer="[email protected]"
|
||
LABEL stage="builder"
|
||
|
||
# 设置工作目录
|
||
WORKDIR /build
|
||
|
||
# 复制完整的项目结构(包括 starter 和 boot)
|
||
COPY ljwx-boot-starter/ ./ljwx-boot-starter/
|
||
COPY ljwx-boot/ ./ljwx-boot/
|
||
|
||
# 先构建 starter 模块
|
||
WORKDIR /build/ljwx-boot-starter
|
||
RUN mvn clean install -DskipTests
|
||
|
||
# 再构建 boot 应用
|
||
WORKDIR /build/ljwx-boot
|
||
RUN mvn clean package -DskipTests -pl ljwx-boot-admin -am
|
||
|
||
# ============================================================================
|
||
# 阶段2: 运行时镜像
|
||
# ============================================================================
|
||
FROM harbor.omniverseai.net/ljwx/jdk21-maven:latest
|
||
|
||
LABEL maintainer="[email protected]"
|
||
LABEL description="LJWX Health Boot Application"
|
||
LABEL version="1.0.6-SNAPSHOT"
|
||
|
||
# 时区已在基础镜像配置
|
||
ENV TZ='Asia/Shanghai'
|
||
|
||
# 创建应用用户(安全最佳实践)
|
||
RUN groupadd -r ljwx && useradd -r -g ljwx ljwx
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 从构建阶段复制JAR文件
|
||
COPY --from=builder /build/ljwx-boot/ljwx-boot-admin/target/ljwx-boot-admin-*.jar app.jar
|
||
|
||
# 更改所有权
|
||
RUN chown ljwx:ljwx /app/app.jar
|
||
|
||
# 切换到非root用户
|
||
USER ljwx
|
||
|
||
# 允许外界访问容器的9998端口
|
||
EXPOSE 9998
|
||
|
||
# 健康检查
|
||
HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \
|
||
CMD wget -q --spider http://localhost:9998/actuator/health || exit 1
|
||
|
||
# JVM优化参数
|
||
ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
|
||
|
||
# 配置容器启动后执行的命令
|
||
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
|