夜雨聆风学习资料网

ARTICLE · 1080696

Docker 安装 RabbitMQ 教程

Docker 安装 RabbitMQ 教程

适用场景:Windows 11 + WSL / Linux / Docker 环境本教程采用 Docker 命名卷 方式持久化 RabbitMQ 数据,风格与 MySQL、Redis 的 Docker 安装方式保持一致。


1. 本次安装目标

本次安装 RabbitMQ,并完成以下目标:

  • 使用 Docker 安装 RabbitMQ 3.8.8

  • 使用带 Web 管理后台的 management 镜像

  • 支持浏览器访问 RabbitMQ 管理页面

  • 使用 Docker 命名卷持久化数据

  • 使用 Docker 命名卷持久化日志

  • 设置 RabbitMQ 默认账号密码

  • 设置北京时间

  • 设置健康检查

  • 设置 Docker 自动重启

  • 验证电脑重启后 RabbitMQ 仍然可用

  • 验证 RabbitMQ 队列数据不会丢失


2. 最终安装版本

项目内容
RabbitMQ 版本3.8.8-management
RabbitMQ 服务端口5672
RabbitMQ 管理后台端口15672
默认用户名admin
默认密码123456
数据卷rabbitmq_data
日志卷rabbitmq_log
容器名称rabbitmq
主机名rabbitmq-host
时区Asia/Shanghai
重启策略--restart=always

3. 拉取 RabbitMQ 镜像

执行命令:

docker pull rabbitmq:3.8.8-management

说明:

rabbitmq:3.8.8-management

表示安装 RabbitMQ 3.8.8,并且自带 Web 管理后台。

如果只使用:

docker pull rabbitmq:3.8.8

默认是不带浏览器管理后台的,不适合新手学习和本地开发调试。


4. 启动 RabbitMQ 容器

执行下面命令:

docker run -d \--name rabbitmq \--hostname rabbitmq-host \-p5672:5672 \-p15672:15672 \-eRABBITMQ_DEFAULT_USER=admin \-eRABBITMQ_DEFAULT_PASS=123456 \-eRABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456 \-eTZ=Asia/Shanghai \-v rabbitmq_data:/var/lib/rabbitmq \-v rabbitmq_log:/var/log/rabbitmq \--health-cmd="rabbitmq-diagnostics -q ping" \--health-interval=30s \--health-timeout=10s \--health-retries=5 \--restart=always \  rabbitmq:3.8.8-management

5. 命令参数说明

参数说明
docker run -d后台启动容器
--name rabbitmq容器名称叫 rabbitmq
--hostname rabbitmq-host设置 RabbitMQ 节点主机名
-p 5672:5672RabbitMQ 服务连接端口,Java / Spring Boot 程序连接使用
-p 15672:15672RabbitMQ Web 管理后台端口,浏览器访问使用
RABBITMQ_DEFAULT_USER=admin设置默认用户名
RABBITMQ_DEFAULT_PASS=123456设置默认密码
RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456固定 Erlang Cookie,方便后续稳定运行或扩展集群
TZ=Asia/Shanghai设置容器时区为北京时间
-v rabbitmq_data:/var/lib/rabbitmq使用 Docker 命名卷持久化 RabbitMQ 数据
-v rabbitmq_log:/var/log/rabbitmq使用 Docker 命名卷持久化 RabbitMQ 日志
--health-cmd="rabbitmq-diagnostics -q ping"设置健康检查命令
--health-interval=30s每 30 秒检查一次
--health-timeout=10s每次检查超时时间 10 秒
--health-retries=5连续失败 5 次才认为不健康
--restart=alwaysDocker 启动后自动启动 RabbitMQ
rabbitmq:3.8.8-management使用 RabbitMQ 3.8.8 管理后台版本

6. 和 MySQL 安装方式的对应关系

之前 MySQL 5.7 的安装命令类似:

docker run -d \--name mysql57 \-p3306:3306 \-eMYSQL_ROOT_PASSWORD=123456 \-v mysql57_data:/var/lib/mysql \--restart=always \  mysql:5.7 \--character-set-server=utf8mb4 \--collation-server=utf8mb4_general_ci

RabbitMQ 的安装方式与 MySQL 类似:

