如果你正在寻找一种能快速搭建 Doris 编译环境、避免手动安装复杂依赖,并且希望编译产物能稳定保留的方法,那么 Apache Doris 官方提供的 Docker 编译镜像绝对是你的首选。这个由社区维护的镜像,预装了编译 Doris 所需的所有工具链(如 LDB Toolchain)、第三方库和 JDK,让你可以“开箱即用”,直接进入编译环节,极大地简化了从源码到二进制产物的过程。
对于需要在本地开发、测试特定分支,或者在 CI/CD 流水线中集成 Doris 编译的开发者来说,这个方法能显著提升效率。本文将聚焦于如何使用 Docker 镜像进行 Doris 的离线编译部署,并针对一个常见痛点——虚拟机磁盘空间不足,提供完整的扩容解决方案。我们会从环境准备、镜像拉取、编译执行,一直讲到虚拟机磁盘扩容的实操步骤,确保你能在资源受限的环境下也能顺利完成整个流程。
1. 核心能力速览
在深入细节之前,我们先快速了解下这个方案的核心特性和要求。
| 能力项 | 说明 |
|---|---|
| 项目类型 | Apache Doris 官方 Docker 编译环境 |
| 核心功能 | 提供预配置的完整编译环境,用于从源码编译 Doris |
| 环境要求 | 本地需安装 Docker 环境 |
| 镜像体积 | 约 3.3 GB (以build-env-for-2.0为例) |
| 支持架构 | 主要支持 x86_64;ARM64 需特殊处理 |
| JDK 版本 | 镜像内同时包含 JDK 8 和 JDK 17,可按需切换 |
| 编译产物 | 输出至宿主机挂载的源码目录下的output/文件夹 |
| 网络要求 | 编译时需要容器能访问外网以下载依赖(建议使用--network=host) |
| 是否支持离线 | 首次拉取镜像和编译时需要网络;可通过挂载本地.m2目录缓存依赖,实现部分离线复用 |
| 适合场景 | 本地开发编译、CI/CD 自动化构建、快速搭建统一编译环境 |
2. 适用场景与使用边界
谁适合使用?
- Doris 开发者:需要频繁编译不同分支进行功能开发或问题调试。
- 运维或测试工程师:需要在特定环境(如内网、特定 Linux 发行版)下构建 Doris 安装包。
- CI/CD 流程维护者:希望在 Docker 容器中实现可复现、隔离的 Doris 构建流程。
能解决什么问题?
- 环境一致性:避免因本地环境差异(如 GCC 版本、库文件路径)导致的编译失败。
- 依赖管理简化:无需手动安装和配置复杂的编译工具链(如 LDB Toolchain)及大量第三方库。
- 环境清理便捷:编译完成后,直接删除容器即可,宿主机环境保持干净。
- 编译产物持久化:通过目录挂载,编译生成的二进制文件保留在宿主机,不随容器销毁而丢失。
不适合什么场景?
- 存算分离模式编译:根据官方文档提示,目前 Docker 镜像方式暂不支持存算分离模式的编译部署。
- 极度受限的无网络环境:虽然依赖可缓存,但初始镜像拉取和部分编译过程仍需网络。
- 磁盘空间极其紧张:Docker 镜像本身约 3.3GB,编译过程还需要额外空间,需提前规划。
3. 环境准备与前置条件
在开始之前,请确保你的宿主机环境满足以下要求:
- 操作系统:支持 Docker 的 Linux 发行版(如 CentOS, Ubuntu),或 macOS/Windows with WSL2。本文以 CentOS 为例。
- Docker 环境:已安装并启动 Docker 服务。如果尚未安装,在 CentOS 上可执行:
sudo yum install -y docker sudo systemctl start docker s