news 2026/3/10 4:07:26

手把手教你玩转 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/3/7 11:51:40

LiveCodeBench v6得分超Magistral Medium,VibeThinker凭什么?

VibeThinker-1.5B&#xff1a;小模型如何在编程推理中“以小搏大”&#xff1f; 在AI大模型军备竞赛愈演愈烈的今天&#xff0c;参数规模的增长正逐渐触顶。动辄千亿级的模型虽然在通用能力上表现惊艳&#xff0c;但其高昂的训练成本、庞大的部署需求和漫长的推理延迟&#xff…

作者头像 李华
网站建设 2026/3/8 14:24:42

传统AI方案与大模型(行业垂域大模型)方案进

传统AI方案与大模型&#xff08;行业垂域大模型&#xff09;方案进行了对比。下表以两个典型项目为例&#xff0c;清晰地展示了两种技术路线的核心差异。 核心案例对比 对比维度传统AI方案&#xff08;以通号集团高铁安防系统为例&#xff09;-6大模型方案&#xff08;以青岛…

作者头像 李华
网站建设 2026/3/7 0:58:03

TypeScript泛型高级用法:VibeThinker举例Mapped Types应用场景

TypeScript泛型高级用法&#xff1a;VibeThinker举例Mapped Types应用场景 在现代前端工程中&#xff0c;随着系统复杂度的上升&#xff0c;类型安全不再只是“锦上添花”&#xff0c;而是保障项目长期可维护性的核心支柱。尤其是在集成AI模型这类对外部输入极其敏感的场景下&…

作者头像 李华
网站建设 2026/3/5 6:18:26

TinyMCE中文文档难懂?让VibeThinker帮你翻译并解释API

VibeThinker-1.5B-APP&#xff1a;用小模型破解技术文档翻译难题 在开发一线摸爬滚打过的人都懂那种感受——面对一份语焉不详的中文API文档&#xff0c;翻来覆去读三遍还是云里雾里。尤其是像 TinyMCE 这类功能复杂、配置项繁多的富文本编辑器&#xff0c;其官方中文文档常常…

作者头像 李华
网站建设 2026/3/4 20:35:34

【Docker边缘部署终极指南】:从零到生产环境的完整实践路径

第一章&#xff1a;Docker边缘部署的核心概念与价值 在现代分布式系统架构中&#xff0c;将容器化应用部署至边缘节点已成为提升响应速度、降低网络延迟的关键策略。Docker 作为主流的容器化技术&#xff0c;通过轻量级隔离机制和一致的运行环境&#xff0c;为边缘计算场景提供…

作者头像 李华
网站建设 2026/3/5 15:16:29

Docker容器异常行为检测实战(Falco告警配置全解析)

第一章&#xff1a;Docker容器异常行为检测实战&#xff08;Falco告警配置全解析&#xff09;在现代云原生架构中&#xff0c;Docker容器的动态性和轻量级特性使得传统安全监控手段难以覆盖其运行时风险。Falco作为开源的运行时安全检测工具&#xff0c;能够实时捕获容器内的异…

作者头像 李华