First commit
This commit is contained in:
41
Dockerfile
Normal file
41
Dockerfile
Normal file
@@ -0,0 +1,41 @@
|
||||
# =====================================================================
|
||||
# 后端镜像:多阶段构建(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 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 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"]
|
||||
Reference in New Issue
Block a user