news 2026/5/12 22:28:11

手把手教你用 Docker 一键启动 RabbitMQ、MySQL、Redis、Nginx(含 Spring Boot 联调实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用 Docker 一键启动 RabbitMQ、MySQL、Redis、Nginx(含 Spring Boot 联调实战)

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


🧩 一、为什么用 Docker 启动这些中间件?

在开发 Spring Boot 项目时,你是不是经常要:

  • 手动下载 MySQL 安装包,配置 root 密码、字符集?
  • 花半小时装 Redis,结果启动失败?
  • 想本地测试 RabbitMQ,但官网安装复杂到劝退?
  • 配置 Nginx 反向代理,改错一个符号就 502?

Docker 让这一切变得像“点外卖”一样简单!

只需一行命令,就能启动一个预配置好的服务容器,无需安装、不污染系统、随时销毁重建

本文将手把手教你: ✅ 用 Docker 分别启动RabbitMQ、MySQL、Redis、Nginx
✅ 配置合理的参数(密码、端口、持久化)
✅ 与 Spring Boot 项目联调
✅ 避开新手常见坑!


🛠️ 二、准备工作

确保你已安装 Docker(参考上一篇文章),并打开终端(Linux/macOS)或 PowerShell(Windows)。

验证:

docker --version

🐘 三、1. 启动 MySQL(带持久化 + UTF8)

✅ 正确姿势(推荐)

docker run -d \ --name mysql-db \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=myapp_db \ -v mysql_data:/var/lib/mysql \ -p 3306:3306 \ --restart=always \ mysql:8.0

🔍 参数说明:

  • -d:后台运行
  • --name mysql-db:容器命名,方便管理
  • -e MYSQL_ROOT_PASSWORD=123456:设置 root 密码(必须指定!
  • -e MYSQL_DATABASE=myapp_db:自动创建数据库
  • -v mysql_data:/var/lib/mysql数据持久化(即使容器删了,数据还在)
  • -p 3306:3306:映射端口(宿主机:容器)
  • --restart=always:开机自启
  • mysql:8.0:使用官方 8.0 镜像

✅ 验证:

docker logs mysql-db # 查看启动日志 docker exec -it mysql-db mysql -uroot -p123456 # 进入 MySQL

❌ 反例:不设密码 or 不持久化

# 错误!没密码会启动失败(MySQL 8+ 强制要求) docker run -d -p 3306:3306 mysql:8.0 # 错误!容器一删,数据全丢 docker run -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0

🟥 四、2. 启动 Redis(带密码 + 持久化)

✅ 正确姿势

docker run -d \ --name redis-cache \ -v redis_data:/data \ -p 6379:6379 \ --restart=always \ redis:7.0 \ redis-server --appendonly yes --requirepass "mypassword123"

🔍 参数说明:

  • --appendonly yes:开启 AOF 持久化
  • --requirepass "mypassword123":设置访问密码
  • -v redis_data:/data:持久化数据到 volume

✅ 验证:

docker exec -it redis-cache redis-cli -a mypassword123 127.0.0.1:6379> ping PONG

❌ 反例:裸奔无密码

# 危险!任何知道你 IP 的人都能清空你的 Redis! docker run -d -p 6379:6379 redis:7.0

🐇 五、3. 启动 RabbitMQ(带管理界面)

✅ 正确姿势

docker run -d \ --name rabbitmq-server \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin123 \ -v rabbitmq_data:/var/lib/rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ --restart=always \ rabbitmq:3.12-management

🔍 参数说明:

  • rabbitmq:3.12-management必须带 management 标签,否则没有 Web 管理界面
  • -p 5672:5672:AMQP 协议端口(Spring Boot 连这个)
  • -p 15672:15672:Web 管理界面端口
  • -e RABBITMQ_DEFAULT_USER/PASS:设置默认账号密码

✅ 验证:

  • 浏览器访问:http://localhost:15672
  • 用户名/密码:admin / admin123

❌ 反例:用错镜像

# 错误!这个镜像没有管理界面,无法可视化调试 docker run -d -p 5672:5672 rabbitmq:3.12

🌐 六、4. 启动 Nginx(反向代理 Spring Boot)

✅ 场景:用 Nginx 代理本地 8080 的 Spring Boot 应用

步骤 1:创建配置目录
mkdir -p ~/nginx/conf.d
步骤 2:创建~/nginx/conf.d/default.conf
server { listen 80; server_name localhost; location /api/ { proxy_pass http://host.docker.internal:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { root /usr/share/nginx/html; index index.html; } }

💡host.docker.internal是 Docker 提供的特殊 DNS,指向宿主机(Windows/Mac 支持,Linux 需加--add-host=host.docker.internal:host-gateway

步骤 3:启动 Nginx
docker run -d \ --name nginx-proxy \ -v ~/nginx/conf.d:/etc/nginx/conf.d \ -p 80:80 \ --restart=always \ nginx:1.25

✅ 验证:

假设你的 Spring Boot 有接口GET /hello,现在可通过:

http://localhost/api/hello

访问(Nginx 会转发到http://宿主机:8080/hello

❌ 反例:直接用默认 Nginx 不改配置

  • 无法代理后端
  • 静态资源也访问不了
  • 白跑!

🔄 七、Spring Boot 联调配置示例

在你的application.yml中配置连接信息:

spring: datasource: url: jdbc:mysql://localhost:3306/myapp_db?useSSL=false&serverTimezone=UTC username: root password: 123456 redis: host: localhost port: 6379 password: mypassword123 lettuce: pool: max-active: 8 rabbitmq: host: localhost port: 5672 username: admin password: admin123

💡 注意:所有 host 都是localhost,因为我们把容器端口映射到了宿主机。


🧹 八、一键管理:查看 & 清理

# 查看所有运行中的容器 docker ps # 停止并删除所有示例容器 docker stop mysql-db redis-cache rabbitmq-server nginx-proxy docker rm mysql-db redis-cache rabbitmq-server nginx-proxy # 删除持久化数据(谨慎!) docker volume rm mysql_data redis_data rabbitmq_data

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

  1. 端口冲突
    如果 3306/6379 等端口被占用,修改宿主机端口,如-p 3307:3306

  2. Linux 下 Nginx 代理宿主机问题
    在 Linux 上,host.docker.internal默认不可用,启动 Nginx 时加:

    --add-host=host.docker.internal:host-gateway
  3. 生产环境不要用默认密码
    本文密码仅为演示,请务必修改为强密码!

  4. volume 比 bind mount 更安全
    优先用-v volume_name:/path而不是-v /host/path:/container/path,避免权限问题。

  5. 镜像版本固定
    建议指定完整 tag,如mysql:8.0.36,避免latest自动升级导致兼容问题。


✅ 十、总结:四行命令搞定四大中间件

# MySQL docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=123456 -v mysql_data:/var/lib/mysql -p 3306:3306 mysql:8.0 # Redis docker run -d --name redis-cache -v redis_data:/data -p 6379:6379 redis:7.0 redis-server --appendonly yes --requirepass "mypassword123" # RabbitMQ docker run -d --name rabbitmq-server -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 -v rabbitmq_data:/var/lib/rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management # Nginx docker run -d --name nginx-proxy -v ~/nginx/conf.d:/etc/nginx/conf.d -p 80:80 nginx:1.25

复制粘贴,5 分钟搭建完整开发环境!


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

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

ChromeDriver下载地址汇总+AI编程助手搭配使用技巧

ChromeDriver 与 AI 编程助手的协同开发实践 在智能开发日益普及的今天,一个明显的趋势正在浮现:自动化工具不再只是“执行者”,而正逐步演变为具备“思考能力”的协作伙伴。以浏览器自动化为例,过去我们依赖手动编写 Selenium 脚…

作者头像 李华
网站建设 2026/5/1 15:03:54

揭秘Docker容器安全漏洞:Cilium Network Policy如何构建坚不可摧的防护墙?

第一章:Docker容器安全威胁全景洞察Docker 作为主流的容器化技术,极大提升了应用部署效率与资源利用率。然而,其共享内核、动态编排和镜像分发机制也引入了新的攻击面。理解这些潜在威胁是构建安全容器环境的前提。镜像来源不可信 使用未经验…

作者头像 李华
网站建设 2026/5/8 7:00:16

AIME24得分80.3!这款15亿参数模型正在改写数学推理格局

VibeThinker-1.5B:小模型如何在数学推理中实现“降维打击”? 在AIME24(美国数学邀请赛2024)的模拟评测中,一款仅含15亿参数的模型拿下了80.3分——这个数字不仅超过了初始版DeepSeek R1(79.8)&…

作者头像 李华
网站建设 2026/5/1 7:25:18

Baidu PaddlePaddle模型部署:VibeThinker生成Serving服务脚本

Baidu PaddlePaddle模型部署:VibeThinker生成Serving服务脚本 在AI工程落地的实践中,一个训练好的模型若无法高效服务于真实业务场景,其价值将大打折扣。尤其是在数学推理、算法编程等专业领域,开发者往往面临这样的困境&#xff…

作者头像 李华