单主机 Standalone 模式
分析:zookeepr在单节点上是以Standalone方式运行,想必在看过本文之前读者也试验过,所以我这里也不会详细说明。其实区分单节点或多节点集群zookeeper最核心大配置就是zoo.cfg,若zoo.cfg文件中包含server,那么在启动zookeeper服务的时候就会以集群方式运行。下面列出单节点zoo.cfg的详细内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
在下载好的zookeeper中的conf文件夹下有一个zoo_sample.cfg,我们直接将其改为zoo.cfg即可。这里,我们会用2181端口来访问zookeeper服务。
接下来我们来创建zookeeper的镜像。
构建Dockerfile zookeeper需要安装配有java环境,因此,需要将java环境配置进去:
ADD jdk/ /var/jdk/
ENV JAVA_HOME /var/jdk
ENV PATH $JAVA_HOME/bin:$PATH
我们再将zookeeper添加进去,并暴露2181端口:
ENV ZK_HOME /var/zookeeper
EXPOSE 2181
这样就可以了,具体dockerfile文件内容如下:
# CentOS as base image
# version 0.3
# Author: liugang
# Base image to use, this must be set as the first line
FROM centos
MAINTAINER liugang [email protected]
#ADD JAVA ZOOKEEPER
ADD zookeeper.tar /var
ADD jdk/ /var/jdk/
#ADD ENV
ENV JAVA_HOME /var/jdk
ENV ZK_HOME /var/zookeeper
ENV PATH $JAVA_HOME/bin:$PATH
# Commands to update the image
RUN source /etc/profile
#Expose
EXPOSE 2181 2888 3888
ENTRYPOINT ["/var/zookeeper/bin/zkServer.sh"]
CMD ["start-foreground"]
以上Dockerfile制作的镜像在集群下也可以使用。
构建镜像:
# docker build -t="zookeeper" .
Sending build context to Docker daemon 348.1 MB
Sending build context to Docker daemon
Step 0 : FROM centos
---> a8415304daac
Step 1 : MAINTAINER liugang [email protected]
---> Running in 912028e3b1d4
---> e7574b19226e
Removing intermediate container 912028e3b1d4
Step 2 : ADD zookeeper.tar /var
---> e956ed3cb80e
Removing intermediate container 9e1954b57eeb
Step 3 : ADD jdk/ /var/jdk/
---> 327fede9154e
Removing intermediate container cb3551ca5abc
Step 4 : ENV JAVA_HOME /var/jdk
---> Running in 2070662c6cad
---> 395b3fab1a07
Removing intermediate container 2070662c6cad
Step 5 : ENV ZK_HOME /var/zookeeper
---> Running in d535dffc8faf
---> d05e2d002c45
Removing intermediate container d535dffc8faf
Step 6 : ENV PATH $JAVA_HOME/bin:$PATH
---> Running in c9940b535a9d
---> 494ed0d313e1
Removing intermediate container c9940b535a9d
Step 7 : RUN source /etc/profile
---> Running in 4477bc347f82
---> 040be16683cc
Removing intermediate container 4477bc347f82
Step 8 : RUN mv /var/zookeeper/conf/zoo_sample.cfg /var/zookeeper/conf/zoo.cfg
---> Running in e8480d49b717
---> b21de36d6251
Removing intermediate container e8480d49b717
Step 9 : EXPOSE 2181 2888 3888
---> Running in a840e7759057
---> c4733cfba9d1
Removing intermediate container a840e7759057
Step 10 : ENTRYPOINT /var/zookeeper/bin/zkServer.sh
---> Running in 6d6ec643f542
---> b4cdf9db68cc
Removing intermediate container 6d6ec643f542
Step 11 : CMD start-foreground
---> Running in 2d3eedc2c196
---> df307fb18230
Removing intermediate container 2d3eedc2c196
Successfully built df307fb18230
接下来测试,我们利用创建好的容器镜像运行一个容器:
# docker run -d -P --name test zookeeper
620bde126a2f945e62de49adf7592ded71eec86041e441cb618bca198b9d9d55
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
620bde126a2f zookeeper "/var/zookeeper/bin/ 6 seconds ago Up 4 seconds 0.0.0.0:32773->2181/tcp, 0.0.0.0:32772->2888/tcp, 0.0.0.0:32771->3888/tcp test
已经运行成功,我们可以通过telnet测试:
# telnet 0.0.0.0 32773
Trying 0.0.0.0...
Connected to 0.0.0.0.
Escape character is '^]'.
stat
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Clients:
/172.17.42.1:53747[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 4
Connection closed by foreign host.
可以看到,在容器内部,zookeeper是以standalone方式运行的。