news 2026/8/16 15:19:10

手把手教你玩转 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/8/7 0:37:30

手把手教你 Linux 服务器和 Windows 安装 Docker 环境(附避坑指南)

视频看了几百小时还迷糊&#xff1f;关注我&#xff0c;几分钟让你秒懂&#xff01; &#x1f9e9; 一、为什么要在服务器上装 Docker&#xff1f; 你是不是经常遇到这些问题&#xff1a; 开发环境跑得好好的&#xff0c;部署到服务器就“水土不服”&#xff1f;想快速部署多…

作者头像 李华
网站建设 2026/8/13 16:06:51

进化算法求解约束多目标优化问题【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 基于分解的自适应约束处理二三目标差分进化算法约束多目标优化问题在工程设计和科…

作者头像 李华
网站建设 2026/7/29 13:18:54

【Docker容器并发限制实战指南】:掌握高并发场景下的资源控制秘诀

第一章&#xff1a;Docker容器并发限制的核心概念在分布式系统与微服务架构中&#xff0c;Docker容器的资源使用需受到合理约束&#xff0c;以防止某一容器占用过多系统资源从而影响其他服务的正常运行。并发限制是控制容器并行执行任务数量的关键机制&#xff0c;其核心目标在…

作者头像 李华
网站建设 2026/8/10 14:31:57

【稀缺干货】资深SRE亲授:企业级Docker健康检查脚本模板精讲

第一章&#xff1a;Docker健康检查的核心价值与应用场景 在容器化部署日益普及的今天&#xff0c;确保服务的持续可用性成为运维的关键挑战。Docker 健康检查&#xff08;HEALTHCHECK&#xff09;机制提供了一种原生方式&#xff0c;用于监控容器内应用的运行状态&#xff0c;从…

作者头像 李华
网站建设 2026/8/3 6:55:49

【Docker与eBPF集成实战】:手把手教你完成安装配置的5个关键步骤

第一章&#xff1a;Docker与eBPF集成概述 Docker 作为主流的容器化平台&#xff0c;提供了轻量级、可移植的应用运行环境。而 eBPF&#xff08;extended Berkeley Packet Filter&#xff09;是一种内核虚拟机技术&#xff0c;允许开发者在不修改内核源码的前提下安全地运行沙盒…

作者头像 李华