一、在本地计算机上安装Docker

1.安装Docker (安装最新的Docker版本)

yum install docker-ce docker-ce-cli containerd.io docker-bulidx-plugin docker-compose-plugin

2.查看Docker版本并启动Docker

docker version

安装成功的Docker版本为24.0.6

systemctl start docker

Docker 成功启动

二、在Docker中构建映像(image),安装Zookeeper

1.拉取zookeeper镜像 (选择安装版本为3.8.2)

docker pull zookeeper:3.8.2

2.查看Docker镜像

docker images

已成功拉取zookeeper:3.8.2 镜像

三、构建局域网环境

采用bridge 方式

docker network create –driver bridge –subnet=172.18.0.0/16 –gateway=172.18.0.1 zoonet

四、使用 docker-compose 创建zookeeper集群

1.查看docker – compose (在安装docker时已安装docker-compose-plugin)

docker-compose –version

2.编写zoo.yml文件

3.在zoo.yml同一级目录下执行docker-compose命令

docker-compose -f zoo.yml up -d

4.查看运行的容器

docker ps

可以看到zoo1 zoo2 zoo3 三个容器实例正在运行

其容器id 分别为6635ecc75b61 b8a740a705e2 a447136876a9

5.验证zoo1 zoo2 zoo3是否构成一个集群。进入zookeeper容器查看主从节点

1)进入 zoo1

docker exec -it b8a740a705e2 /bin/bash

zoo1 为follower

2)进入zoo2

docker exec -it 6635ecc75b61 /bin/bash

zoo2为follower

3)进入zoo3

docker exec -it a447136876a9 /bin/bash

zoo3为leader

可以知道zoo1 zoo2 zoo3 通过选举产生得到leader zoo3

follower zoo1 follower zoo2

五、在leader上进行配置修改,观测follower上相应配置的同步情况

1.进入zoo3 启动zkCli.sh 并进行修改

docker exec -it a447136876a9 /bin/bash

./bin/zkCli.sh

ls /

查看

create /hi

2.进入follower zoo2 并启动 zkCli 后查看

出现leader 写入的hi

3.进入follower zoo1 并启动 zkCli 后查看

同样出现leader 写入的hi

六、安装过程中出现的问题

1.构建局域网时报错

在使用命令docker network create –driver bridge –subnet=172.18.0.0/16 –gateway=172.18.0.1 zoonet 出现报错

在查看docker network ls 和docker network inspect后发现因为我之前使用Docker创建了一个network ,它默认是bridge 与我创建的network有冲突。在删除它后问题得到了解决。

2.zookeeper版本问题

使用命令docker run 运行容器时需要指定镜像版本,否则默认会使用最新的版本创建并运行。后面停止并删除之前的zookeeper,指定zookeeper版本后解决问题。

3.zookeeper集群无法通讯的问题

在配置文件zoo.yml 后,使用docker-compose启动,发现各个节点无法通信。因为在yml文件中未指定ipv4的ip地址 ,重新编写yml文件加入networks配置解决问题。