news 2026/5/6 11:21:33

手把手教你玩转 Docker:Spring Boot 项目容器化实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你玩转 Docker:Spring Boot 项目容器化实战指南

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!


🧩 一、为什么我们要用 Docker?

在开发 Spring Boot 应用时,你是否遇到过这些问题:

  • “在我本地能跑,怎么部署到服务器就挂了?”
  • “不同环境依赖版本不一致,调试起来头大!”
  • “部署流程太复杂,每次上线都像打仗。”

Docker 就是为了解决这些问题而生的!

它通过「容器化」技术,把你的应用 + 运行环境打包成一个独立、可移植的“集装箱”,真正做到一次构建,处处运行


🎯 二、需求场景:把一个 Spring Boot 项目打包进 Docker 容器

假设你有一个简单的用户管理 API,使用 Spring Boot + MySQL 开发。现在你要把它部署到测试服务器上,但不想手动安装 JDK、配置环境变量、启动命令……这时候,Docker 就派上用场了!


✅ 三、正确姿势:Spring Boot + Docker 容器化步骤(附代码)

步骤 1:准备一个 Spring Boot 项目

我们创建一个最简的 REST 接口:

// UserController.java package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web/bind.annotation.RestController; @RestController public class UserController { @GetMapping("/hello") public String sayHello() { return "Hello from Dockerized Spring Boot!"; } }

确保application.properties中没有硬编码数据库地址(后续可用环境变量注入):

# application.properties server.port=8080

步骤 2:添加 Maven 插件(可选但推荐)

pom.xml中加入 Spring Boot 的 Maven 插件,方便打包:

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

执行打包命令生成 JAR:

./mvnw clean package -DskipTests

生成的文件路径通常是:target/demo-0.0.1-SNAPSHOT.jar


步骤 3:编写 Dockerfile(关键!)

在项目根目录下创建Dockerfile

# 使用官方 OpenJDK 17 镜像作为基础镜像 FROM openjdk:17-jdk-slim # 设置工作目录 WORKDIR /app # 将本地 JAR 文件复制到容器中 COPY target/demo-0.0.1-SNAPSHOT.jar app.jar # 暴露端口(必须和 Spring Boot 的 server.port 一致) EXPOSE 8080 # 启动应用 ENTRYPOINT ["java", "-jar", "app.jar"]

💡 注意:JAR 文件名要和你实际打包的名称一致!


步骤 4:构建 Docker 镜像

在项目根目录执行:

docker build -t springboot-demo:1.0 .
  • -t指定镜像名称和标签
  • .表示当前目录为上下文

构建成功后,用docker images查看:

REPOSITORY TAG IMAGE ID CREATED SIZE springboot-demo 1.0 abc123456789 2 minutes ago 280MB

步骤 5:运行容器

docker run -d -p 8080:8080 --name my-spring-app springboot-demo:1.0
  • -d:后台运行
  • -p 8080:8080:将主机 8080 端口映射到容器 8080 端口
  • --name:给容器起个名字

访问http://localhost:8080/hello,你应该看到:

Hello from Dockerized Spring Boot!

✅ 成功!你的 Spring Boot 应用已容器化运行!


❌ 四、反例:新手常犯的错误

反例 1:Dockerfile 写错 JAR 路径

# 错误!JAR 文件不在根目录 COPY demo.jar app.jar

后果:构建时报错COPY failed: file not found

✅ 正确做法:确认target/下的 JAR 名称,并使用相对路径。


反例 2:忘记暴露端口或端口不匹配

EXPOSE 9090 # 但 Spring Boot 默认是 8080

后果:容器启动了,但外部无法访问!

✅ 正确做法:确保EXPOSEserver.port一致,且-p映射正确。


反例 3:直接在容器里改代码调试

有些新手会进入容器修改代码,重启应用……
这是大忌!

Docker 容器是无状态的,一旦删除,所有修改都会丢失。

✅ 正确做法:修改本地代码 → 重新打包 → 重建镜像 → 重启容器。


⚠️ 五、注意事项(避坑指南)

  1. 不要把敏感信息写死在 Dockerfile 或代码里
    使用环境变量或挂载配置文件:

    docker run -e SPRING_DATASOURCE_URL=jdbc:mysql://... ...
  2. 镜像尽量小
    使用slimalpine基础镜像,避免臃肿。

  3. 多阶段构建(进阶)
    如果你关心镜像大小,可以用多阶段构建只保留 JAR,不包含 Maven 缓存等。

  4. 日志输出
    Spring Boot 默认输出到控制台,Docker 会自动捕获。用docker logs my-spring-app查看。

  5. 健康检查(生产建议)
    可在 Dockerfile 中加HEALTHCHECK,或配合 Kubernetes 使用/actuator/health


🚀 六、进阶方向(供参考)

  • 使用docker-compose同时启动 Spring Boot + MySQL
  • 集成 Jenkins 实现 CI/CD 自动构建镜像
  • 推送镜像到 Docker Hub 或私有 Harbor 仓库
  • 使用 Docker + Nginx 实现反向代理

✅ 总结

步骤操作
1编写 Spring Boot 应用
2打包成 JAR
3编写正确的 Dockerfile
4构建镜像
5运行容器并验证

Docker 不是魔法,但它能极大简化部署流程,提升开发效率。只要掌握基本规则,你也能轻松“玩转”它!


视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 13:43:35

ClickHouse列式存储:VibeThinker写出高效聚合查询

VibeThinker-1.5B&#xff1a;小模型如何实现高强度逻辑推理 在当前大模型动辄数百亿、数千亿参数的背景下&#xff0c;一个仅 15 亿参数的语言模型竟能在数学与编程任务中超越许多“庞然大物”&#xff0c;听起来似乎有些不可思议。但微博开源的 VibeThinker-1.5B-APP 正是这样…

作者头像 李华
网站建设 2026/4/30 18:57:47

友达 G101STN01.0 工业便携屏:10.1 英寸轻量 TN 显示驱动技术解析

前言If you have any questions, feel free to communicate at any timeRecord each screen with code【V】【Guste8868】在工业小型手持终端、便携数据采集设备场景中&#xff0c;10.1 英寸 WSVGA 模组需满足 **-10~60℃宽温 **、250 cd/m 亮度、TN 常白显示的超轻量需求&…

作者头像 李华
网站建设 2026/5/4 23:29:42

机载MIMO雷达节点资源与路径优化管控【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 机载分布式MIMO雷达协同探测模型与性能指标体系构建机载分布式多输入多输出雷达系…

作者头像 李华
网站建设 2026/5/1 22:43:07

基于微信小程序的智能在线预约挂号系统【源码文末联系】

基于微信小程序的智能在线预约挂号系统 三个角色&#xff08;管理员&#xff0c;用户&#xff0c;医生&#xff09; 效果如下&#xff1a; 登录页面预约挂号页面管理员首页面退费申请管理页面用户首页面科室信息页面医生详情页面公告信息详情页面研究背景 随着移动互联网的深度…

作者头像 李华
网站建设 2026/5/1 8:17:27

Julia科学计算:VibeThinker编写微分方程求解器

Julia科学计算&#xff1a;VibeThinker编写微分方程求解器 在科研与工程建模中&#xff0c;一个常见的场景是&#xff1a;研究人员刚写下“系统衰减速率与当前状态成正比”&#xff0c;转头就要面对如何将其转化为可运行的数值模拟代码。这个过程看似简单&#xff0c;实则涉及数…

作者头像 李华