1.下载镜像
docker pull zookeeper
2.启动容器(单节点)
docker run --name zookeeper01 -d zookeeper
在Docker后台运行一个 zookeeper 容器, 名字是 zookeeper01, 并且它默认会导出 2181 端口。
3.使用 ZK 命令行客户端连接 ZK(单节点)
docker run -it --rm --link zookeeper01:zookeeper zookeeper zkCli.sh -server zookeeper
1. 启动一个 zookeeper 镜像, 并运行这个镜像内的 zkCli.sh 命令, 命令参数是 “-server zookeeper”;
2.将我们先前启动的名为 zookeeper01 的容器链接(link) 到我们新建的这个容器上, 并将其主机名命名为 zookeeper。
当我们执行了这个命令后,就可以像正常使用 zookeeper 命令行客户端一样操作 zookeeper 服务了。
4. ZK 集群的搭建
安装docker compose插件
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
授权
cd /usr/local/bin
chmod 777 docker-compose
查看版本
docker-compose --version
新建网络
docker network create --driver bridge --subnet 172.23.0.0/25 --gateway 172.23.0.1 zookeeper_network
新建docker配置文件
mkdir -p /usr/local/docker-compose/zk/{zk1,zk2,zk3}/{data,datalog}
cd /usr/local/docker-compose/zk
vi docker-compose.yml
version: '2'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
container_name: zoo1
ports:
- 2181:2181
volumes:
- "/usr/local/docker-compose/zk/zk1/data:/data"
- "/usr/local/docker-compose/zk/zk1/datalog:/datalog"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
networks:
default:
ipv4_address: 172.23.0.11
zoo2:
image: zookeeper
restart: always
hostname: zoo2
container_name: zoo2
ports:
- 2180:2181
volumes:
- "/usr/local/docker-compose/zk/zk2/data:/data"
- "/usr/local/docker-compose/zk/zk2/datalog:/datalog"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
networks:
default:
ipv4_address: 172.23.0.12
zoo3:
image: zookeeper
restart: always
hostname: zoo3
container_name: zoo3
ports:
- 2179:2181
volumes:
- "/usr/local/docker-compose/zk/zk3/data:/data"
- "/usr/local/docker-compose/zk/zk3/datalog:/datalog"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
networks:
default:
ipv4_address: 172.23.0.13
networks:
default:
external:
name: zookeeper_network
启动集群,在 docker-compose.yml 目录下运行
docker-compose up -d
查看运行状态,在 docker-compose.yml 目录下运行
docker-compose ps
5.客户端连接 ZK 集群
使用docker命令连接
通过 docker-compose ps 命令, 我们知道启动的 ZK 集群的三个主机名分别是 zoo1, zoo2, zoo3, 因此我们分别 link 它们即可:
docker run -it --rm --link zoo1:zk1 --link zoo2:zk2 --link zoo3:zk3 --net zookeeper_network zookeeper zkCli.sh -server zk1:2181,zk2:2181,zk3:2181
使用本地主机连接
因为我们分别将 zoo1, zoo2, zoo3 的 2181 端口映射到了 本地主机的2181, 2180, 2179 端口上, 因此我们使用如下命令即可连接 ZK 集群了:
docker exec -it zoo3 /bin/bash
cd bin
zkCli.sh -server localhost:2181,localhost:2180,localhost:2179
zk常用命令
create /test "test"
get /test
set /test "hello test"
delete /test
quit
6.查看集群
我们可以通过 nc 命令连接到指定的 ZK 服务器, 然后发送 stat 可以查看 ZK 服务的状态, 例如:
yum install nc
echo stat | nc 127.0.0.1 2181