跳到主要内容
最后于 更新

使用 Docker 镜像编译 Apache Doris

本文介绍如何使用 Apache Doris 官方编译镜像编译 Doris 源码。该镜像由社区维护并随依赖及时更新,免去手动安装 toolchain 与三方库的过程,是最推荐的编译方式。

提示

目前 Docker 镜像方式还不支持存算分离模式的编译部署。

适用人群与优缺点​

维度说明
适用人群希望快速搭建编译环境、不想手动配置依赖的开发者
优点镜像已预装 thirdparty、toolchain、JDK,开箱即用
缺点需要本地有可用的 Docker 环境,镜像体积较大(约 3.3 GB)

如果机器上没有 Docker 环境,可改用 LDB Toolchain 编译。

1. 安装 Docker​

在 CentOS 上可直接通过包管理器安装:

yum install docker

其他发行版请参考 Docker 官方安装文档。

2. 选择并下载构建镜像​

不同 Doris 版本对应不同的构建镜像。apache/doris:build-env-ldb-toolchain-latest 用于编译 master 主干代码,会随主干持续更新。

镜像 Tag适用 Doris 版本备注
apache/doris:build-env-for-2.02.0.x支持 AVX2 指令集
apache/doris:build-env-for-2.0-no-avx22.0.x兼容不支持 AVX2 的 CPU
apache/doris:build-env-for-2.12.1.x支持 AVX2 指令集
apache/doris:build-env-for-2.1-no-avx22.1.x兼容不支持 AVX2 的 CPU
apache/doris:build-env-for-3.03.0.x支持 AVX2 指令集
apache/doris:build-env-for-3.0-no-avx23.0.x兼容不支持 AVX2 的 CPU
apache/doris:build-env-for-3.13.1.x支持 AVX2 指令集
apache/doris:build-env-for-3.1-no-avx23.1.x兼容不支持 AVX2 的 CPU
apache/doris:build-env-ldb-toolchain-latestmaster跟随主干更新
apache/doris:build-env-ldb-toolchain-no-avx2-latestmaster兼容不支持 AVX2 的 CPU

以编译 Doris 2.0 为例,下载并检查镜像:

# 也可以使用 docker.io/apache/doris:build-env-for-2.0
docker pull apache/doris:build-env-for-2.0

# 确认镜像下载成功
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# apache/doris build-env-for-2.0 f29cf1979dba 3 days ago 3.3GB

镜像选择注意事项​

  • 镜像 Tag 与 Doris 版本一一对应,请按目标分支选择,避免跨版本编译。
  • no-avx2 镜像中的第三方库可运行在不支持 AVX2 的 CPU 上,需配合 USE_AVX2=0 选项编译。
  • 镜像变更历史可参考 thirdparty CHANGELOG。
  • 最新的 apache/doris:build-env-ldb-toolchain-latest(目前仅支持 x86_64 架构)同时包含 JDK 8 与 JDK 17:2.1(含)之前版本请使用 JDK 8,3.0(含)之后版本或 master 分支请使用 JDK 17。
  • ARM64 架构下使用 Docker 编译时,需先下载支持 ARM64 的 Linux 基础镜像(如 apache/doris:base-latest,对应 Ubuntu 22.04.5 LTS),再参考 Linux 直接编译 和 ARM 平台编译 文档安装依赖后编译。

容器内可通过环境变量切换 JDK:

# 切换到 JDK 8
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export PATH=$JAVA_HOME/bin/:$PATH

# 切换到 JDK 17
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.2/
export PATH=$JAVA_HOME/bin/:$PATH

3. 编译 Doris​

3.1 下载 Doris 源码​

在宿主机上获取目标分支代码(以 branch-2.0 为例):

git clone -b branch-2.0 https://github.com/apache/doris.git

假设源码目录为 ~/doris-branch-2.0。

3.2 启动构建容器​

# 提前在宿主机准备 maven 的 .m2 目录,便于多次构建复用 Java 依赖
mkdir ~/.m2

# 挂载源码与 .m2 目录,启动构建镜像
docker run -it --network=host \
--name mydocker \
-v ~/.m2:/root/.m2 \
-v ~/doris-branch-2.0:/root/doris-branch-2.0/ \
apache/doris:build-env-for-2.0

# 命令执行成功后将自动进入容器

docker run 关键参数说明:

参数作用
-v将宿主机目录挂载到容器,用于持久化源码与依赖
--name指定容器名称,便于后续管理
--network容器网络模式。host 表示与宿主机共享网络栈,无需端口映射

建议:

  • 始终挂载 Doris 源码目录,保证编译产物保留在宿主机,容器退出后不丢失。
  • 挂载 .m2 目录,避免每次启动容器都重新下载 Maven 依赖。
  • 容器内下载三方库需要访问外网,推荐使用 --network=host 模式。

3.3 执行构建​

容器内进入源码目录后运行:

# 默认编译支持 AVX2 的产物
sh build.sh

# CPU 不支持 AVX2 时需附加 USE_AVX2=0
USE_AVX2=0 sh build.sh

# 编译 Debug 版本 BE
BUILD_TYPE=Debug sh build.sh

编译完成后,产物位于源码目录下的 output/。

提示

如何检查机器是否支持 AVX2 指令集?

cat /proc/cpuinfo | grep avx2

输出非空即代表支持 AVX2。

4. 自行构建开发镜像​

如需自定义基础镜像(例如更换基础发行版、增加调试工具),请参考源码中的 docker/README.md。

FAQ​

Q1: 镜像版本和 Doris 版本不匹配会怎样?​

镜像中的 thirdparty 与 toolchain 与 Doris 源码强耦合。跨版本组合很可能在编译阶段抛出 undefined reference、incompatible library 等链接错误,请严格按表格选择。

Q2: 编译时报 AVX2 not supported?​

宿主机或目标运行机 CPU 不支持 AVX2 指令集。改用带 no-avx2 后缀的镜像,并在 build 时设置 USE_AVX2=0。

Q3: docker pull 拉取镜像太慢?​

可配置 Docker 镜像加速器,或使用 docker.io/apache/doris:... 完整路径。

Q4: 容器内 Java 库下载失败?​

确认容器启动时使用了 --network=host,并将 ~/.m2 目录挂载到容器,避免代理或网络隔离导致 Maven 中央仓库不可达。

相关文档​