快速参考
-
由……维护
Docker 社区 -
何处获取帮助:
Docker 社区 Slack、服务器故障、Unix & Linux 或 Stack Overflow
支持的标签及相应的 Dockerfile 链接
快速参考(续)
-
已发布的图像工件详细信息:
仓库信息 仓库的repos/zookeeper/目录(历史)
(图像元数据、传输大小等) -
图像更新:
官方镜像仓库的library/zookeeper标签
官方镜像仓库的library/zookeeper文件(历史记录) -
此描述的来源:
文档库的zookeeper/目录(历史)
什么是 Apache Zookeeper?
Apache ZooKeeper 是 Apache 软件基金会的一个软件项目,为大型分布式系统提供开源的分布式配置服务、同步服务和命名注册表。ZooKeeper 曾是 Hadoop 的一个子项目,但现在它本身就是一个顶级项目。

如何使用此图像
启动一个 Zookeeper 服务器实例
$ docker run --name some-zookeeper --restart always -d zookeeper
此图像包含 EXPOSE 2181 2888 3888 8080 (分别为 Zookeeper 客户端端口、跟随者端口、选举端口、AdminServer 端口),因此标准容器链接将使其自动对链接的容器可用。由于 Zookeeper“快速失败”,最好始终重新启动它。
从另一个 Docker 容器中的应用程序连接到 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
通过 docker-compose 或 docker stack deploy
示例 docker-compose.yml 用于 zookeeper :
version: '3.1'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo2:
image: zookeeper
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo3:
image: zookeeper
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
这将以复制模式启动 Zookeeper。运行 docker stack deploy -c stack.yml zookeeper (或 docker-compose -f stack.yml up )并等待其完全初始化。端口 2181-2183 将被暴露。
请注意,在一台机器上设置多个服务器不会创建任何冗余。如果发生导致机器死机的情况,所有的 zookeeper 服务器都将离线。完全冗余要求每个服务器都有自己的机器。它必须是一个完全独立的物理服务器。同一物理主机上的多个虚拟机仍然容易受到该主机完全故障的影响。
在以复制模式运行 Zookeeper 时考虑使用 Docker Swarm。
配置
Zookeeper 配置位于 /conf 。一种更改它的方法是将你的配置文件挂载为卷:
$ docker run --name some-zookeeper --restart always -d -v $(pwd)/zoo.cfg:/conf/zoo.cfg zookeeper
环境变量
如果未提供 zoo.cfg 文件,则使用 ZooKeeper 推荐的默认值。可以使用以下环境变量覆盖它们。
$ docker run -e "ZOO_INIT_LIMIT=10" --name some-zookeeper --restart always -d zookeeper
ZOO_TICK_TIME
默认为 2000 。ZooKeeper 的 tickTime
一个滴答的长度,这是 ZooKeeper 使用的基本时间单位,以毫秒为单位测量。它用于调节心跳和超时。例如,最小会话超时将是两个滴答。
ZOO_INIT_LIMIT
默认为 5 。ZooKeeper 的 initLimit
允许跟随者连接并同步到领导者的时间量,以滴答数计(见 tickTime)。如果 ZooKeeper 管理的数据量很大,则根据需要增加此值。
ZOO_SYNC_LIMIT
默认为 2 。ZooKeeper 的 syncLimit
允许跟随者与 ZooKeeper 同步的时间量(以 tick 为单位(参见 tickTime))。如果跟随者落后领导者太多,他们将被丢弃。
ZOO_MAX_CLIENT_CNXNS
默认为 60 。ZooKeeper 的 maxClientCnxns
限制由 IP 地址标识的单个客户端到 ZooKeeper 集群的单个成员可能建立的并发连接(在套接字级别)的数量。
ZOO_STANDALONE_ENABLED
默认为 true 。Zookeeper 的 standaloneEnabled
在 3.5.0 之前,人们可以在独立模式或分布式模式下运行 ZooKeeper。这些是独立的实现堆栈,并且在运行时在它们之间切换是不可能的。默认情况下(为了向后兼容),standaloneEnabled 被设置为 true。使用此默认值的结果是,如果以单个服务器启动,则不允许集合增长,如果以多个服务器启动,则不允许其缩小到包含少于两个参与者。
ZOO_ADMINSERVER_ENABLED
默认为 true 。Zookeeper 的 admin.enableServer
AdminServer 是一个嵌入式 Jetty 服务器,它为四个字母的单词命令提供 HTTP 接口。默认情况下,服务器在端口 8080 上启动,并且通过转到 URL“/commands/[命令名称]”来发出命令,例如,http://localhost:8080/commands/stat。
ZOO_AUTOPURGE_PURGEINTERVAL
默认为 0 。Zookeeper 的 autoPurge.purgeInterval
必须触发清除任务的时间间隔(以小时为单位)。设置为正整数(1 及以上)以启用自动清除。默认为 0。
ZOO_AUTOPURGE_SNAPRETAINCOUNT
默认为 3 。Zookeeper 的 autoPurge.snapRetainCount
当启用时,ZooKeeper 自动清理功能分别在 dataDir 和 dataLogDir 中保留 autopurge.snapRetainCount 个最近的快照以及相应的事务日志,并删除其余部分。默认值为 3。最小值是 3。
ZOO_4LW_COMMANDS_WHITELIST
默认为 srvr 。Zookeeper 的 4lw.commands.whitelist
用户想要使用的以逗号分隔的四字命令列表。有效的四字命令必须放在此列表中,否则 ZooKeeper 服务器将不会启用该命令。默认情况下,白名单仅包含 zkServer.sh 使用的“srvr”命令。其余的四字命令默认情况下是禁用的。
高级配置
ZOO_CFG_EXTRA
并非每个 Zookeeper 配置设置都通过上述列出的环境变量公开。这些变量仅旨在涵盖最小配置关键字和一些经常更改的选项。如果将自定义配置文件挂载为卷对您不起作用,请考虑使用 ZOO_CFG_EXTRA 环境变量。您可以使用此变量向 Zookeeper 配置文件添加任意配置参数。以下示例展示了如何在端口 7070 上启用 Prometheus 指标导出器:
$ docker run --name some-zookeeper --restart always -e ZOO_CFG_EXTRA="metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7070" zookeeper
JVMFLAGS
许多 Zookeeper 的高级配置选项可以在那里使用以 -Dproperty=value 形式的 Java 系统属性来设置。例如,你可以使用 Netty 而不是 NIO(默认选项)作为服务器通信框架:
$ docker run --name some-zookeeper --restart always -e JVMFLAGS="-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory" zookeeper
有关受支持的 Java 系统属性的完整列表,请参阅高级配置。
JVMFLAGS 的另一个示例用例是设置最大 JWM 堆大小为 1GB:
$ docker run --name some-zookeeper --restart always -e JVMFLAGS="-Xmx1024m" zookeeper
复制模式
以下环境变量在你想要以复制模式运行 Zookeeper 时是必填的。
ZOO_MY_ID
该 id 在整体中必须是唯一的,并且其值应在 1 到 255 之间。请注意,如果您使用已经包含 myid 文件的 /data 目录启动容器,此变量将不会有任何效果。
ZOO_SERVERS
此变量允许您指定 Zookeeper 集群的机器列表。每个条目应如此指定: server.id=<address1>:<port1>:<port2>[:role];[<client port address>:]<client port> Zookeeper 动态重新配置。条目之间用空格分隔。请注意,如果您使用已经包含 zoo.cfg 文件的 /conf 目录启动容器,此变量将不会有任何效果。
数据存储在哪里
此图像配置了卷 /data 和 /datalog ,分别用于保存 Zookeeper 内存数据库快照和数据库更新的事务日志。
注意放置事务日志的位置。专用的事务日志设备是持续良好性能的关键。将日志放在繁忙的设备上会对性能产生不利影响。
如何配置日志记录
默认情况下,ZooKeeper 将标准输出/标准错误输出重定向到控制台。自 3.8 版本起,ZooKeeper 附带 LOGBack 作为日志记录后端。ZooKeeper 默认的 logback.xml 文件位于 /conf 目录中。要覆盖默认的日志记录配置,请将您的自定义配置挂载为卷:
$ docker run --name some-zookeeper --restart always -d -v $(pwd)/logback.xml:/conf/logback.xml zookeeper
检查 ZooKeeper 日志以获取更多详细信息。
登录 3.7
您可以通过传递环境变量 ZOO_LOG4J_PROP 重定向到位于 /logs 的文件,如下所示:
$ docker run --name some-zookeeper --restart always -e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" zookeeper
这将把日志写入 /logs/zookeeper.log 。此镜像为方便起见在 /logs 配置了一个卷。
许可证
查看此映像中包含的软件的许可证信息。
与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。
一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 zookeeper/ 目录中找到。
对于任何预构建镜像的使用,镜像用户有责任确保对此镜像的任何使用都符合其中包含的所有软件的任何相关许可证。
