前言
在现代微服务与分布式架构中,RabbitMQ 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件。通过 Docker 部署 RabbitMQ,可以快速搭建、轻松扩展,并与容器化平台无缝集成。
本文将指导你通过 Docker 快速搭建一个 RabbitMQ 环境,讲解目录结构、启动脚本编写、参数详解,以及两种网络模式(Host 网络模式 vs Port 映射模式)的部署示例与对比。
一、准备工作
首先,确保你的系统上已经安装了 Docker。
Linux上进行Docker安装有两种方式:
- 可以根据该文章的步骤进行安装:<a href="https://www.jb51.net/server/339879ek2.htm" target="_blank">https://www.jb51.net/server/339879ek2.htm</a>
复制代码 二、设置目录结构
为了持久化存储日志、数据和配置,需要在宿主机上创建对应目录,并赋予 RabbitMQ 容器内部用户(UID 999)的写权限。- # 创建日志、数据和配置目录
- mkdir -p "$DIR/rabbitmq/log"
- mkdir -p "$DIR/rabbitmq/data"
- mkdir -p "$DIR/rabbitmq/conf"
- # 设置目录权限为容器内 rabbitmq 用户(UID 999)
- sudo chown -R 999:999 \
- "$DIR/rabbitmq/log" \
- "$DIR/rabbitmq/data" \
- "$DIR/rabbitmq/conf"
复制代码
- :存放 RabbitMQ 日志
- :存放 Mnesia 数据库文件
- :存放自定义配置(如 rabbitmq.conf、advanced.config、enabled_plugins)
三、编写启动脚本
将目录准备工作与容器运行命令整合到脚本中,方便一键部署与更新。- #!/bin/bash
- # 安装路径与容器名称
- DIR="/opt/docker/demo"
- DOCKER_NAME="docker-rabbitmq"
- # 创建目录并设置权限
- mkdir -p "$DIR/rabbitmq/log"
- mkdir -p "$DIR/rabbitmq/data"
- mkdir -p "$DIR/rabbitmq/conf"
- sudo chown -R 999:999 "$DIR/rabbitmq/log" \
- "$DIR/rabbitmq/data" \
- "$DIR/rabbitmq/conf"
- # 运行 RabbitMQ 容器(Host 网络模式)
- docker run -d \
- --restart=always \ # 容器重启策略
- --name "$DOCKER_NAME" \ # 容器名称
- --network host \ # 主机网络模式
- -v "$DIR/rabbitmq/log:/var/log/rabbitmq" \ # 日志挂载
- -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \ # 数据挂载
- -v "$DIR/rabbitmq/conf:/etc/rabbitmq" \ # 配置挂载
- -e RABBITMQ_DEFAULT_USER=admin \ # 默认用户名
- -e RABBITMQ_DEFAULT_PASS=admin123456 \ # 默认密码
- -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \ # 启用管理插件
- rabbitmq:management # 官方管理版镜像
复制代码 保存后,赋予执行权限并运行:- chmod +x run_rabbitmq.sh
- ./run_rabbitmq.sh
复制代码 解释各个参数:
- :后台运行容器。
- :重启策略:当容器退出或 Docker 重启时,总是自动重启该容器。
- :容器的名称为。
- :使用主机网络模式(Host networking),容器与宿主机共享网络栈。
- -v "$DIR/rabbitmq/log:/var/log/rabbitmq"
复制代码 :日志挂载- -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia"
复制代码 : 数据挂载。
- -v "$DIR/rabbitmq/conf:/etc/rabbitmq"
复制代码 :配置挂载。
- -e RABBITMQ_DEFAULT_USER=…
复制代码 :环境变量,设置 RabbitMQ 默认用户名(第一次启动时生效)。
- -e RABBITMQ_DEFAULT_PASS=…
复制代码 :环境变量,设置 RabbitMQ 默认密码。
- -e RABBITMQ_ENABLED_PLUGINS=…
复制代码 :环境变量,启用指定插件(以逗号分隔),此处开启管理控制台插件。
- :指定镜像及标签,版本内置了管理插件与 Web 控制台。
四、Host 网络模式 vs Port 映射模式
1. Host 网络模式
命令示例- docker run -d \
- --restart=always \
- --name "$DOCKER_NAME" \
- --network host \
- -v "$DIR/rabbitmq/log:/var/log/rabbitmq" \
- -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \
- -v "$DIR/rabbitmq/conf:/etc/rabbitmq" \
- -e RABBITMQ_DEFAULT_USER=admin \
- -e RABBITMQ_DEFAULT_PASS=admin123456 \
- -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \
- rabbitmq:management
复制代码 特点
- 容器直接使用宿主机的网络栈,RabbitMQ 内部监听的端口(默认 5672、15672)会直接映射到宿主机相同端口。
- 网络性能最佳,无额外的 NAT 转发开销。
优点
- 简化网络配置,无需额外的 -p 端口映射。
- 延迟更低,吞吐更高。
缺点
- 与宿主机完全共享端口,若宿主机已有同端口服务运行,会冲突。
- 安全隔离较弱,容器网络直接暴露给宿主机。
2. Port 映射模式
命令示例- docker run -d \
- --restart=always \
- --name "$DOCKER_NAME" \
- -p 5673:5672 \
- -p 15673:15672 \
- -v "$DIR/rabbitmq/log:/var/log/rabbitmq" \
- -v "$DIR/rabbitmq/data:/var/lib/rabbitmq/mnesia" \
- -v "$DIR/rabbitmq/conf:/etc/rabbitmq" \
- -e RABBITMQ_DEFAULT_USER=admin \
- -e RABBITMQ_DEFAULT_PASS=admin123456 \
- -e RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \
- rabbitmq:management
复制代码 含义
- -p 5673:5672:将宿主机的 5673 端口映射到容器内的 5672(AMQP)端口。
- -p 15673:15672:将宿主机的 15673 端口映射到容器内的 15672(管理控制台)端口。
优点
- 灵活指定宿主机端口,避免与其他服务冲突。
- 容器网络与宿主机隔离更好,安全性更高。
缺点
- 相比 Host 模式,略有端口转发开销。
- 需手动管理多端口映射配置。
五、端口配置对比
特性Host 网络模式Port 映射模式配置命令网络性能最佳,无 NAT 转发开销有少量转发开销端口冲突风险高,容器直接占用宿主机端口低,可自定义宿主机端口安全隔离较弱较强多容器端口复用不支持支持,不同容器映射到不同端口配置复杂度简单需要显式映射
六、配置示例
rabbitmq.conf(放置于 $DIR/rabbitmq/conf/rabbitmq.conf)- # 修改 AMQP 端口
- listeners.tcp.default = 5673 # 修改为你想要的端口
- # 修改 RabbitMQ 管理界面端口
- management.listener.port = 15673 # 修改为你想要的端口
- # 允许非本地访问 guest 用户
- loopback_users.guest = false
复制代码 enabled_plugins(放置于 $DIR/rabbitmq/conf/enabled_plugins)- [rabbitmq_management,rabbitmq_peer_discovery_classic_config].
复制代码 七、查看与管理
查看容器状态- docker ps | grep "$DOCKER_NAME"
复制代码 查看日志- tail -f "$DIR/rabbitmq/log/rabbit@$(hostname).log"
- 或
- docker logs -f $DOCKER_NAME
复制代码 访问管理控制台
浏览器访问,使用登录。
八、扩展与高可用
集群部署
- 在多台主机上运行相同脚本,调整容器名称与配置
- 使用
- rabbitmq_peer_discovery_classic_config
复制代码 或 Kubernetes 插件实现自动发现与集群组网
镜像队列与策略
- 在管理控制台或配置文件中设置队列镜像策略,确保消息持久化与高可用
监控与告警
- 接入 Prometheus、Grafana 等监控体系,利用 RabbitMQ Exporter 采集指标
九、常用命令
修改默认密码
如果需要修改 RabbitMQ 的默认密码,可以使用以下命令:- docker exec -it "$DOCKER_NAME" rabbitmqctl change_password admin newpassword
复制代码 请将替换为希望设置的新密码。
启用其他插件
如果需要启用其他 RabbitMQ 插件,可以使用以下命令:- docker exec -it "$DOCKER_NAME" rabbitmq-plugins enable <plugin_name>
复制代码 请将替换为希望启用的插件名称。
到此这篇关于Docker 搭建 RabbitMQ的详细过程的文章就介绍到这了,更多相关Docker 搭建 RabbitMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/server/33986037y.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |