1.下载镜像
这里选择需要下载的版本 hub.docker.com/_/zookeeper
docker pull zookeeper:3.7.0
2.创建挂载目录
创建node1节点数据目录
mkdir -p /usr/local/docker/zookeeper/node1/data
mkdir -p /usr/local/docker/zookeeper/node1/logs
mkdir -p /usr/local/docker/zookeeper/node1/conf
创建node1节点的配置文件zoo.cfg
vim /usr/local/docker/zookeeper/node1/conf/zoo.cfg
#心跳时间2秒
tickTime=2000
#Follower跟随者服务器与Leader领导者服务器之间初始化连接时能容忍的最多心跳数10*tickTime
initLimit=10
#集群中Leader与Follower之间的最大响应时间单位5*tickTime
syncLimit=5
#存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志
dataDir=/data
dataLogDir=/logs
#zookeeper端口
clientPort=2181
#server.1代表一台服务器的编号,第一个端口代表Leader选举的端口,第二个端口为Zookeeper服务器之间的通信接口
server.1=zookeeper_1:2881:3881
server.2=zookeeper_2:2882:3882
server.3=zookeeper_3:2883:3883
创建 myid 文件 写入节点的id 写入1
cat >> /usr/local/docker/zookeeper/node1/data/myid << eof
1
eof
创建node2节点数据目录
mkdir -p /usr/local/docker/zookeeper/node2/data
mkdir -p /usr/local/docker/zookeeper/node2/logs
mkdir -p /usr/local/docker/zookeeper/node2/conf
创建node2节点的配置文件zoo.cfg
vim /usr/local/docker/zookeeper/node2/conf/zoo.cfg
#心跳时间2秒
tickTime=2000
#Follower跟随者服务器与Leader领导者服务器之间初始化连接时能容忍的最多心跳数10*tickTime
initLimit=10
#集群中Leader与Follower之间的最大响应时间单位5*tickTime
syncLimit=5
#存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志
dataDir=/data
dataLogDir=/logs
#zookeeper端口
clientPort=2181
#server.1代表一台服务器的编号,第一个端口代表Leader选举的端口,第二个端口为Zookeeper服务器之间的通信接口
server.1=zookeeper_1:2881:3881
server.2=zookeeper_2:2882:3882
server.3=zookeeper_3:2883:3883
创建 myid 文件 写入节点的id 写入2
cat >> /usr/local/docker/zookeeper/node2/data/myid << eof
2
eof
创建node3节点数据目录
mkdir -p /usr/local/docker/zookeeper/node3/data
mkdir -p /usr/local/docker/zookeeper/node3/logs
mkdir -p /usr/local/docker/zookeeper/node3/conf
创建node3节点的配置文件zoo.cfg
vim /usr/local/docker/zookeeper/node3/conf/zoo.cfg
#心跳时间2秒
tickTime=2000
#Follower跟随者服务器与Leader领导者服务器之间初始化连接时能容忍的最多心跳数10*tickTime
initLimit=10
#集群中Leader与Follower之间的最大响应时间单位5*tickTime
syncLimit=5
#存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志
dataDir=/data
dataLogDir=/logs
#zookeeper端口
clientPort=2181
#server.1代表一台服务器的编号,第一个端口代表Leader选举的端口,第二个端口为Zookeeper服务器之间的通信接口
server.1=zookeeper_1:2881:3881
server.2=zookeeper_2:2882:3882
server.3=zookeeper_3:2883:3883
创建 myid 文件 写入节点的id 写入3
cat >> /usr/local/docker/zookeeper/node3/data/myid << eof
3
eof
3.运行
docker network create zkcluster
运行zookeeper_1节点
docker run --net zkcluster \
--link zookeeper_1:zookeeper_1 \
--link zookeeper_2:zookeeper_2 \
--link zookeeper_3:zookeeper_3 \
-p 2181:2181 \
-p 2881:2888 \
-p 3881:3888 \
-v /usr/local/docker/zookeeper/node1/data:/data \
-v /usr/local/docker/zookeeper/node1/logs:/logs \
-v /usr/local/docker/zookeeper/node1/conf/zoo.cfg:/conf/zoo.cfg \
--name zookeeper_1 -d zookeeper:3.7.0
运行zookeeper_2节点
docker run --net zkcluster \
--link zookeeper_1:zookeeper_1 \
--link zookeeper_2:zookeeper_2 \
--link zookeeper_3:zookeeper_3 \
-p 2182:2181 \
-p 2882:2888 \
-p 3882:3888 \
-v /usr/local/docker/zookeeper/node2/data:/data \
-v /usr/local/docker/zookeeper/node2/logs:/logs \
-v /usr/local/docker/zookeeper/node2/conf/zoo.cfg:/conf/zoo.cfg \
--name zookeeper_2 -d zookeeper:3.7.0
运行zookeeper_3节点
docker run --net zkcluster \
--link zookeeper_1:zookeeper_1 \
--link zookeeper_2:zookeeper_2 \
--link zookeeper_3:zookeeper_3 \
-p 2183:2181 \
-p 2883:2888 \
-p 3883:3888 \
-v /usr/local/docker/zookeeper/node3/data:/data \
-v /usr/local/docker/zookeeper/node3/logs:/logs \
-v /usr/local/docker/zookeeper/node3/conf/zoo.cfg:/conf/zoo.cfg \
--name zookeeper_3 -d zookeeper:3.7.0