使用 Docker 部署 RabbitMQ 的详细指南

ops/2025/2/9 4:09:01/
使用 Docker 部署 RabbitMQ 的详细指南

在现代应用程序开发中,消息队列系统是不可或缺的一部分。RabbitMQ 是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。本文将详细介绍如何使用 Docker 部署 RabbitMQ,并提供一些配置和管理的技巧。

1. 前期准备

在开始之前,请确保您的系统上已经安装了 Docker。如果尚未安装,可以参考 Docker 官方文档 或我写的前面一篇文章 CentOS 上安装 Docker 的详细指南 进行安装。

2. 停止并移除现有的 RabbitMQ 容器

如果您的系统上已经运行了 RabbitMQ 容器,可以使用以下命令停止并移除它:

docker stop rabbitmq
docker rm rabbitmq

在这里插入图片描述

3. 启动 RabbitMQ 容器

使用以下命令启动一个新的 RabbitMQ 容器

# 拉取docker镜像
docker pull rabbitmq:management
mkdir -p /usr/local/docker/rabbitmqdocker run -id --name=rabbitmq -v /usr/local/docker/rabbitmq:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:management

在这里插入图片描述

在这条命令中,我们做了以下配置:

  • -id:以交互模式启动容器并在后台运行。
  • --name=rabbitmq:为容器指定一个名称。
  • -v /usr/local/docker/rabbitmq:/var/lib/rabbitmq:将主机目录挂载到容器内的 /var/lib/rabbitmq,用于持久化数据。
  • -p 15672:15672:映射 RabbitMQ 管理页面端口。
  • -p 5672:5672:映射 RabbitMQ 消息接收端口。
  • -e RABBITMQ_DEFAULT_USER=admin:设置默认用户名。
  • -e RABBITMQ_DEFAULT_PASS=admin:设置默认密码。
4. 查看容器日志

启动容器后,可以使用以下命令查看容器日志,确保 RabbitMQ 正常启动:

docker logs -f rabbitmq

在这里插入图片描述

5. 访问 RabbitMQ 管理界面

在浏览器中访问 http://<你的服务器地址>:15672,使用之前设置的用户名和密码(adminadmin)登录,即可访问 RabbitMQ 的管理界面。

6. 配置说明
  • 15672端口:RabbitMQ 的管理页面端口。
  • 5672端口:RabbitMQ 的消息接收端口。
  • RABBITMQ_DEFAULT_USER 环境变量:指定 RabbitMQ 的用户名。
  • RABBITMQ_DEFAULT_PASS 环境变量:指定 RabbitMQ 的密码。
7. 环境变量配置

RabbitMQ 容器通过指定环境变量的方式进行配置,这比修改配置文件便捷得多。以下是一些常用的环境变量:

  • RABBITMQ_DEFAULT_USER:默认用户名。
  • RABBITMQ_DEFAULT_PASS:默认密码。
  • RABBITMQ_ERLANG_COOKIE:Erlang 集群 cookie。
  • RABBITMQ_NODENAME:节点名称。

更多环境变量的详细信息可以参考 RabbitMQ 官方文档。

8. 持久化数据

为了确保 RabbitMQ 的数据在容器重启或删除后不会丢失,我们使用了 Docker 的卷(volume)功能。通过 -v /usr/local/docker/rabbitmq:/var/lib/rabbitmq 参数,我们将主机目录挂载到容器内的 /var/lib/rabbitmq,实现数据持久化。

9. 备份与恢复

为了防止数据丢失,定期备份 RabbitMQ 的数据是非常重要的。可以使用以下命令备份数据:

docker exec rabbitmq tar czf /backup/rabbitmq_backup.tar.gz /var/lib/rabbitmq

要恢复数据,可以使用以下命令:

docker exec rabbitmq tar xzf /backup/rabbitmq_backup.tar.gz -C /
10. 集群配置

