Files
aiot-platform-cloud/docker/Dockerfile.template
lzh b3948df69b
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
feat: 添加 Jenkins CI/CD 配置和部署脚本
- 添加 Jenkinsfile 支持智能增量构建
- 添加 Docker 多阶段构建模板
- 添加 Docker Compose 配置(连接 1Panel 中间件)
- 添加部署、回滚、清理脚本
- 添加环境变量配置模板
2026-01-13 09:49:19 +08:00

84 lines
2.2 KiB
Docker

# 多阶段构建 Dockerfile 模板
# 适用于所有 Spring Boot 服务
# ============ 构建阶段 ============
FROM eclipse-temurin:17-jdk-alpine AS builder
# 安装必要工具
RUN apk add --no-cache maven
# 设置工作目录
WORKDIR /build
# 复制 Maven 配置文件(利用 Docker 缓存)
COPY pom.xml .
COPY viewsh-dependencies/pom.xml viewsh-dependencies/
COPY viewsh-framework/pom.xml viewsh-framework/
COPY viewsh-gateway/pom.xml viewsh-gateway/
COPY viewsh-module-system/pom.xml viewsh-module-system/
COPY viewsh-module-infra/pom.xml viewsh-module-infra/
COPY viewsh-module-iot/pom.xml viewsh-module-iot/
COPY viewsh-module-ops/pom.xml viewsh-module-ops/
COPY viewsh-server/pom.xml viewsh-server/
# 下载依赖(利用缓存层)
RUN mvn dependency:go-offline -B || true
# 复制源代码
COPY . .
# 构建参数:指定要构建的模块
ARG MODULE_NAME
ARG SKIP_TESTS=true
# 编译打包
RUN if [ "$SKIP_TESTS" = "true" ]; then \
mvn clean package -pl ${MODULE_NAME} -am -DskipTests -B; \
else \
mvn clean package -pl ${MODULE_NAME} -am -B; \
fi
# ============ 运行阶段 ============
FROM eclipse-temurin:17-jre-alpine
# 构建参数
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 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs/heap-dump.hprof" \
SPRING_PROFILES_ACTIVE=prod \
APP_ARGS=""
# 暴露端口
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} -Djava.security.egd=file:/dev/./urandom -jar app.jar ${APP_ARGS}"]