Files
aiot-platform-cloud/docker/Dockerfile.service
lzh 3f4b69d532
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
perf: 并行构建 + Maven 依赖缓存优化
主要改进:
1. 并行构建(最大 2 个服务同时构建)
2. Maven 依赖基础镜像(aiot-deps)
3. 服务构建基于依赖镜像,跳过依赖下载
4. 部署也支持并行

预期效果:后续构建时间从 25分钟 降至 8-12分钟
2026-01-13 16:05:24 +08:00

70 lines
1.7 KiB
Desktop File

# ============================================
# 服务构建 Dockerfile
# 基于依赖基础镜像,快速编译服务
# ============================================
# 构建参数
ARG DEPS_IMAGE=aiot-deps:latest
# ============ 构建阶段 ============
FROM ${DEPS_IMAGE} AS builder
ARG MODULE_NAME
ARG JAR_NAME
ARG SKIP_TESTS=true
WORKDIR /build
# 复制最新源代码(覆盖基础镜像中的代码)
COPY . .
# 编译指定模块(依赖已经在基础镜像中准备好)
RUN mvn package -pl ${MODULE_NAME} -am -DskipTests=${SKIP_TESTS} -B -q -o || \
mvn package -pl ${MODULE_NAME} -am -DskipTests=${SKIP_TESTS} -B -q
# ============ 运行阶段 ============
FROM eclipse-temurin:17-jre-alpine
# 安装必要工具
RUN apk add --no-cache wget curl
# 构建参数
ARG MODULE_NAME
ARG JAR_NAME
ARG APP_PORT=48080
# 元数据标签
LABEL maintainer="XW-AIOT Team"
LABEL service="${MODULE_NAME}"
# 创建非 root 用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser
# 创建应用目录
RUN mkdir -p /app/logs /app/config && \
chown -R appuser:appuser /app
WORKDIR /app
# 从构建阶段复制 JAR 文件
COPY --from=builder --chown=appuser:appuser /build/${MODULE_NAME}/target/${JAR_NAME}.jar app.jar
# 切换到非 root 用户
USER appuser
# 环境变量
ENV TZ=Asia/Shanghai \
JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200" \
SPRING_PROFILES_ACTIVE=prod
# 暴露端口
EXPOSE ${APP_PORT}
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:${APP_PORT}/actuator/health || exit 1
# 启动应用
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar app.jar"]