安装docker-compose
- 下载
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- 授权
chmod +x /usr/local/bin/docker-compose
- 软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 查看安装是否成功
docker-compose -v
docker-compose.yml官方示例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
version 指定了当前的的docker-compose 的版本,一般都是3.x了
services 直译过来就是服务,也就是下面可以都多个docker服
服务下面是多个docker容器,比如 web,这个是tags,这个容器启动后会被打上web标签
build 构建指令,可以执行dockerFile的路径,这个例子里面 . 就是当前目录
不用Dockerfile的话可以指定image
ports 下面可以指定多个端口映射,左边为宿主机端口,右边为容器端口
volumes 可以挂载容器的目录
开始搭建
编写docker-compose.yml
version: "3.1"
services:
rabbit01: #节点1主节点
image: rabbitmq:management
ports: #端口映射
- "5672:5672"
- "15672:15672"
hostname: rabbit01 #这个要记住,后面加入集群的时候会用到
volumes:
- /data/rabbitmq-compose/rabbitmq/log:/var/log/rabbitmq #挂载日志目录
environment: #设置环境变量(配置文件参数),虚拟主机,用户名,密码
- RABBITMQ_DEFAULT_VHOST=jenkin
- RABBITMQ_DEFAULT_USER=jenkin
- RABBITMQ_DEFAULT_PASS=123456
rabbit02:
image: rabbitmq:management
ports:
- "5673:5672"
- "15673:15672"
hostname: "rabbit02"
links: #关联主节点的hostname,方便容器内互相访问
- rabbit01
volumes:
- /data/rabbitmq-compose/rabbitmq2/log:/var/log/rabbitmq
environment:
RABBITMQ_DEFAULT_VHOST: "jenkin"
RABBITMQ_DEFAULT_USER: "jenkin"
RABBITMQ_DEFAULT_PASS: "123456"
启动MQ
docker-compose up -d
集群搭建
rabbitmq集群的搭建还需要保证机器之间的ERlang.cookie一样
可用通过docker logs xxxxxxx 找到对应的目录,我这边的目录就是var/lib/rabbitmq
退出容器,先把cookie文件复制出来,然后复制到另一台容器
docker exec -it 7207cf457eef /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit01
rabbitmqctl start_app
这样集群就好了,不过还需要做队列的镜像才能实现高可用
队列镜像
在任意一台机器上执行以下命令
rabbitmqctl set_policy -p jenkin ha-all “^” "{‘ha-mode’:‘all’}
由于同步了多台机器之间的数据,所以吞吐量也会随之下降