Docker启动RabbitMQ
1. 单机模式
直接运行镜像,没有则从外部库拉取
docker run -d --name rabbitmq -v /app/rabbitmq:/var/lib/rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-management
2. 集群模式
运行3个RabbitMQ容器实例,一主两从
docker run -d --hostname rabbit1 --name rabbit1 -v /app/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.11-management
docker run -d --hostname rabbit2 --name rabbit2 -v /app/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 5673:5672 -p 15673:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbit1 rabbitmq:3.11-management
docker run -d --hostname rabbit3 --name rabbit3 -v /app/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 5674:5672 -p 15674:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbit1 --link rabbit2 rabbitmq:3.11-management
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名)
-e 指定环境变量(RABBITMQ_DEFAULT_VHOST:默认为虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名,guest;RABBITMQ_DEFAULT_PASS:默认用户名的密码,guest;RABBITMQ_ERLANG_COOKIE 节点认证作用,部署集成时需要同步该值)
↓↓↓该项必须加,不然无法添加集群
--link <其他容器名>:<其他容器别名>
通过容器名互相通信,容器间共享环境变量。主要用来解决两个容器通过ip地址连接时容器ip地址会变的问题
分别进入从节点rabbit2和rabbit3,帮它们加入主节点rabbit1
docker exec -it rabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
docker exec -it rabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
此时打开RabbitMQ监控页面可以看到如下内容,说明集群创建成功!