# Docker 构建架构 ## 多阶段构建策略 P2Pool 的 Docker 构建使用多阶段构建,确保最终镜像轻量且安全。 ### 构建阶段概览 ``` ┌─────────────────────────────────────────────────┐ │ 阶段 1:基础镜像 (Alpine 3.21 / Ubuntu 24.04) │ │ - 安装构建依赖: │ │ git, cmake, gcc, g++, make │ │ libuv-dev, libzmq-dev, libcurl-dev │ └─────────────────┬───────────────────────────────┘ │ ┌─────────────────▼───────────────────────────────┐ │ 阶段 2:构建 │ │ 1. 从 GitHub 克隆 p2pool(使用 --recursive) │ │ 2. 检出指定的 P2POOL_VERSION 标签 │ │ 3. CMake 配置: │ │ - 发布构建 │ │ - 禁用合并挖矿捐赠 │ │ 4. 使用 make 编译: │ │ - 交叉编译:-j2 │ │ - amd64:-j$(nproc / 2) │ │ - arm64:-j$(nproc) │ └─────────────────┬───────────────────────────────┘ │ ┌─────────────────▼───────────────────────────────┐ │ 阶段 3:提取 (scratch 镜像) │ │ - 将二进制文件复制到 /linux_${TARGETARCH}/ │ │ - 启用 Docker buildx 本地文件提取 │ └──────────────────────────────────────────────────┘ ``` ## 关键构建参数 ### 版本控制 - `P2POOL_VERSION`:指定上游 p2pool 版本 - 使用 `--build-arg` 传递版本 ### 编译配置 - `-DWITH_MERGE_MINING_DONATION=OFF`:禁用合并挖矿捐赠 - 不同架构的编译并行度控制 ## 镜像变体 ### Alpine 镜像 (推荐) - 基于 Alpine Linux - 镜像体积小 - 安全性高 - 文件:`docker/Dockerfile.alpine` ### Ubuntu 镜像 - 基于 Ubuntu LTS - 更广泛的系统兼容性 - 文件:`docker/Dockerfile.ubuntu` ## 构建命令示例 ```bash # Alpine 构建(推荐) docker buildx build --pull \ --platform linux/amd64 \ --build-arg P2POOL_VERSION=v4.9.1 \ --output type=local,dest=./output \ -f docker/Dockerfile.alpine . # 多架构构建 docker buildx build --pull \ --platform linux/amd64,linux/arm64 \ --build-arg P2POOL_VERSION=v4.9.1 \ --output type=local,dest=./output \ -f docker/Dockerfile.alpine . ``` ## 性能优化策略 ### 并行度控制 - amd64:`$(nproc) / 2`(减少资源竞争) - arm64:`$(nproc)`(充分利用资源) ### 缓存优化 - 使用多阶段构建减少最终镜像大小 - 利用 Docker 构建缓存 ## 注意事项 - 需要 Docker Buildx 支持 - 构建需要互联网连接 - 克隆上游仓库需要 `--recursive` 参数 - 编译过程禁用合并挖矿捐赠功能