RabbitMQ 支持集群配置,可以通过以下步骤实现:

  1. 启动多个 RabbitMQ 容器,并确保它们可以相互通信。

  2. 在每个节点上设置相同的 RABBITMQ_ERLANG_COOKIE

  3. 使用 rabbitmqctl 命令将节点加入集群:

    docker exec rabbitmq1 rabbitmqctl stop_app
    docker exec rabbitmq1 rabbitmqctl join_cluster rabbit@rabbitmq2
    docker exec rabbitmq1 rabbitmqctl start_app

11. 性能优化

为了提高 RabbitMQ 的性能,可以考虑以下优化措施:

  • 调整 vm_memory_high_watermark 参数,控制内存使用。
  • 使用 rabbitmq_management 插件监控性能。
  • 调整 disk_free_limit 参数,确保磁盘空间充足。
12. 常见问题排查

在使用 RabbitMQ 时,可能会遇到一些常见问题。以下是一些排查方法:

  • 无法访问管理界面:检查 15672 端口是否开放,确保防火墙未阻止该端口。
  • 消息堆积:检查消费者是否正常工作,确保消息被及时处理。
  • 内存不足:调整 vm_memory_high_watermark 参数,增加内存限制。

http://www.ppmy.cn/ops/156884.html

相关文章

基于微信小程序的校园水电费管理平台设计与实现

目录 摘要 系统展示 技术介绍 MySQL数据库 Vue框架 代码实现 管理员实现登录后端代码 连接数据库 前端代码实现 获取源码 摘要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

vulkan学习(一)

opengl相对与vulkan不是一个级别的东西&#xff0c;opengl几十行代码就可以绘制一个简单的物体&#xff0c;而vulkan需要几百行才能绘制&#xff0c;所以vulkan的学习曲线比较陡峭&#xff0c;本人经过也经过一个很长的时间的断断续续学习对vulkan有了一些认识&#xff0c;在这…

C++中的pair,pair和map的结合

文章目录 1. pair 的基本用法语法&#xff1a;示例&#xff1a; 2. pair 和 map 的结合map 的基本用法语法&#xff1a;示例&#xff1a; 3. pair 和 map 中的具体应用(1) map 中的 pair 存储(2) insert 方法插入 pair(3) 使用 auto 获取 pair 对象(4) 使用 pair 和 map 返回多…

Mac: docker安装以后报错Command not found: docker

文章目录 前言解决办法&#xff08;新的&#xff09;解决步骤&#xff08;原来的&#xff09;不推荐总结 前言 ​本操作参考 http://blog.csdn.net/enhenglhm/article/details/137955756 原作者&#xff0c;更详细请&#xff0c;查看详细内容请关注原作者。 一般&#xff0c;…

HarmonyOS NEXT:应用程序框架进阶

基本概念 UIAbility组件&#xff1a;一种包含UI的应用组件&#xff0c;主要用于和用户交互。 ExtensionAbility组建&#xff1a;基于特定场景&#xff0c;如服务卡片、输入法等提供的应用组件&#xff0c;每一个具体场景对应一个ExtensionAbilityType&#xff0c;开发者只能使…

CentOS服务器部署Docker+Jenkins持续集成环境

一、准备工作 一台运行 CentOS 的服务器&#xff0c;确保有足够的磁盘空间、内存资源&#xff0c;并且网络连接稳定。建议使用 CentOS 7 或更高版本&#xff0c;本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限&#xff0c;因为后续安装软件包、配置环境等操作需要较…

DeepSeek 提示词之角色扮演的使用技巧

老六哥的小提示&#xff1a;我们可能不会被AI轻易淘汰&#xff0c;但是会被“会使用AI的人”淘汰。 在DeepSeek的官方提示库中&#xff0c;有“角色扮演&#xff08;自定义人设&#xff09;”的提示词案例。截图如下&#xff1a; 在“角色扮演”的提示词案例中&#xff0c;其实…