Files
brunoandClaude Sonnet 4.5 3c82e6ace1 feat: optimize Docker build with custom base image
- 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]>
2026-01-02 07:48:19 +08:00

69 lines
2.1 KiB
Docker
Raw Permalink 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.
# ============================================================================
# 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"]