環境:
docker :
從https://hub.docker.com/官網擷取zookeeper版本
一、拉取鏡像
docker pull zookeeper:3.5.8
二、docker容器之間的通信
Docker有三種網絡模式,bridge、host、none,在你建立容器的時候,不指定--network預設是bridge。
bridge:為每一個容器配置設定IP,并将容器連接配接到一個docker0虛拟網橋,通過docker0網橋與主控端通信。也就是說,此模式下,你不能用主控端的IP+容器映射端口來進行Docker容器之間的通信。
host:容器不會虛拟自己的網卡,配置自己的IP,而是使用主控端的IP和端口。這樣一來,Docker容器之間的通信就可以用主控端的IP+容器映射端口
none:無網絡。
1.檢視網絡
docker network ls
2.建立zookeeper的bridge網絡,然後建立容器的時候指定ip。
docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 zknetwork
3.檢視網絡
docker network ls
4.檢視網絡配置
docker network inspect ef622b1b8e37
三、建立本地目錄:
1. 建立叢集目錄
mkdir zookeeper-cluster
2.在zookeeper-cluster目錄下建立:
mkdir node1
mkdir node2
mkdir node3
四、zookeeper叢集容器的建立指令
docker run -d -p 2181:2181 --name zookeeper_node1 --privileged --restart always --network zknetwork --ip 172.19.0.2 \
-v /home/docker/zookeeper/zookeeper-cluster/node1/volumes/data:/data \
-v /home/docker/zookeeper/zookeeper-cluster/node1/volumes/datalog:/datalog \
-v /home/docker/zookeeper/zookeeper-cluster/node1/volumes/logs:/logs \
-e ZOO_MY_ID=1 \
-e "ZOO_SERVERS=server.1=172.19.0.2:2888:3888;2181 server.2=172.19.0.3:2888:3888;2181 server.3=172.19.0.4:2888:3888;2181" zookeeper:3.5.8
docker run -d -p 2182:2181 --name zookeeper_node2 --privileged --restart always --network zknetwork --ip 172.19.0.3 \
-v /home/docker/zookeeper/zookeeper-cluster/node2/volumes/data:/data \
-v /home/docker/zookeeper/zookeeper-cluster/node2/volumes/datalog:/datalog \
-v /home/docker/zookeeper/zookeeper-cluster/node2/volumes/logs:/logs \
-e ZOO_MY_ID=2 \
-e "ZOO_SERVERS=server.1=172.19.0.2:2888:3888;2181 server.2=172.19.0.3:2888:3888;2181 server.3=172.19.0.4:2888:3888;2181" zookeeper:3.5.8
docker run -d -p 2183:2181 --name zookeeper_node3 --privileged --restart always --network zknetwork --ip 172.19.0.4 \
-v /home/docker/zookeeper/zookeeper-cluster/node3/volumes/data:/data \
-v /home/docker/zookeeper/zookeeper-cluster/node3/volumes/datalog:/datalog \
-v /home/docker/zookeeper/zookeeper-cluster/node3/volumes/logs:/logs \
-e ZOO_MY_ID=3 \
-e "ZOO_SERVERS=server.1=172.19.0.2:2888:3888;2181 server.2=172.19.0.3:2888:3888;2181 server.3=172.19.0.4:2888:3888;2181" zookeeper:3.5.8
五、參數解析
1. 3.5.x開始,clientPort和clientPortAddress配置參數是server關鍵字規範的一部分。
2. --privileged=true參數是為了解決【chown: changing ownership of '/data': Permission denied】,也可以省略true。
3. 由于是在同一台伺服器上安裝zookeeper叢集,則端口映射三個容器不一樣,端口不能沖突,端口設定2181/2182/2183。
4. --restart=always 這個表示docker容器在停止或伺服器開機之後會自動重新啟動
六、驗證zookeeper叢集容器
1.zookeeper_node1
a.進入zookeeper_node1
docker exec -it zookeeper_node1 bash
b.檢視狀态資訊
./bin/zkServer.sh status
c.退出zookeeper_node1
exit
2.zookeeper_node2
a.進入zookeeper_node2
docker exec -it zookeeper_node2 bash
b.檢視狀态資訊
./bin/zkServer.sh status
c.退出zookeeper_node2
exit
3.zookeeper_node3
a.進入zookeeper_node3
docker exec -it zookeeper_node3 bash
b.檢視狀态資訊
./bin/zkServer.sh status
c.退出zookeeper_node3
exit