
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Apache Bookkeeper是Apache软件基金会的开源项目,提供复制日志服务,用于构建复制状态机。日志包含一系列事件,可应用于状态机,Bookkeeper保证每个副本状态机按相同顺序接收所有事件。本Docker镜像提供便捷的Bookkeeper运行环境,支持独立模式和集群模式部署,依赖Zookeeper进行状态存储和Bookie(Bookkeeper服务器)节点发现,适用于本地开发、测试及集群功能演示。
可在单个容器中运行独立BookKeeper集群,模拟本地部署:
bashdocker run -it \ --entrypoint "/bin/bash" \ apache/bookkeeper \ -c "/opt/bookkeeper/bin/bookkeeper localbookie 3"
也可先启动容器,再在容器内执行
bin/bookkeeper localbookie 3
测试集群:需先进入容器,执行BookKeeper shell命令:
bash# 进入容器 docker exec -it <容器ID或名称> bash # 测试命令示例 ./bin/bookkeeper shell listbookies -rw ./bin/bookkeeper shell simpletest
Docker Compose
通过docker-compose快速部署完整集群:
bashgit clone https://github.com/apache/bookkeeper cd bookkeeper/docker docker-compose up -d
默认启动3个Bookie节点和1个dice应用,日志示例:
bookie1_1 | 2017-12-08 23:18:11,315 - INFO - [bookie-io-1:BookieRequestHandler@51] - Channel connected [id: 0x405d690e, L:/172.19.0.3:3181 - R:/172.19.0.6:34922] bookie2_1 | 2017-12-08 23:18:11,326 - INFO - [bookie-io-1:BookieRequestHandler@51] - Channel connected [id: 0x7fa8645d, L:/172.19.0.4:3181 - R:/172.19.0.6:38862] dice_1 | Value = 1, epoch = 5, leading
扩展dice应用数量:
bashdocker-compose up -d --scale dice=3
扩展Bookie节点数量:
bashdocker-compose up -d --scale bookie1=3
关闭集群(清理容器避免残留数据影响下次启动):
bashdocker-compose down
Makefile
通过Makefile部署集群:
bashgit clone https://github.com/apache/bookkeeper cd bookkeeper/docker make run-demo
无X环境(如默认MacOS)需在6个终端分别执行:
bashmake run-zk make run-bk BOOKIE=1 make run-bk BOOKIE=2 make run-bk BOOKIE=3 make run-dice make run-dice
重启集群前需清理数据:
sudo rm -rf /tmp/test_bk,避免Zookeeper连接失败
1. 创建Docker网络
创建专用网络确保容器间名称解析一致性:
bashdocker network create "bk_network"
2. 启动Zookeeper
使用官方Zookeeper镜像在创建的网络中启动Zookeeper:
bashdocker run -d \ --network "bk_network" \ --name "test_zookeeper" \ --hostname "test_zookeeper" \ zookeeper
3. 初始化元数据存储
首次部署集群需初始化元数据(当前BookKeeper镜像启动首个Bookie时会自动执行此步骤):
bashdocker run -it --rm \ --network "bk_network" \ --env BK_zkServers=test_zookeeper:2181 \ apache/bookkeeper \ /opt/bookkeeper/bin/bookkeeper shell metaformat
4. 启动Bookie节点
启动3个Bookie节点组成集群:
bash# 启动bookie1 docker run -it\ --network "bk_network" \ --env BK_zkServers=test_zookeeper:2181 \ --name "bookie1" \ --hostname "bookie1" \ apache/bookkeeper # 同理启动bookie2和bookie3,只需修改--name和--hostname
5. 运行客户端应用
使用dice应用测试集群(验证 leader 选举和日志写入):
bashdocker run -it --rm \ --network "bk_network" \ --env ZOOKEEPER_SERVERS=test_zookeeper:2181 \ caiok/bookkeeper-tutorial
配置方式
Bookkeeper支持两种配置方式,优先级从高到低为:
BK_<原配置键>,如BK_zkServers对应配置文件中的zkServers/opt/bookkeeper/conf目录配置示例(混合使用两种方式):
bashdocker run --name bookie1 -d \ -v $(local_configure_dir):/opt/bookkeeper/conf/ \ # 挂载配置文件 -e BK_bookiePort=3181 \ # 环境变量设置端口 -e BK_zkServers=zk-server1:2181,zk-server2:2181 \ # 环境变量设置Zookeeper地址 -e BK_journalPreAllocSizeMB=32 \ # 环境变量设置日志预分配大小 apache/bookkeeper
配置覆盖规则
环境变量值会覆盖挂载配置文件中的对应值。例如:
bk_server.conf中设置zkServers=zk-server3:2181-e BK_zkServers=zk-server1:2181,zk-server2:2181设置环境变量zk-server1:2181,zk-server2:2181常用环境变量
| 环境变量 | 说明 | 默认值 |
|---|---|---|
BK_bookiePort | Bookie监听端口 | 3181 |
BK_zkServers | Zookeeper集群地址列表,格式host:port,host:port | 127.0.0.1:2181 |
BK_zkLedgersRootPath | Zookeeper中账本元数据根路径 | /bookkeeper/ledgers |
BK_CLUSTER_ROOT_PATH | Zookeeper集群根路径 | 空(账本路径为/ledgers) |
BK_DATA_DIR | 数据存储根目录,包含journal、ledgers、index子目录 | /data/bookkeeper |
配置文件说明
容器内配置文件位于/opt/bookkeeper/conf,源自Bookkeeper源码仓库的https://github.com/apache/bookkeeper/tree/master/bookkeeper-server/conf%EF%BC%8C%E4%B8%BB%E8%A6%81%E6%96%87%E4%BB%B6%E5%8C%85%E6%8B%AC%EF%BC%9A
bk_server.conf:核心服务配置bkenv.sh:环境变量配置log4j2.xml:服务日志配置log4j2.shell.xml:shell命令日志配置建议修改前先熟悉各文件功能及默认配置。
注意事项
bash# 清理cookie并格式化 /opt/bookkeeper/bin/bookkeeper shell bookieformat -nonInteractive -force -deleteCookie # 启动自动恢复 /opt/bookkeeper/bin/bookkeeper autorecovery
镜像中软件的许可信息参见https://github.com/apache/bookkeeper/blob/master/LICENSE%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务