Files
par/par-api/Dockerfile
mediabot-pt b24ec27905 perf: 优化 CI Docker 镜像构建速度
- 新增 CI 精简 Dockerfile,直接打包 drone 预编译 jar,避免在 Docker 内重复编译(省去 npm ci + mvn 全量编译 ~15min)
- build-docker-image 步骤改用精简 Dockerfile,去掉无效的 docker pull 缓存尝试
- maven-build 步骤优化:动态检测 CPU 核数设置并行度 -T 1C/2C、增加 JVM 内存、添加 --fail-at-end
- .dockerignore 优化:CI Dockerfile 仅需 par-api/target/*.jar,排除所有源码/pom/前端文件
- par-api/Dockerfile 标注为独立多阶段构建版本(本地使用)

参考 mediabot 项目的多阶段构建思路,但将编译前置到 drone host 缓存中,Docker 构建秒级完成
2026-06-29 12:53:33 +08:00

76 lines
2.2 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.

# syntax=docker/dockerfile:1
# PAR Server - 前后端一体化 Docker 镜像(完整多阶段构建)
# 参考 mediabot 的多阶段构建方式,适用于本地独立构建(不依赖 Drone CI 预编译)
# CI 流水线请使用项目根目录的 Dockerfile(精简版,仅打包 drone 预编译产物)
# 启用 BuildKit 以支持 cache mount
# 第一阶段:构建前端
FROM 192.168.31.253/library/node:22-alpine AS web-builder
WORKDIR /app
COPY web/package.json web/package-lock.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci --ignore-scripts
COPY web/ .
RUN --mount=type=cache,target=/root/.npm \
npm run build
# 第二阶段:构建后端
# mediabot 使用 maven-java21 镜像(已含 JDK + Maven)
FROM 192.168.31.253/library/maven-java21:3.9.9-alpine AS server-builder
WORKDIR /build
# 先复制 pom 文件,利用 Docker 缓存
COPY pom.xml .
COPY par-common/pom.xml par-common/
COPY par-core/pom.xml par-core/
COPY par-api/pom.xml par-api/
# 下载依赖(使用 cache mount 缓存 Maven 仓库)
RUN --mount=type=cache,target=/root/.m2,sharing=locked \
mvn dependency:go-offline -B
# 复制源码并构建
COPY par-common/src par-common/src
COPY par-core/src par-core/src
COPY par-api/src par-api/src
# 将前端构建产物复制到后端静态资源目录
COPY --from=web-builder /app/dist par-api/src/main/resources/static
# 打包(使用 cache mount 缓存 Maven 仓库)
RUN --mount=type=cache,target=/root/.m2,sharing=locked \
mvn clean package -DskipTests -B && \
mkdir -p target && \
cp par-api/target/*.jar target/app.jar
# 第三阶段:运行
FROM 192.168.31.253/library/eclipse-temurin:21-jre-alpine
LABEL maintainer="PAR Team"
LABEL description="PT Adapter Registry Server"
# 创建非 root 用户
RUN addgroup -S par && adduser -S par -G par
WORKDIR /app
# 创建静态文件目录
RUN mkdir -p /app/static/configs && chown -R par:par /app
# 复制构建产物
COPY --from=server-builder /build/target/app.jar app.jar
USER par
# 暴露端口
EXPOSE 8080
# 健康检查
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
CMD wget -qO- http://localhost:8080/health || exit 1
# 启动参数
ENTRYPOINT ["java", "-jar", "app.jar"]