spring boot 微服务 docker 容器化核心是构建可执行 fat-jar、编写多阶段 dockerfile、安全运行容器;需用 spring-boot-maven-plugin 打包验证,选 eclipse-temurin jre 镜像,创建非 root 用户,设环境变量与健康检查,并通过环境变量外置配置、挂载日志与配置目录实现可配置、可观测、可管理。

Spring Boot 微服务用 Docker 容器化,核心不是改代码,而是把应用打包成可运行、可配置、可管理的镜像,并以安全方式启动为容器。整个过程围绕 构建可执行 jar → 编写生产级 Dockerfile → 安全运行容器 展开。
确保项目能打出标准 fat-jar
Spring Boot 默认通过 spring-boot-maven-plugin 打包,生成含 BOOT-INF/ 目录的可执行 jar:
- 执行
mvn clean package -DskipTests,产物在target/*.jar - 本地验证:运行
java -jar target/*.jar,访问/actuator/health返回{"status":"UP"}即说明可执行性正常 - 检查 jar 内部结构:
jar -tf target/*.jar | grep BOOT-INF,有输出才代表是 Spring Boot 标准 fat-jar
写轻量、分阶段的 Dockerfile
避免把 Maven、JDK、源码全塞进最终镜像,推荐多阶段构建:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
Builder 阶段:用
maven:3.9-eclipse-temurin-17编译,加--mount=type=cache,target=/root/.m2复用本地依赖缓存 -
Runtime 阶段:选精简 JRE 镜像,如
eclipse-temurin:17-jre-jammy(不建议 Alpine,除非确认 glibc 兼容性) - 创建非 root 用户:
RUN adduser -S appuser && chown -R appuser:appuser /app && USER appuser - COPY 构建产物:
COPY --from=builder /build/target/*.jar ./app.jar - 设基础环境:
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms256m -Xmx512m" - 加健康检查:
HEALTHCHECK --interval=30s CMD curl -f http://localhost:8080/actuator/health || exit 1
运行时注入配置与环境变量
敏感信息不写死,靠环境变量动态覆盖 application.yml 中的占位符:
- 示例配置:
spring.datasource.url=jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/mydb - 启动时传参:
docker run -d -p 8080:8080 -e DB_HOST=10.0.1.20 -e DB_PORT=3307 my-service:1.0.0 - 更安全的做法:用
.env文件管理变量,再通过--env-file .env加载 - 多服务协同时,统一用
docker-compose.yml的environment或env_file字段集中定义
部署后验证与日志管理
镜像 build 完只是开始,运行阶段要确认关键项是否生效:
- 打标签关联版本:
docker build -t user-svc:1.2.0 --label "commit=$(git rev-parse HEAD)" . - 挂载外部配置目录:
-v $(pwd)/config:/app/config,让application-prod.yml等从容器外加载 - 日志落盘:
-v /var/log/user-svc:/app/logs,并在logback-spring.xml中指向logs/app.log - 查启动状态:
docker logs -f user-svc,确认无Connection refused、ClassNotFoundException或 profile 加载失败 - 检查健康状态:
docker ps中 HEALTH 列应为healthy
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










