本文介绍如何使用 Doris 官方提供的编译镜像来编译 Doris,由于此镜像由官方维护,且会随编译依赖及时更新,所以推荐用户使用这种方式编译
提示
目前还不支持存算分离模式编译部署
安装 Docker
比如在 CentOS 下,执行命令安装 Docker
1. yum install docker
或参考 Docker 官方安装文档进行安装
下载 Doris 构建镜像
不同的 Doris 版本,需要下载不同的构建镜像。其中 apache/doris:build-env-ldb-toolchain-latest 用于编译最新主干版本代码,会随主干版本不断更新。
| 镜像版本 | Doris 版本 |
|---|---|
| apache/doris:build-env-for-2.0 | 2.0.x |
| apache/doris:build-env-for-2.0-no-avx2 | 2.0.x |
| apache/doris:build-env-ldb-toolchain-latest | master |
| apache/doris:build-env-ldb-toolchain-no-avx2-latest | master |
下面就以编译 Doris 2.0 版本作为介绍,下载并检查 Docker 镜像
1. # 可以选择 docker.io/apache/doris:build-env-for-2.0
2. $ docker pull apache/doris:build-env-for-2.0
4. # 检查镜像下载完成
5. $ docker images
6. REPOSITORY TAG IMAGE ID CREATED SIZE
7. 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。2.1(含)之前的版本,请使用 JDK 8。3.0(含)之后的版本或 master 分支,请使用 JDK 17。
1. # 切换到 JDK 8
2. export JAVA_HOME=/usr/lib/jvm/java-1.8.0
3. export PATH=$JAVA_HOME/bin/:$PATH
5. # 切换到 JDK 17
6. export JAVA_HOME=/usr/lib/jvm/jdk-17.0.2/
7. export PATH=$JAVA_HOME/bin/:$PATH
编译 Doris
01 下载 Doris 源码
登录到宿主机,通过 git clone 获取 Doris 2.0 分支上的最新代码。
1. $ git clone -b branch-2.0 https://github.com/apache/doris.git
下载后,源代码路径,假设放到了 doris-branch-2.0 这个目录下。
02 运行构建镜像
1. # 提前在 host 主机构建 maven 的 .m2 目录,以便将下载的 Java 库可以多次在 Docker 复用
2. mkdir ~/.m2
4. # 运行构建镜像
5. 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
7. # 执行成功后,应该自动进入到 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 执行构建
1. # 默认编译出支持 AVX2 的
2. $ sh build.sh
4. # 如不支持 AVX2 需要加USE_AVX2=0
5. $ USE_AVX2=0 sh build.sh
7. # 如需编译 Debug 版本的 BE,增加 BUILD_TYPE=Debug
8. $ BUILD_TYPE=Debug sh build.sh
提示
如何查看机器是否支持 AVX2?
$ cat /proc/cpuinfo | grep avx2
编译完成后,产出文件在 output/ 目录中。
自行编译开发环境镜像
可以自己创建一个 Doris 开发环境镜像,具体可参阅 docker/README.md 文件。
