Docker部署Zookeeper

jopen 9年前發布 | 74K 次閱讀 Docker

需要考慮的問題:

  1. 日志,快照等如何存放;
  2. 同一個鏡像怎么做到個性化配置;
  3. 外部如何訪問zk集群?`

首先完成鏡像制作,單機版的Dockfile如下:

FROM centos

MAINTAINER 44917134@qq.com  
USER root 

# 替換成了本地源    
RUN rm /etc/yum.repos.d/CentOS-Base.repo -rf   
ADD CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo

RUN yum -y install --enablerepo base wget java tar.x86_64 && wget -q -O - http://172.28.0.2:8080/zookeeper-3.4.6.tar.gz | tar -xzf - -C /opt && mv /opt/zookeeper-3.4.6 /opt/zookeeper && cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg && mkdir -p /opt/zookeeper/data && mkdir -p /opt/zookeeper/log

ENV JAVA_HOME /usr/

ADD start.sh /start.sh

WORKDIR /opt/zookeeper

# 用來記錄日志和快照及傳遞公用配置的卷    
VOLUME ["/opt/zookeeper/conf", "/opt/zookeeper/data", "/opt/zookeeper/log"]

ENTRYPOINT ["/start.sh"]

# 保證前臺運行    
CMD ["start-foreground"]

執行完成鏡像制作:

docker build -f Dockerfile -t zookeeper:v2 .

啟動容器:

docker run -i -t -d -p 172.28.2.26:2181:2181 zookeeper:v2

訪問zk:

./zkCli.sh -server 172.28.2.26:2181

上面只是完成了單機模式的zk,對于集群模式的zk使用docker來做的話就需要考慮同一個鏡像每個容器的個性化配置。對于zk集群需要考慮的是:

  1. 集群中每個節點的myid
  2. 集群中其他server的ip端口信息

考慮使用環境變量的方式來導入集群中每個server的個性化配置。但是,zk的配置文件還存在一些公用的配置,對于這種共有的配置還通過環境變量導入的話,會顯得命令格外的冗長。有種方式是直接固化到容器鏡像當中,但是如果后續希望調整共有配置的話又必須重新制作容器不夠靈活。因此,考慮這種共有配置通過掛載一個host上的文件傳入。 當然還有一種選擇是通過在容器內部署一個版本管理工具如git或者配置中心zk,etcd等,這個配置管理的agent可以部署的容器內,這樣就不需要掛載共有配置數據卷或者用配置管理軟件管理host上的共有配置,這樣不需要在容器里面多運行一個代理。

原文鏈接: http://openstack.wiaapp.com/?p=1048

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!