本文档详细介绍了 Base Node 系统中用于编排容器化服务的 Docker Compose 配置。它解释了构成功能性 Base 节点的基本容器的结构、网络和交互。有关这些服务使用的 Docker 镜像的信息,请参阅 Docker 镜像。有关持久化存储管理方式的详细信息,请参阅 卷管理。
Base Node 使用 Docker Compose 来协调多个容器化服务,这些服务共同构成 Base 网络上的完整节点。该系统旨在易于部署,同时提供执行客户端选择的灵活性。
来源:docker-compose.yml1-32 README.md66-69
Docker Compose 配置定义了两个主要服务,它们协同工作以运行 Base 节点。
| 服务 | 描述 | 目的 |
|---|---|---|
execution | 执行客户端容器 | 运行 L2 执行引擎(Geth、Reth 或 Nethermind) |
node | Rollup 节点容器 | 运行 op-node,该节点从 L1 数据派生 L2 块 |
这两个服务都基于相同的 Dockerfile 构建,但通过各自的入口点脚本运行不同的进程。
execution 服务配置并运行所选的执行客户端(Geth、Reth 或 Nethermind)。
执行服务的关键配置
CLIENT 环境变量指定的 Dockerfileexecution-entrypoint 脚本来初始化和启动执行客户端/dataNETWORK_ENV 指定的文件的环境变量node 服务运行 OP Stack 节点(op-node),该节点处理 Layer 1 数据以派生 Layer 2 链。
node 服务的关键配置
op-node-entrypoint 脚本来初始化和启动 op-nodeDocker Compose 文件公开了各种端口以方便与节点进行交互。
| 容器端口 | 主机端口 | 服务 | 描述 |
|---|---|---|---|
| 8545 | 8545 | execution | JSON-RPC API 端点 |
| 8546 | 8546 | execution | WebSocket API 端点 |
| 6060 | 7301 | execution | Metrics 端点 |
| 30303 | 30303 (TCP/UDP) | execution | P2P 网络通信 |
| 8545 | 7545 | node | JSON-RPC API 端点 |
| 9222 | 9222 (TCP/UDP) | node | P2P 网络通信 |
| 7300 | 7300 | node | Metrics 端点 |
| 6060 | 6060 | node | pprof 调试端点 |
这些端口映射允许外部系统与 Base 节点的服务进行交互。
来源:docker-compose.yml6-11 docker-compose.yml23-28
Docker Compose 网络创建了一个隔离的环境,其中:
node 服务连接到环境变量文件中指定的外部以太坊 L1 节点。node 服务通过内部 Docker 网络与 execution 服务通信。来源:docker-compose.yml6-11 docker-compose.yml23-28 README.md57-69
Docker Compose 配置使用环境变量文件来设置特定网络的参数。支持两种网络选项:
.env.mainnet).env.sepolia)环境变量文件通过 NETWORK_ENV 环境变量进行选择。
两个服务都使用相同的环境变量文件,确保节点配置的一致性。
来源:docker-compose.yml15-16 docker-compose.yml30-31 README.md58-64
数据持久化是通过 execution 服务中的卷挂载来管理的。
主机目录使用 HOST_DATA_DIR 环境变量指定(如 README 中所述,默认为 ${PROJECT_ROOT}/geth-data)。
来源:docker-compose.yml13-14 README.md91-92
Base Node 支持三种执行客户端。
客户端使用 CLIENT 环境变量进行选择。
此变量决定了用于构建两个服务容器镜像的 Dockerfile。
来源:docker-compose.yml5 README.md71-78
要使用 Docker Compose 配置启动 Base 节点:
NETWORK_ENV 环境变量以指定网络。CLIENT 环境变量以选择执行客户端。docker compose up --build示例
这将根据 Docker Compose 文件中的配置构建并启动容器。
来源:README.md58-69 README.md71-78
虽然默认配置使用两个独立的容器,但也可以使用 supervisord 将两个服务运行在单个容器中。
这需要调整环境变量,以处理两个服务都在 localhost 上的事实。
启动节点后,您可以通过查询 JSON-RPC 端点来验证其是否正常工作。