跳到主要内容
跳到主要内容

使用 Docker 开发镜像编译(推荐)

本文介绍如何使用 Doris 官方提供的编译镜像来编译 Doris,由于此镜像由官方维护,且会随编译依赖及时更新,所以推荐用户使用这种方式编译

安装 Docker

比如在 CentOS 下,执行命令安装 Docker

yum install docker

或参考 Docker 官方安装文档进行安装

下载 Doris 构建镜像

不同的 Doris 版本,需要下载不同的构建镜像。其中 apache/doris:build-env-ldb-toolchain-latest 用于编译最新主干版本代码,会随主干版本不断更新。

镜像版本Doris 版本
apache/doris:build-env-for-2.02.0.x
apache/doris:build-env-for-2.0-no-avx22.0.x
apache/doris:build-env-ldb-toolchain-latestmaster
apache/doris:build-env-ldb-toolchain-no-avx2-latestmaster

下面就以编译 Doris 2.0 版本作为介绍,下载并检查 Docker 镜像

# 可以选择 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

注意事项:

  • 针对不同的 Doris 版本,需要下载对应的镜像版本。镜像版本号与 Doris 版本号统一,比如可以使用 apache/doris:build-env-for-2.0 来编译 2.0 版本。

  • apache/doris:build-env-ldb-toolchain-latest 用于编译最新主干版本代码,会随主干版本不断更新。可以查看 docker/README.md 中的更新时间。

  • 名称中带有 no-AVX2 字样的镜像中的第三方库,可以运行在不支持 AVX2 指令的 CPU 上。可以配合 USE_AVX2=0 选项,编译 Doris。

  • 编译镜像变更信息可参考 ChangeLog

  • 最新版本的 apache/doris:build-env-ldb-toolchain-latest 镜像中同时包含 JDK 8 和 JDK 17。

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

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

编译 Doris

01 下载 Doris 源码

登录到宿主机,通过 git clone 获取 Doris 2.0 分支上的最新代码。

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

下载后,源代码路径,假设放到了 doris-branch-2.0 这个目录下。

02 运行构建镜像

# 提前在 host 主机构建 maven 的 .m2 目录,以便将下载的 Java 库可以多次在 Docker 复用
mkdir ~/.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 里了

注意:

  • 建议以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。

  • 建议同时将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库。

  • 运行镜像编译时需要下载其它文件,可以采用 host 模式启动镜像。host 模式不需要加 -p 进行端口映射,和宿主机共享网络 IP 和端口。

  • Docker run 部分参数说明如下:

参数注释
-v给容器挂载存储卷,挂载到容器的某个目录
--name指定容器名字,后续可以通过名字进行容器管理
--network     容器网络设置:bridge 使用 docker daemon 指定的网桥,host 容器使用主机的网络,container:NAME_or_ID 使用其他容器的网路,共享 IP 和 PORT 等网络资源,none 容器使用自己的网络(类似--net=bridge),但是不进行配置

03 执行构建

# 默认编译出支持 AVX2 的
$ sh build.sh

# 如不支持 AVX2 需要加USE_AVX2=0
$ USE_AVX2=0 sh build.sh

# 如需编译 Debug 版本的 BE,增加 BUILD_TYPE=Debug
$ BUILD_TYPE=Debug sh build.sh
提示

如何查看机器是否支持 AVX2?

$ cat /proc/cpuinfo | grep avx2

编译完成后,产出文件在 output/ 目录中。

自行编译开发环境镜像

可以自己创建一个 Doris 开发环境镜像,具体可参阅 docker/README.md 文件。