Files
AIGC/demo/backend/Dockerfile.linux
2025-11-13 17:01:39 +08:00

55 lines
1.6 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.

# 多阶段构建:构建阶段
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /app
# 复制 pom.xml 并下载依赖利用Docker缓存
COPY pom.xml .
RUN mvn dependency:go-offline -B || true
# 复制源码
COPY src ./src
# 打包应用(跳过测试)
RUN mvn clean package -DskipTests -B
# 生产阶段
FROM eclipse-temurin:21-jre
WORKDIR /app
# 安装时区支持和wget健康检查
RUN apt-get update && \
apt-get install -y --no-install-recommends \
tzdata \
wget \
curl && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 创建非root用户安全考虑
RUN groupadd -r spring && useradd -r -g spring spring
# 创建必要的目录并设置权限
RUN mkdir -p /app/uploads /app/temp /app/logs && \
chown -R spring:spring /app
# 从构建阶段复制JAR文件项目生成的JAR文件名demo-0.0.1-SNAPSHOT.jar
COPY --from=builder --chown=spring:spring /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
# 切换到非root用户
USER spring
EXPOSE 8080
# JVM 参数优化适配50人并发建议2-4GB内存
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom"
# 健康检查检查应用是否响应不依赖Actuator
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]