MySQLRabbitMQ说明
--name mysql57--name rabbitmq容器名称
-p 3306:3306-p 5672:5672服务连接端口
无-p 15672:15672RabbitMQ 管理后台端口
MYSQL_ROOT_PASSWORD=123456RABBITMQ_DEFAULT_PASS=123456默认密码
-v mysql57_data:/var/lib/mysql-v rabbitmq_data:/var/lib/rabbitmq数据持久化
mysql:5.7rabbitmq:3.8.8-management镜像版本

7. 查看 RabbitMQ 是否启动成功

执行:

docker ps

正常情况下可以看到类似内容:

rabbitmq:3.8.8-management   Up ... (healthy)   0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp   rabbitmq

重点看这几个信息:

rabbitmqUp ... (healthy)0.0.0.0:5672->5672/tcp0.0.0.0:15672->15672/tcp

如果刚启动时显示:

health: starting

这是正常的,等几十秒后再执行:

docker ps

正常会变成:

healthy

8. 浏览器访问 RabbitMQ 管理后台

浏览器访问:

http://localhost:15672

登录账号:

用户名:admin密码:123456

登录成功后,可以看到 RabbitMQ 管理后台页面。


9. RabbitMQ 两个端口的区别

端口用途
5672程序连接 RabbitMQ 使用,例如 Java / Spring Boot
15672浏览器访问 RabbitMQ 管理后台使用

所以浏览器访问的是:

http://localhost:15672

不是:

http://localhost:5672

10. 查看 RabbitMQ 日志

执行:

docker logs -f rabbitmq

如果看到类似内容:

Server startup complete

说明 RabbitMQ 服务启动完成。

退出日志查看可以按:

Ctrl + C

11. 查看 Docker 数据卷

执行:

docker volume ls

正常可以看到:

rabbitmq_datarabbitmq_log

你的本地环境中还可能看到:

mysql57_dataredis_datarabbitmq_datarabbitmq_log

这说明 MySQL、Redis、RabbitMQ 都已经使用 Docker 命名卷做了数据持久化。


12. 查看 RabbitMQ 数据卷详情

查看 RabbitMQ 数据卷:

docker volume inspect rabbitmq_data

查看 RabbitMQ 日志卷:

docker volume inspect rabbitmq_log

这些命令可以看到数据卷在 Docker 内部的实际存储位置。


13. 创建测试队列

进入 RabbitMQ 管理后台:

http://localhost:15672

点击顶部菜单:

Queues

找到:

Add a new queue

创建一个测试队列:

test_queue

创建成功后,页面会显示:

All queues (1)

并且可以看到:

test_queue

14. 验证 RabbitMQ 数据持久化

创建 test_queue 后,重启 RabbitMQ 容器:

docker restart rabbitmq

然后刷新 RabbitMQ 管理后台。

如果还能看到:

test_queue

说明容器重启后,RabbitMQ 队列数据没有丢失。

这就证明:

rabbitmq_data 数据卷持久化成功

15. 验证电脑重启后是否生效

电脑重启后,重新进入 WSL 或终端,执行:

docker ps

正常可以看到:

rabbitmq   Up ... (healthy)mysql57    Up ...redis      Up ...

然后执行:

docker volume ls

正常可以看到:

mysql57_dataredis_datarabbitmq_datarabbitmq_log

再用浏览器访问:

http://localhost:15672

进入 Queues 页面,如果还能看到:

test_queue

说明:

电脑重启后 RabbitMQ 自动启动成功电脑重启后 RabbitMQ 数据持久化成功

16. 常用 Docker 命令

查看运行中的容器

docker ps

查看所有容器

docker ps -a

启动 RabbitMQ

docker start rabbitmq

停止 RabbitMQ

docker stop rabbitmq

重启 RabbitMQ

docker restart rabbitmq

查看 RabbitMQ 日志

docker logs -f rabbitmq

进入 RabbitMQ 容器

docker exec -it rabbitmq bash

删除 RabbitMQ 容器

docker rm -f rabbitmq

注意:删除容器不会删除 rabbitmq_data 和 rabbitmq_log 数据卷。


17. 重新创建 RabbitMQ 容器但保留数据

