什么是zookeeper
zookeeper 是一个分布式的,开源的协调服务框架,服务于分布式应用程序。
为什么要zookeeper
可以将分布式应用从处理协调服务的泥潭中解救出来。且性能优越,设计简洁优雅。
- 顺序一致性: 来自客户端的更新操作将会按照顺序被作用
- 原子性操作: 更新要么全部成功,要么全部失败,没有部分的结果
- 统一的系统镜像: 无论客户端链接的是哪台服务器,都能获得同样的服务视图,也就是说他是无状态的
- 可靠性保证: 一旦写入操作被执行(作用到服务器),这个状态将会被持久化,直到其他客户端的修改生效
- 时间线特性: 客户端访问服务器系统镜像能在一个特定时间访问内保证当前系统是实时更新的
Dockfile
|
|
注意:这里依赖的镜像oraclejdk8
请查看之前的文章“Docker学习系列五:构建oracle-jdk8镜像”
依赖的docker-entrypoint.sh
|
|
设置docker-entrypoint.sh权限:
chmod 755 docker-entrypoint.sh
build镜像
docker build -t zookeeper:3.4.9 .
测试镜像
启动镜像
docker run --name zookeeper --restart always -d zookeeper:3.4.9
This image includes EXPOSE 2181 (the zookeeper port), so standard container linking will make it automatically available to the linked containers. Since the Zookeeper “fails fast” it’s better to always restart it.
这个镜像内部开放了2181端口(zookeeper默认端口),所有标准的容器链接会使之自动可用。然后因为Zookeeper是fail fast
,所以最好总是能自动重启。
从另一个应用容器链接到zookeeper容器
docker run --name some-app --link some-zookeeper:zookeeper -d application-that-uses-zookeeper
从zookeeper命令行客户端链接到zookeeper容器
docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
集群模式启动zookeeper
docker-compose.yml:
|
|
启动集群:
docker-compose up
查看集群状态(端口):
docker-compose ps
这里需要注意:这里是伪集群。因为所有容器都启动在同一个物理主机中。实际应该是在不同的主机中启动zookeeper容器。
配置
zookeeper的配置在/conf
目录下。如果需要修改配置,可以挂载本地配置文件。例如以下所示:
docker run --name some-zookeeper --restart always -d -v $(pwd)/zoo.cfg:/conf/zoo.cfg zookeeper