设为首页 收藏本站
查看: 1360|回复: 0

[经验分享] docker-compose快速创建zookeeper集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-21 10:49:03 | 显示全部楼层 |阅读模式
很多时候大家不同的容器想要不用启动参数这个时候不妨使用脚本封装来实现,官方也很推荐这个做法,这里介绍下如何使用脚本传参快速启动一个zookeeper集群。    zookeeper集群大家知道有部分通用配置,和一些动态配置如果用一个简单的zookeeper实例无法正常启动集群,所以我们的节点列表和节点ID是需要动态传入的所以下面的脚本的${ZK_ID}和${ZK_LIST}是需要你使用compose的配置传入的。

zookeeper启动脚本
https://code.aliyun.com/nginxs/docker/blob/master/pkg/zookeeper/docker-entrypoint.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[iyunv@test-node pkg]# cat zookeeper/docker-entrypoint.sh
#!/bin/bash
#######################################################
#       author : baishaohua                           #
#       mail  : nginxs@126.com                     
#
#       blog  : new.nginxs.net                     
#
#       msg   : startup zookeeper cluster for docker #
#######################################################
  
#Shell Base Env
ZK_HOME="/usr/local/zookeeper"
ZK_CONF="${ZK_HOME}/conf/zoo.cfg"
ZK_DATA="/var/lib/zookeeper"
ZK_CONF_TXT="tickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=${ZK_DATA}\nclientPort=2181"

echo "zookeeper is start"
#init config
echo -e ${ZK_CONF_TXT} >${ZK_CONF}
  
#ZK_NODE_LIST from docker argv

for i in
${ZK_NODE_LIST}
do
echo "$i" >>${ZK_CONF}
done
echo "${ZK_ID}" >${ZK_DATA}/myid
  
  
#this shell main function
${ZK_HOME}/bin/zkServer.sh start-foreground





Dockerfile文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@test-node3 pkg]# cat zookeeper/Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/forker/centos7:last
MAINTAINER baishaohua <nginxs@126.com>
  
#start up configure 下面自动把zookeeper安装包安装到/usr/local/zookeeper目录
ADD zookeeper-3.5.1-alpha.tar.gz /usr/local/      
RUN mv /usr/local/zookeeper-3.5.1-alpha /usr/local/zookeeper && mkdir -p /var/lib/zookeeper/
RUN yum -y install make gcc libgcc gcc-c++ glibc-devel java-1.8.0-openjdk
COPY docker-entrypoint.sh /usr/bin/
  
#ENV and CMD 配置容器默认启动脚本和开放2181端口
CMD ["/usr/bin/docker-entrypoint.sh"]
EXPOSE 2181





重点来了我们要从docker-compose.yml传参到启动脚本
下面通过environment定义环境变量把参数传递到容器的启动脚本,完成自定义部分内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[iyunv@test-node pkg]# cat zk_cluster/docker-compose.yml
version: '3'
services:
  zk1:
    image: registry.cn-hangzhou.aliyuncs.com/forker/zookeeper
    restart: always
    container_name: zk1
    ports:
      - "2181:2181"
    environment:
      ZK_ID: 1
      ZK_NODE_LIST: server.1=zk1:3181:4181 server.2=zk2:3181:4181 server.3=zk3:3181:4181
  
  zk2:
    image: registry.cn-hangzhou.aliyuncs.com/forker/zookeeper
    restart: always
    container_name: zk2
    ports:
      - "2182:2181"
    environment:
      ZK_ID: 2
      ZK_NODE_LIST: server.1=zk1:3181:4181 server.2=zk2:3181:4181 server.3=zk3:3181:4181
  
  zk3:
    image: registry.cn-hangzhou.aliyuncs.com/forker/zookeeper
    restart: always
    container_name: zk3
    ports:
      - "2183:2181"
    environment:
      ZK_ID: 3
      ZK_NODE_LIST: server.1=zk1:3181:4181 server.2=zk2:3181:4181 server.3=zk3:3181:4181





启动我的compose服务
这里可以看到其实zk1,zk2,zk3每个都是一个service,而且compose会为这个应用创建一个默认的桥接网络
1
2
3
4
5
6
7
8
9
10
11
[iyunv@test-node3 zk_cluster]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Creating network "zkcluster_default" with the default driver
Creating zk3
Creating zk1
Creating zk2




测试zookeeper集群
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[iyunv@test-node zk_cluster]# echo  "conf"|nc localhost 2181
clientPort=2181
secureClientPort=-1
dataDir=/var/lib/zookeeper/version-2
dataDirSize=67109393
dataLogDir=/var/lib/zookeeper/version-2
dataLogSize=67109393
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=4181
quorumPort=3181
peerType=0
membership:
server.1=zk1:3181:4181:participant
server.2=zk2:3181:4181:participant
server.3=zk3:3181:4181:participant
version=100000000






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-352917-1-1.html 上篇帖子: docker基本介绍与安装 下篇帖子: docker技术部署tomcat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表