Files
lab/Dockerfile

52 lines
1.9 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.
# =====================================================================
# 后端镜像:多阶段构建(Maven 编译 -> JRE 运行)
# 构建:docker build -t lab-backend .
# 运行:docker run -p 8080:8080 -e SPRING_PROFILES_ACTIVE=mariadb \
# -e DB_HOST=host.docker.internal -e DB_USER=lab -e DB_PASSWORD=lab123456 lab-backend
#
# 国内加速:构建阶段使用阿里云 Maven 镜像(docker/maven-settings.xml)
# 如需走官方中央仓库:docker build --build-arg MAVEN_MIRROR=false -t lab-backend .
# =====================================================================
# ---------- 构建阶段 ----------
FROM maven:3.9-eclipse-temurin-21 AS build
WORKDIR /build
# MAVEN_MIRROR=false 时跳过阿里云镜像配置,使用默认中央仓库
ARG MAVEN_MIRROR=true
COPY docker/maven-settings.xml /tmp/maven-settings.xml
RUN if [ "$MAVEN_MIRROR" = "true" ]; then \
mkdir -p /root/.m2 && cp /tmp/maven-settings.xml /root/.m2/settings.xml; \
fi
# 先只复制 pom,利用 Docker 层缓存预热依赖
COPY pom.xml .
RUN mvn -B -q -Dmaven.test.skip=true dependency:go-offline
# 再复制源码并打包(测试在 CI/本地执行,镜像构建跳过)
COPY src ./src
RUN mvn -B -q -Dmaven.test.skip=true package \
&& cp target/*.jar /build/app.jar
# ---------- 运行阶段 ----------
FROM eclipse-temurin:21-jre
WORKDIR /opt/app
# 以非 root 用户运行
RUN useradd -r -u 1001 appuser && chown -R appuser:appuser /opt/app
USER appuser
COPY --from=build --chown=appuser:appuser /build/app.jar /opt/app/app.jar
ENV TZ=Asia/Shanghai \
JAVA_OPTS="-Xms256m -Xmx512m" \
SPRING_PROFILES_ACTIVE=dev
EXPOSE 8080
# 容器存活探针:用 bash 的 /dev/tcp 探测端口,避免安装额外工具
HEALTHCHECK --interval=15s --timeout=5s --start-period=40s --retries=5 \
CMD bash -c 'cat < /dev/null > /dev/tcp/127.0.0.1/8080' || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /opt/app/app.jar"]