Spring Boot 打包 Docker 镜像主要有三种方式:1. 手写 Dockerfile 构建(通用、可控);2. Spring Boot 2.3+ 内置 build-image 插件(免 Dockerfile、自动优化);3. 多阶段构建(生产首选,镜像更小、更安全)。

Spring Boot 项目打包成 Docker 镜像并运行,主要有三种主流方式:手写 Dockerfile 构建、使用 Spring Boot 内置 build-image 插件、以及多阶段构建(生产推荐)。选哪种取决于你的环境、团队规范和部署要求。
用 Dockerfile 手动构建(最通用)
适合所有 Spring Boot 版本,控制力强,便于定制。
- 先用 Maven 打出可执行 jar:
mvn clean package -DskipTests,生成的 jar 在target/目录下 - 在项目根目录新建
Dockerfile,内容示例:
FROM openjdk:17-jdk-slim WORKDIR /app COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
- 执行构建命令:
docker build -t myapp:1.0 .(注意末尾的点) - 运行容器:
docker run -d -p 8080:8080 --name myapp-container myapp:1.0
用 Spring Boot Maven 插件一键打镜像(2.3+ 推荐)
无需写 Dockerfile,自动适配 JDK、优化镜像体积,适合快速验证或 CI/CD 流水线。
- 确保 pom.xml 中已启用
spring-boot-maven-plugin(Spring Boot 2.3+ 默认包含) - 直接执行:
mvn spring-boot:build-image -DskipTests - 插件会自动生成镜像,标签默认为
<groupId>/<artifactId>:<version>,比如com.example/demo:0.0.1-SNAPSHOT - 运行:
docker run -d -p 8080:8080 com.example/demo:0.0.1-SNAPSHOT
多阶段构建(生产环境首选)
解决传统方式镜像臃肿、JDK 过大问题,把构建和运行分离,最终镜像只含 JRE 和 jar。
- Dockerfile 示例:
FROM maven:3.8-openjdk-17 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY . . RUN mvn clean package -DskipTests FROM openjdk:17-jre-slim WORKDIR /app COPY --from=builder /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
- 构建后镜像体积通常比单阶段小 50% 以上,且不带 Maven 和源码,更安全
- 命令同上:
docker build -t myapp-prod:1.0 .→docker run -d -p 8080:8080 myapp-prod:1.0
验证与调试小贴士
运行后建议立即检查:
- 查容器是否启动成功:
docker ps -a看 STATUS 是否为 Up - 看日志:
docker logs -f myapp-container,确认无启动异常(如端口冲突、配置缺失) - 本地访问:
curl http://localhost:8080/actuator/health或浏览器打开 - 若需挂载配置或证书,用
-v参数,例如:-v $(pwd)/config:/app/config


















