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的两种方式。

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

相关推荐
用户59659061813418 分钟前
在C# web api net core 开发中,对于Get 和 Post 的传值方式进行系统性的介绍
后端
凹凸曼说我是怪兽y23 分钟前
python后端之DRF框架(上篇)
开发语言·后端·python
Victor35623 分钟前
MySQL(173)MySQL中的存储过程和函数有什么区别?
后端
wenb1n25 分钟前
【docker】揭秘容器启动命令:四种方法助你轻松还原
后端
孟君的编程札记28 分钟前
别只知道 Redis,真正用好缓存你得懂这些
java·后端
用户9601022516231 分钟前
kubesphere的告别,从可用环境提取Kubesphere镜像
后端
种子q_q33 分钟前
组合索引、覆盖索引、聚集索引、非聚集索引的区别
后端·面试
码事漫谈34 分钟前
WaitForSingleObject 函数参数影响及信号处理分析
后端
ffutop34 分钟前
gRPC mTLS 问题调试指南
后端