假設一台單機主機的ip分別為:
- 單機主機:192.168.0.200
1. 查找zookeeper鏡像:
docker search zookeeper
2. 下載官方zookeeper鏡像:
docker pull docker.io/zookeeper:3.4.13
3. 下載完后可檢查鏡像:
docker images
4. 在單機主機上建立掛載目錄和zookeeper配置文件:
mkdir -p /usr/local/zookeeper/conf
mkdir -p /usr/local/zookeeper/data cd /usr/local/zookeeper/conf touch zoo.cfg vi zoo.cfg
單機主機上的zoo.cfg配置信息如下:
clientPort=2181 dataDir=/data dataLogDir=/data/log tickTime=2000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60
5. 單機主機啟動容器:
docker run --privileged=true --network host -v /usr/local/zookeeper/data:/data -v /usr/local/zookeeper/conf:/conf --name zookeeper2181 -d docker.io/zookeeper:3.4.13
命令說明:
- --network host: 使用主機上的網絡配置,如果不用這種模式,而用默認的bridge模式,會導致容器跨主機間通信失敗
- -v /usr/local/zookeeper/data:/data:主機的數據目錄掛載到容器/data下
- -v /usr/local/zookeeper/conf:/conf: 主機的配置目錄掛載到容器的/conf下,容器內的zkServer.sh默認會讀取/conf/zoo.cfg下的配置
都啟動完成后,單機主機的2181端口開放出來了(注意,這種配置通過127.0.0.1:2181不能訪問zookeeper,只能訪問192.168.0.200:2181)
6. 檢查容器的啟動情況:
docker exec -it zookeeper2181 /bin/bash
進入容器內部后,其工作目錄為:/zookeeper-3.4.13(版本依據鏡像而定),執行zookeeper檢查:
[root@hserver2 data]# docker exec -it zookeeper2181 /bin/bash
bash-4.4# pwd
/zookeeper-3.4.13
bash-4.4# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader
bash-4.4#
可以看到這個容器目前為leader狀態,至此集群已啟動完成。
7. 若啟動失敗了,通過如下命令觀察zookeeper的啟動日志:
docker logs zookeeper2181
內容示例如下:
[root@hserver2 data]# docker logs zookeeper2181
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.server.quorum.QuorumPeerConfig).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

