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的两种方式。
有好的建议,请在下方输入你的评论。