核心是多阶段构建+轻量jre镜像:第一阶段用maven:3.9-eclipse-temurin-17编译打包,第二阶段仅copy jar至eclipse-temurin:17-jre-alpine等精简镜像,排除冗余文件并配置非root用户、容器内存适配与健康检查。

Java 项目用 Docker 搭建,核心是写好 Dockerfile、构建轻量镜像、安全运行容器。不依赖宿主机 JDK,配置全打包进镜像,开箱即用。
选对基础镜像
运行阶段别用 full JDK,只装 JRE 就够了。推荐优先选:
- eclipse-temurin:17-jre-alpine(约 170MB):体积最小,适合资源敏感场景,但需确认应用兼容 Alpine 的 musl libc
- eclipse-temurin:17-jre-jammy(约 230MB):基于 Ubuntu,兼容性更好,时区、字符集、SSL 默认更稳
- 避免用
openjdk:17或adoptopenjdk等非官方/已归档镜像,安全性与维护性没保障
用多阶段构建瘦身
把编译和运行环境分开,最终镜像里不带 Maven、源码、测试类——这是减小体积最关键的一步:
- 第一阶段用
maven:3.9-eclipse-temurin-17编译打包,RUN mvn package -DskipTests - 第二阶段只 COPY
target/*.jar进精简 JRE 镜像,不复制任何中间产物 - 加
.dockerignore排除target/、.git/、logs/、IDEA/等,避免无用文件拖慢构建
安全与资源控制要落地
别让容器以 root 跑 Java 进程,也别放任它吃光内存:
- 创建非 root 用户:
RUN addgroup -r appgroup && adduser -r appuser -G appgroup,再USER appuser - JVM 自动适配容器内存:
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0" - 启动时限制资源:
docker run --memory=512m --cpus=1.5,避免影响宿主机其他服务
加健康检查和优雅关闭
让容器真正“可管理”,不只是跑起来:
- 对接 Spring Boot Actuator:
HEALTHCHECK --interval=30s CMD curl -f http://localhost:8080/actuator/health || exit 1 - 支持 SIGTERM 退出:
STOPSIGNAL SIGTERM,配合 Spring 的spring.lifecycle.timeout-per-shutdown-phase=30s - 暴露端口用
EXPOSE 8080(仅文档作用),实际映射靠-p 8080:8080启动时指定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











