8人参与 • 2025-04-24 • 云虚拟主机
在现代微服务与分布式架构中,rabbitmq 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件。通过 docker 部署 rabbitmq,可以快速搭建、轻松扩展,并与容器化平台无缝集成。
本文将指导你通过 docker 快速搭建一个 rabbitmq 环境,讲解目录结构、启动脚本编写、参数详解,以及两种网络模式(host 网络模式 vs port 映射模式)的部署示例与对比。
首先,确保你的系统上已经安装了 docker。
linux上进行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 控制台。命令示例
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 端口映射。
延迟更低,吞吐更高。
缺点
与宿主机完全共享端口,若宿主机已有同端口服务运行,会冲突。
安全隔离较弱,容器网络直接暴露给宿主机。
命令示例
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
含义
优点
缺点
相比 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 插件实现自动发现与集群组网镜像队列与策略
监控与告警
修改默认密码
如果需要修改 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论