如果容器有问题,可以删除容器:

docker rm -f rabbitmq

然后重新执行安装命令:

docker run -d \  --name rabbitmq \  --hostname rabbitmq-host \  -p 5672:5672 \  -p 15672:15672 \  -e RABBITMQ_DEFAULT_USER=admin \  -e RABBITMQ_DEFAULT_PASS=123456 \  -e RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456 \  -e TZ=Asia/Shanghai \  -v rabbitmq_data:/var/lib/rabbitmq \  -v rabbitmq_log:/var/log/rabbitmq \  --health-cmd="rabbitmq-diagnostics -q ping" \  --health-interval=30s \  --health-timeout=10s \  --health-retries=5 \  --restart=always \  rabbitmq:3.8.8-management

只要没有删除数据卷:

rabbitmq_datarabbitmq_log

RabbitMQ 的队列、交换机、用户、权限等数据一般都还在。


18. 彻底删除 RabbitMQ

如果想彻底删除 RabbitMQ 容器和数据,执行:

docker rm -f rabbitmq

再删除数据卷:

docker volume rm rabbitmq_data

删除日志卷:

docker volume rm rabbitmq_log

注意:执行后 RabbitMQ 的数据会被彻底删除,包括队列、交换机、消息、用户、权限等。


19. Spring Boot 连接 RabbitMQ 配置

如果 Spring Boot 项目运行在本机,可以这样配置:

spring:  rabbitmq:    host: localhost    port: 5672    username: admin    password: 123456    virtual-host: /

说明:

配置说明
host: localhost本机连接 RabbitMQ
port: 5672RabbitMQ 服务端口
username: admin用户名
password: 123456密码
virtual-host: /默认虚拟主机

如果 Spring Boot 项目也运行在 Docker 容器里,host 不要写 localhost,要写 RabbitMQ 容器名或 Docker 网络里的服务名,例如:

spring:  rabbitmq:    host: rabbitmq    port: 5672    username: admin    password: 123456    virtual-host: /

20. 当前本地开发环境总结

目前本地 Docker 环境中已经有:

服务容器名端口数据卷
MySQL 5.7mysql573306mysql57_data
Redis 6.2redis6379redis_data
RabbitMQ 3.8.8rabbitmq5672 / 15672rabbitmq_data / rabbitmq_log

这套环境已经可以支撑 Spring Boot 本地开发:

  • MySQL:关系型数据库

  • Redis:缓存

  • RabbitMQ:消息队列


21. 最终结论

本次 RabbitMQ 安装已经验证完成:

RabbitMQ 容器启动成功RabbitMQ 管理后台访问成功RabbitMQ 健康检查成功RabbitMQ 数据卷创建成功RabbitMQ 日志卷创建成功test_queue 队列创建成功容器重启后队列未丢失电脑重启后容器自动启动成功电脑重启后队列仍然存在

最终推荐安装命令如下:

docker run -d \  --name rabbitmq \  --hostname rabbitmq-host \  -p 5672:5672 \  -p 15672:15672 \  -e RABBITMQ_DEFAULT_USER=admin \  -e RABBITMQ_DEFAULT_PASS=123456 \  -e RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456 \  -e TZ=Asia/Shanghai \  -v rabbitmq_data:/var/lib/rabbitmq \  -v rabbitmq_log:/var/log/rabbitmq \  --health-cmd="rabbitmq-diagnostics -q ping" \  --health-interval=30s \  --health-timeout=10s \  --health-retries=5 \  --restart=always \  rabbitmq:3.8.8-management

22. 注意事项

  1. 不要随便删除数据卷:

docker volume rm rabbitmq_data
  1. 不要随便执行 Docker 清理命令:

docker system prune -a --volumes

这个命令可能会删除数据卷,导致 MySQL、Redis、RabbitMQ 数据丢失。

  1. 本地学习可以使用 admin / 123456,但生产环境不要使用弱密码。

  2. RabbitMQ 管理后台端口是 15672,程序连接端口是 5672。

  3. 如果浏览器打不开,优先检查:

docker ps

看 RabbitMQ 是否是:

Up ... (healthy)
#docker #mq #linux #rabbimq

相关学习资料