docker(二十四)docker部署RabbitMQ

docker插件部署继续,这里部署RabbitMQ集群。

还是老药方,两种配置方式,一种是使用docker-compose,一种是使用docker命令。

用那种都可以,我这里使用的四docker-compose

一:docker-compose

docker-compose.yml文件内容如下所示:

bash 复制代码
version: "3.8"
services:
  rabbitmq-one:
    container_name: rabbitmq-one                # 容器名称
    image: rabbitmq:3.13.1-management              # 容器镜像
    hostname: rabbitmq1                                      # 主机名称,这个后期配置集群的时候用到
    ports:                                                              #暴露端口
      - "5672:5672"
      - "15672:15672"
    environment:                                          
      - RABBITMQ_DEFAULT_USER=admin                  # 登录用户名
      - RABBITMQ_DEFAULT_PASS=camellia        # 密码
      - TZ=Asia/Shanghai
      # 设置集群密钥
      - RABBITMQ_ERLANG_COOKIE='rabbitMQcookie'
    mem_limit: 500m                               # 运行内存限制
    volumes:
      - /opt/docker/RabbitMQ/RabbitMQ-ONE/data:/var/lib/rabbitmq
      - /opt/docker/RabbitMQ/RabbitMQ-ONE/log:/var/log/rabbitmq/log
    restart: always                                                 # 重启策略
 
  rabbitmq-two:
    container_name: rabbitmq-two
    image: rabbitmq:3.13.1-management
    hostname: rabbitmq2
    depends_on:                                                 # 启动顺序
      - rabbitmq-one
    links:                                                         # 链接
      - rabbitmq-one
    ports:
      - "5673:5672"
      - "15673:15672"
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=camellia
      - TZ=Asia/Shanghai
      # 设置集群密钥
      - RABBITMQ_ERLANG_COOKIE='rabbitMQcookie'
    mem_limit: 500m        
    volumes:
      - /opt/docker/RabbitMQ/RabbitMQ-TWO/data:/var/lib/rabbitmq
      - /opt/docker/RabbitMQ/RabbitMQ-TWO/log:/var/log/rabbitmq/log
    restart: always

创建容器:

复制代码
docker compose up -d

配置集群主机:

shell 复制代码
# docker exec -it rabbitmq-one /bin/bash
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl start_app
# exit

配置集群从机:

shell 复制代码
# docker exec -it rabbitmq-two /bin/bash
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
# rabbitmqctl start_app
# exit

二:docker命令创建

1:创建一个dockerfile

ini 复制代码
# 使用官方的RabbitMQ镜像作为基础镜像
FROM rabbitmq:3.13.1-management
 
# 设置RabbitMQ配置
ENV RABBITMQ_DEFAULT_USER=rabbitmq
ENV RABBITMQ_DEFAULT_PASS=camellia
ENV TZ=Asia/Shanghai
# 设置集群密钥
ENV RABBITMQ_ERLANG_COOKIE='rabbitMQcookie'
   
# 暴露RabbitMQ端口
EXPOSE 5672 15672
 
# 启动RabbitMQ
CMD ["rabbitmq-server"]
 
# docker 构建容器命令  
# docker build -t my-rabbitmq .

2:创建rabbitmq主机

shell 复制代码
# docker run -d --hostname rabbit1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=rabbitmq -e RABBITMQ_DEFAULT_PASS=camellia -v /opt/docker/rabbitmq/data:/var/lib/rabbitmq -v /opt/docker/rabbitmq/log:/var/log/rabbitmq/log my-rabbitmq
# docker exec -it rabbitmq1 /bin/bash
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl start_app
# exit

3:创建rabbitmq从机1

shell 复制代码
# docker run -d --hostname rabbit2 --name rabbitmq2 -p 15673:15672 -p 5673:5672 -v /opt/docker/rabbitmq/data:/var/lib/rabbitmq -v /opt/docker/rabbitmq/log:/var/log/rabbitmq/log --link rabbitmq1:rabbit1 my-rabbitmq
# docker exec -it rabbitmq2 /bin/bash
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster --ram rabbit@rabbit1
# rabbitmqctl start_app
# exit

3:创建rabbitmq从机2

shell 复制代码
# docker run -d --hostname rabbit3 --name rabbitmq3 -p 15674:15672 -p 5674:5672 -v /opt/docker/rabbitmq/data:/var/lib/rabbitmq -v /opt/docker/rabbitmq/log:/var/log/rabbitmq/log --link rabbitmq1:rabbit1 --link rabbitmq2:rabbit2 my-rabbitmq
# docker exec -it rabbitmq3 /bin/bash
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster --ram rabbit@rabbit1
# rabbitmqctl start_app
# exit

上边的代码中有很多注释,是为了后边部署集群使用的。

我这里部署了三个RabbitMQ,主从复制了相当是。

注意:每次新建docker容器,都需要将绑定在本地的数据卷目录删除,否则会有问题。

以上大概就是docker部署rabbitmq的两种方式。

有好的建议,请在下方输入你的评论。

相关推荐
不才不才不不才1 小时前
Spring 源码系列(29): 20 道高频面试题源码级解析合集
java·后端·spring
索隆zoro1 小时前
Army 的可插拔架构:army-jdbc 与方言模块
java·后端
小蒜学长2 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
蜗牛互联网3 小时前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
周杰伦fans5 小时前
C#对话摘要降低Token消耗
人工智能·后端·c#
做系统的大强5 小时前
脚本说 PASS、OS 读全零 —— 到底是谁在撒谎?
后端·操作系统
code2cat6 小时前
【随笔】MCP资源更新订阅:通知到达以后,Agent怎样刷新旧资料
java·后端·开发工具·ai agent·mcp
Harvil_7 小时前
任务跑一半,API 突然报“对话超长“断流:我给 Agent 修的紧急逃生通道
后端
用户EasyAdminBlazor7 小时前
EasyAdminBlazor SignalR 实时消息源码解析:从 NotificationHub 到站内消息
后端
程序猿乐锅7 小时前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven