一、单节点安装
1、环境部署
docker:18.09.9-ce
zookeeper:3.5.6
2、拉取 zookeeper 镜像
docker pull zookeeper
默认是摘取最新版本 zookeeper:latest。
查看当前镜像
3、准备工作
将它部署在 /usr/local/zookeeper 目录下:
cd /usr/local&& mkdir zookeeper && cd zookeeper
创建data目录,用于挂载容器中的数据目录:
mkdir data
4、正式部署
# 部署命令:
docker run -d -eTZ="Asia/Shanghai" -p 2181:2181 -v $PWD/data:/data --name zookeeper--restart always zookeeper
# 命令详细说明:
-eTZ="Asia/Shanghai" # 指定上海时区
-d # 表示在一直在后台运行容器
-p 2181:2181 # 对端口进行映射,将本地2181端口映射到容器内部的2181端口
--name # 设置创建的容器名称
-v # 将本地目录(文件)挂载到容器指定目录
--restartalways #始终重新启动zookeeper
# 查看容器启动情况:
docker ps -a
注:状态(STATUS)为Up,说明容器已经启动成功
5、测试
使用zk命令行客户端连接zk
docker run -it --rm--link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
注:-server zookeeper是启动zkCli.sh的参数
6、其它命令
查看zookeeper容器实例进程信息docker top zookeeper
停止zookeeper实例进程docker stop zookeeper
启动zookeeper实例进程docker start zookeeper
重启zookeeper实例进程docker restart zookeeper
查看zookeeper进程日志docker logs -f zookeeper
杀死zookeeper实例进程docker kill -s KILL zookeeper
移除zookeeper实例docker rm -f -v zookeeper
二、集群方式安装
集群方式选择使用docker-compose来完成。
1、安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2、 配置docker-compose
编写配置文件,并将其命名为:docker-compose.yml(docker-compose默认配置文件名)
配置文件内容:
version:'2'
services:
zoo1:
image: zookeeper
restart: always
container_name: zoo1
ports:
-"2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS:server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
image: zookeeper
restart: always
container_name: zoo2
ports:
-"2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS:server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo3:
image: zookeeper
restart: always
container_name: zoo3
ports:
-"2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS:server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
此配置文件表示,Docker需要启动三个zookeeper实例,并将2181,2182,2183三个端口号映射到容器内的2181这个端口上。
ZOO_MY_ID:表示zk服务的ID, 取值为1-255之间的整数,且必须唯一
ZOO_SERVERS:表示zk集群的主机列表
3、启动zookeeper集群
docker-compose up -d
该命令执行需要在docker-compose配置文件的目录下执行,结果如下:
docker-compose up -d
Starting zoo1 ... done
Starting zoo2 ... done
Starting zoo3 ... done
4、查看zookeeper集群实例
# 通过docker ps查看
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
e53b4c838001 zookeeper "/docker-entrypoint.…"4 minutes ago Up 44 seconds 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp zoo1
19282fb6f9b4 zookeeper "/docker-entrypoint.…"4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp zoo2
099b926fa2d3 zookeeper "/docker-entrypoint.…"4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2183->2181/tcp zoo3
# 通过docker-compose ps查看
Name Command State Ports
------------------------------------------------------------------------------------------
zoo1 /docker-entrypoint.sh zkSe ... Up 0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp
zoo2 /docker-entrypoint.sh zkSe... Up 0.0.0.0:2182->2181/tcp, 2888/tcp,3888/tcp
zoo3 /docker-entrypoint.sh zkSe... Up 0.0.0.0:2183->2181/tcp, 2888/tcp,3888/tcp
注:这个命令需要在docker-compose配置文件下执行
5、管理docker-compose服务
# 停止docker-compose服务
docker-compose stop
# 启动docker-compose服务
docker-compose start
# 重启docker-compose服务
docker-compose restart
6、查看zookeeper集群节点主从关系
使用docker exec -it zoo1 /bin/bash这个命令进入zoo1节点中,之后输入./bin/zkServer.sh statu来查看节点主从关系
docker exec -it zoo1 /bin/bash
bash-4.4# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
bash-4.4#
三、脚本安装
1、编写Dockerfile
# Dockerfile
FROM registry.herlly.com/jdk:1.8u162
MAINTAINER herlly
# Install zookeeper
RUN mkdir-v /data/logs && mkdir -pv /data/zookeeper
ADD zookeeper-3.4.11.tar.gz /data/
ADD run.sh /run.sh
RUN chmod+x /run.sh
EXPOSE 2181
EXPOSE 2888
EXPOSE 3888
CMD ["/run.sh"]
# run.sh
#!/bin/bash
ZOO_CFG="/data/zookeeper-3.4.11/conf/zoo.cfg"
# Outputserver ID
echo"server id (myid): ${SERVER_ID}"
echo"${SERVER_ID}" > /data/zookeeper/myid
# Addadditional ZooKeeper servers into the zoo.cfg file
echo"${ADDITIONAL_ZOOKEEPER_1}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_2}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_3}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_4}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_5}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_6}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_7}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_8}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_9}" >> ${ZOO_CFG}
echo"${ADDITIONAL_ZOOKEEPER_10}" >> ${ZOO_CFG}
# StartZookeeper
exec/data/zookeeper-3.4.11/bin/zkServer.sh start-foreground
2、使用方法(集群中各节点需指定不通的name、hostname、SERVER_ID等)
docker run -d --name zk1 --hostname zk1 --network lnso --restart=always -e SERVER_ID=1-e ADDITIONAL_ZOOKEEPER_1=server.1=zk1:2888:3888 -eADDITIONAL_ZOOKEEPER_2=server.2=zk2:2888:3888 -eADDITIONAL_ZOOKEEPER_3=server.3=zk3:2888:3888 registry/zookeeper:3.4.11