当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker 搭建 RabbitMQ的详细过程

Docker 搭建 RabbitMQ的详细过程

2025年04月24日 云虚拟主机 我要评论
前言在现代微服务与分布式架构中,rabbitmq 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件。通过 docker 部署 rabbitmq,可以快速搭建、轻松扩展,并

前言

在现代微服务与分布式架构中,rabbitmq 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件。通过 docker 部署 rabbitmq,可以快速搭建、轻松扩展,并与容器化平台无缝集成。

本文将指导你通过 docker 快速搭建一个 rabbitmq 环境,讲解目录结构、启动脚本编写、参数详解,以及两种网络模式(host 网络模式 vs port 映射模式)的部署示例与对比。

一、准备工作

首先,确保你的系统上已经安装了 docker。

linux上进行docker安装有两种方式:

  • docker自动化安装
  • docker手动安装

可以根据该文章的步骤进行安装:https://www.jb51.net/server/339879ek2.htm

二、设置目录结构

为了持久化存储日志、数据和配置,需要在宿主机上创建对应目录,并赋予 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"
  • log:存放 rabbitmq 日志
  • data:存放 mnesia 数据库文件
  • conf:存放自定义配置(如 rabbitmq.conf、advanced.config、enabled_plugins)

三、编写启动脚本

将目录准备工作与容器运行命令整合到脚本 rabbitmq_install.sh 中,方便一键部署与更新。

#!/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

解释各个参数

  • -d:后台运行容器。
  • --restart=always:重启策略:当容器退出或 docker 重启时,总是自动重启该容器。
  • --name "$docker_name":容器的名称为 docker-rabbitmq
  • --network host:使用主机网络模式(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=…:环境变量,启用指定插件(以逗号分隔),此处开启管理控制台插件。
  • rabbitmq:management:指定镜像及标签,management 版本内置了管理插件与 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 映射模式
配置命令--network host-p host:container
网络性能最佳,无 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

访问管理控制台

浏览器访问 http://<宿主机ip>:15672,使用 admin/admin123456 登录。

八、扩展与高可用

集群部署

  • 在多台主机上运行相同脚本,调整容器名称与配置
  • 使用 rabbitmq_peer_discovery_classic_config 或 kubernetes 插件实现自动发现与集群组网

镜像队列与策略

  • 在管理控制台或配置文件中设置队列镜像策略,确保消息持久化与高可用

监控与告警

  • 接入 prometheus、grafana 等监控体系,利用 rabbitmq exporter 采集指标

九、常用命令

修改默认密码

如果需要修改 rabbitmq 的默认密码,可以使用以下命令:

docker exec -it "$docker_name" rabbitmqctl change_password admin newpassword

请将 newpassword 替换为希望设置的新密码。

启用其他插件

如果需要启用其他 rabbitmq 插件,可以使用以下命令:

docker exec -it "$docker_name" rabbitmq-plugins enable <plugin_name>

请将 <plugin_name> 替换为希望启用的插件名称。

到此这篇关于docker 搭建 rabbitmq的详细过程的文章就介绍到这了,更多相关docker 搭建 rabbitmq内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com