- 移除 -q (quiet) 参数,允许显示构建步骤 - 添加 --no-transfer-progress 参数,隐藏依赖下载进度但保留构建信息 - 添加构建前后的进度提示信息 - 添加构建完成后的JAR文件列表显示 这样可以在Docker构建时看到Maven的编译进度,避免看起来像卡住的情况。
79 lines
2.0 KiB
Desktop File
79 lines
2.0 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 echo "========================================" && \
|
||
echo "🔨 Building module: ${MODULE_NAME}" && \
|
||
echo "📦 JAR name: ${JAR_NAME}" && \
|
||
echo "⏭️ Skip tests: ${SKIP_TESTS}" && \
|
||
echo "========================================" && \
|
||
mvn package -pl ${MODULE_NAME} -am \
|
||
-DskipTests=${SKIP_TESTS} \
|
||
-B \
|
||
--no-transfer-progress && \
|
||
echo "✅ Build completed successfully!" && \
|
||
ls -lh ${MODULE_NAME}/target/*.jar
|
||
|
||
# ============ 运行阶段 ============
|
||
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"]
|