Doris 官方提供了现成的 Docker 开发镜像,仅用于编译代码是完全足够了,但直接用于阅读代码,debug调试,还是有所欠缺,本文将基于官方开发镜像打造极为舒适的 doris 开发环境
环境要求
远程 Linux 服务器安装 docker 并启动 docker 服务
安装 vscode 扩展插件
根据需要在远程 Linux 服务器中安装扩展插件

be 端(以C++代码为主), 必装插件如下:
clangd (阅读C++代码, 需要glibc版本 >= 2.18)
CMake 与 CMake Tools
CodeLLDB (debug调试be)
Language Support for Java(TM) by Red Hat (阅读java部分的代码)
Git Graph 与 GitLens — Git supercharged (git管理,需要git版本 >= 2.7.2)
Docker (方便在远程 Linux 服务器上管理与使用 docker)
若登录远程 Linux 服务器的角色为普通用户,需要先使用以下命令授予该用户 docker 权限, 并重新连接
1
| sudo usermod -aG docker username
|
vscode 需要执行下图命令进行重连,否则不会生效

启动容器
- 创建 docker-compose.yml 文件,复下面的代码,根据实际情况修改 volumes 中的路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| version: '3.4'
services: doris: container_name: my-doris-build-env image: apache/doris:build-env-ldb-toolchain-latest network_mode: "host" cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined privileged: true environment: - TZ=Asia/Shanghai volumes: - /home/doris/.ssh:/root/.ssh - /home/doris/.vscode-server:/root/.vscode-server - /home/doris/doris:/root/doris - /home/doris/.m2:/root/.m2 command: /bin/bash -c " if [ ! -f /lib64/libc-2.18.so ]; then \ cd /root && \ wget --no-check-certificate https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz && \ tar xvfz glibc-2.18.tar.gz && \ mkdir -p glibc-2.18/build && \ cd glibc-2.18/build && \ export CC=/usr/bin/gcc && \ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin && \ make -j8 && \ make install && \ rm -rf /root/glibc-2.18*; \ fi && \ if [[ ! $(git --version | awk '{print $3}') =~ '2.36.6' ]]; then \ yum install -y https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && \ yum remove git -y && \ yum install -y bash-completion git236 && \ yum clean all && \ rm -rf /var/cache/yum; \ fi && \ tail -f /dev/null"
|
- 启动容器

- 连接开发容器
点左侧远程资源管理器,选择开发容器,然后登录到容器中,选择 在当前文件中附加 或 在新窗口中附件 都可


若无开发容器选项,则需要先安装 Dev Containers 扩展插件

在vscode 左下角可以看到连接到的容器

进入容器中,可以下使用以下命令检查 glibc-2.18 和 git 是否安装完毕
1 2
| getconf GNU_LIBC_VERSION git --version
|

若如上图显示,glibc-2.18 和 git 则已安装完毕
- 保存容器为新镜像
若担心容器被意外删除,可以在远程 Linux 服务器上将现有容器保存为新镜像,下次直接使用新镜像启动容器即可,无需重新安装 glibc-2.18 和 git
基本语法如下:
1
| docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
|
例如:
1
| docker commit my-doris-build-env doris:vscode-build-env
|

配置 settings.json
修改 settings.json 文件,添加以下内容,没有则在工作目录下手动创建 .vscode/settings.json
1 2 3 4 5 6 7 8 9 10
| { "clangd.arguments": [ "--compile-commands-dir=${workspaceFolder}/be/build_Debug" ], "lldb.launch.expressions": "native", "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx12G -Xms12G", }
|

debug
- 编译debug版
1
| BUILD_TYPE=Debug sh build.sh --fe --be
|
Debug 大小写不同,会导致 build 目录名不同
BUILD_TYPE=Debug 生成的目录为 build_Debug
BUILD_TYPE=debug 生成的目录为 build_debug
- 修改 be fe 配置
根据实际情况,修改配置,其中 fe.conf 需要添加配置
目的:避免因为gdb调试中因超过心跳时间限制导致超时,进而SQL执行报错而终止
1 2 3
| bdbje_heartbeat_timeout_second = 600 remote_fragment_exec_timeout_ms = 600000 max_backend_heartbeat_failure_tolerance_count = 100
|
- 配置launch.json
添加以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "attach", "name": "Debug", "program": "${workspaceFolder}/output/be/lib/doris_be" } ] }
|
若没有,可以手动在 .vscode 目录下创建 launch.json

- 启动be 与 fe,debug be
