1、創(chuàng)建需要映射的目錄
mkdir -p /docker/consul/{server1,server2,server3}/{config,data}
mkdir -p /docker/consul/client1/{config,data}
2、創(chuàng)建網(wǎng)絡(luò)環(huán)境
docker network create --driver=bridge --subnet=172.20.0.0/16 wfw
3、給文件夾授權(quán)
chmod -R 777 /docker/consul/
4、編寫docker-compose.yml
cat > /docker/consul/docker-compose.yml <<END
version: '3'
services:
? consulnode1:
? ? image: consul
? ? container_name: consulnode1
? ? command: agent -server -bootstrap-expect=3 -config-dir=/consul/config -node=consulnode1 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
? ? volumes:
? ? ? - /docker/consul/server1/data:/consul/data
? ? ? - /docker/consul/server1/config:/consul/config
? ? networks:
? ? ? - wfw
? consulnode2:
? ? image: consul
? ? container_name: consulnode2
? ? command: agent -server -config-dir=/consul/config -retry-join=consulnode1 -node=consulnode2 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
? ? volumes:
? ? ? - /docker/consul/server2/data:/consul/data
? ? ? - /docker/consul/server2/config:/consul/config
? ? depends_on:
? ? ? ? - consulnode1
? ? networks:
? ? ? - wfw
? consulnode3:
? ? image: consul
? ? container_name: consulnode3
? ? command: agent -server -config-dir=/consul/config -retry-join=consulnode1 -node=consulnode3 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
? ? volumes:
? ? ? - /docker/consul/server3/data:/consul/data
? ? ? - /docker/consul/server3/config:/consul/config
? ? depends_on:
? ? ? ? - consulnode1
? ? networks:
? ? ? - wfw
? consulnode4:
? ? image: consul
? ? container_name: consulnode4
? ? command: agent -config-dir=/consul/config -retry-join=consulnode1 -node=consulnode4 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1 -ui
? ? volumes:
? ? ? - /docker/consul/client1/data:/consul/data
? ? ? - /docker/consul/client1/config:/consul/config
? ? ports:
? ? ? - 8500:8500
? ? depends_on:
? ? ? ? - consulnode2
? ? ? ? - consulnode3
? ? networks:
? ? ? - wfw
networks:
? wfw:
? ? external: true
END
5、查看集群和leader
進入目錄
cd /docker/consul/
#啟動
docker-compose up -d?
#查看列表
docker?exec?-t?consulnode1?consul?members
#查看誰是領(lǐng)導(dǎo)者
docker?exec?-t?consulnode1?consul?operator?raft?list-peers
6、打開localhost:8500查看node
7、使用命令進行集群測試
docker exec -t consulnode1 consul kv put hello world? ?# hello 是key,world 是value 意思就是put了一個字典項
#顯示后面內(nèi)容為正常:Success! Data written to: hello
#從其他consul獲取值
docker exec -t consulnode2 consul kv get hello? ? ?
#顯示world,表示集群數(shù)據(jù)同步了。
8、停止docker中consolnode1,查看leader重新選舉
docker stop consulnode1? ?#停止容器
docker?exec?-t?consulnode1?consul?operator?raft?list-peers? #查看當前列表,可以看到leader發(fā)生變化
#重復(fù)第7步可查看集群消息同步