环境:
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