使用 Docker Compose 部署 RabbitMQ

前言

本地或测试环境需要消息队列时,用容器部署 RabbitMQ 可以避免在本机安装 Erlang 与复杂依赖。

Docker Compose 能把镜像、端口、账号和持久化卷写进一个文件,便于团队复现同一套环境。

下文以官方带管理插件的镜像为例,版本号请按仓库说明与你方安全策略自行调整。

本文不覆盖集群与高可用生产拓扑,仅面向单机开发与联调。

实现

准备目录

在任意目录新建 docker-compose.yml,与同目录下执行后续命令即可。

若工程里已有 Compose 文件,也可把下面 rabbitmq 服务合并进现有文件并避免服务名、端口冲突。

编写 Compose

下面是单节点 RabbitMQ 的示例:对外映射 5672(AMQP)与 15672(管理界面),并用命名卷持久化数据目录。

1
2
mkdir -p /data/tools/docker-compose-root/compose-mq
cd /data/tools/docker-compose-root/compose-mq

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
services:
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq-dev
hostname: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: changeme
volumes:
- rabbitmq_data:/var/lib/rabbitmq
restart: unless-stopped

volumes:
rabbitmq_data:

请将默认用户名、密码改为强口令,切勿在仓库中提交真实生产凭证。

镜像标签 3-management 会随上游更新 minor 版本,若需锁版本可改为具体 digest 或带 patch 的标签。

启动与停止

docker-compose.yml 所在目录执行以下命令以启动服务。

1
docker compose up -d

查看容器状态与日志可确认是否就绪。

1
2
docker compose ps
docker compose logs -f rabbitmq

停止并删除容器(默认保留卷中的数据)可使用下面命令。

1
docker compose down

若希望连数据卷一并清理,需谨慎使用 docker compose down -v,会删除持久化数据。

管理界面与默认账号

浏览器访问 http://localhost:15672,使用 Compose 中配置的 RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS 登录。

若未设置环境变量而使用镜像默认的 guest 用户,按 RabbitMQ 默认策略通常只能从容器所在网络内连接,跨主机连接时请改用自定义用户。

验证

应用侧连接串一般为 amqp://用户名:密码@主机:5672/

同一台机器上从宿主机连容器映射的端口时,主机可写 localhost127.0.0.1

进入容器执行内置命令可查看节点状态(示例中服务名为 rabbitmq)。

1
docker compose exec rabbitmq rabbitmq-diagnostics ping

若能返回 Ping succeeded,说明节点进程正常。