mkdir -p $HOME/data/docker/{zk01}
mkdir -p $HOME/data/docker/zk01/{conf,data,datalog}
2.启动一个zookeeper(不要挂载)
docker run -d -p 2181:2181 --privileged=true --name=zk1 zookeeper:3.73.复制配置文件
docker cp zk1:/conf $HOME/data/docker/zk01/4.复制2份zk01文件夹,并分别修改名称为zk02,zk03
cp -r zk01 zk02 cp -r zk01 zk035. 停止zk1并删除
docker stop zk1 && docker rm zk16. 编写docker-compose.yml启动脚本
在/opt/目录(目录自定义)下,新建docker-compose.yml文件
vi docker-compose.yml
输入如下内容
version: '3'
services:
zk1:
image: zookeeper:3.7 #使用的镜像
restart: always #宕机后自动重启
hostname: zk1 #承载zookeeper容器的主机(父容器)名 可省略
container_name: zk1 #容器名
privileged: true #使用该参数,container内的root拥有真正的root权 privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
ports: #主机和容器的端口映射
- "2181:2181"
volumes: #创建zookeeper容器在宿主机的挂载目录
- $HOME/data/docker/zk01/data:/data #数据
- $HOME/data/docker/zk01/datalog:/datalog #日志
- $HOME/data/docker/zk01/conf:/conf #配置文件
environment: #zookeeper3.4 和zookeeper 3.5在docker环境下搭建集群差异就在这里 #zk1为容器名,也是主机名,意思为使用容器的内网通信(1)Zookeeper3.5 中指定的 ZOO_SERVERS 参数的 IP 地址和端口号后面多加了 “;2181 ”。(2)ZOO_SERVERS 指定ip时本机的ip地址写 0.0.0.0。
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
zk2:
image: zookeeper:3.7
restart: always
hostname: zk2
container_name: zk2
privileged: true
ports:
- "2182:2181"
volumes:
- $HOME/data/docker/zk02/data:/data
- $HOME/data/docker/zk02/datalog:/datalog
- $HOME/data/docker/zk02/conf:/conf
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
zk3:
image: zookeeper3.7
restart: always
hostname: zk3
container_name: zk3
privileged: true
ports:
- "2183:2181"
volumes:
- $HOME/data/docker/zk03/data:/data
- $HOME/data/docker/zk03/datalog:/datalog
- $HOME/data/docker/zk03/conf:/conf
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
6. 启动zookeeper集群
docker-compose up -d
网上有错误教程,步骤如下
1.创建挂载目录
2.编写docker-compose.yml脚本
3.直接docker-compose up -d启动
**发现容器启动失败,查看日志报错‘/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied’
尝试授权、以及临时关闭centos7的安全模块,均无效。最终采用本文曲线挂载的方式成功
docker network create -d bridge --subnet 100.0.0.0/16 --gateway 100.0.0.1 network12.创建挂载目录
mkdir -p $HOME/data/docker/{zk01}
mkdir -p $HOME/data/docker/zk01/{conf,data,datalog}
3.启动一个zookeeper(不要挂载)
docker run -d -p 2181:2181 --privileged=true --name=zk1 zookeeper:3.74.复制配置文件
docker cp zk1:/conf $HOME/data/docker/zk01/5.复制2份zk01文件夹,并分别修改名称为zk02,zk03
cp -r zk01 zk02 cp -r zk01 zk036. 停止zk1并删除
docker stop zk1 && docker rm zk17. 编写docker-compose.yml启动脚本
在/opt/目录(目录自定义)下,新建docker-compose.yml文件
vi docker-compose.yml
输入如下内容
version: '3'
services:
zk1:
image: zookeeper:3.7 #使用的镜像
restart: always #宕机后自动重启
hostname: zk1 #承载zookeeper容器的主机(父容器)名 可省略
container_name: zk1 #容器名
privileged: true #使用该参数,container内的root拥有真正的root权 privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
ports: #主机和容器的端口映射
- "2181:2181"
volumes: #创建zookeeper容器在宿主机的挂载目录
- $HOME/data/docker/zk01/data:/data #数据
- $HOME/data/docker/zk01/datalog:/datalog #日志
- $HOME/data/docker/zk01/conf:/conf #配置文件
environment: #zookeeper3.4 和zookeeper 3.5在docker环境下搭建集群差异就在这里 #zk1为容器名,也是主机名,意思为使用容器的内网通信(1)Zookeeper3.5 中指定的 ZOO_SERVERS 参数的 IP 地址和端口号后面多加了 “;2181 ”。(2)ZOO_SERVERS 指定ip时本机的ip地址写 0.0.0.0。
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
networks:
default:
ipv4_address: 100.0.0.117 # 指定zk1的IP地址
zk2:
image: zookeeper:3.7
restart: always
hostname: zk2
container_name: zk2
privileged: true
ports:
- "2182:2181"
volumes:
- $HOME/data/docker/zk02/data:/data
- $HOME/data/docker/zk02/datalog:/datalog
- $HOME/data/docker/zk02/conf:/conf
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
networks:
default:
ipv4_address: 100.0.0.118
zk3:
image: zookeeper:3.7
restart: always
hostname: zk3
container_name: zk3
privileged: true
ports:
- "2183:2181"
volumes:
- $HOME/data/docker/zk03/data:/data
- $HOME/data/docker/zk03/datalog:/datalog
- $HOME/data/docker/zk03/conf:/conf
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
networks:
default:
ipv4_address: 100.0.0.119
networks:
default:
external:
name: network1 # 指定使用的网络
7. 启动zookeeper集群
docker-compose up -d



