Files
lab/Dockerfile

42 lines
1.5 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
# =====================================================================
# ---------- 构建阶段 ----------
FROM docker.io/library/maven:3.9-eclipse-temurin-21 AS build
WORKDIR /build
# 先只复制 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 docker.io/library/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"]