使用 Docker 编译 NebulaGraph¶
NebulaGraph 的源代码是使用 C++ 编写的,编译 NebulaGraph 需要安装一些依赖,这些依赖可能会与宿主机操作系统的依赖冲突,导致编译失败。为了避免这种情况,我们可以使用 Docker 来编译 NebulaGraph。NebulaGraph 提供整个编译环境的 Docker 镜像,可以帮助我们快速搭建编译环境并编译 NebulaGraph,同时避免了与宿主机操作系统的依赖冲突。本文介绍如何使用 Docker 编译 NebulaGraph 图数据库。
准备工作¶
在开始编译 NebulaGraph 之前,确保已经完成以下准备工作:
-
安装 Docker:确保用户的系统已经安装了 Docker。
-
克隆 NebulaGraph 源代码:将 NebulaGraph 的源代码克隆到本地。你可以使用 Git 命令来克隆代码仓库:
git clone --branch release-3.6 https://github.com/vesoft-inc/nebula.git
这将会将 NebulaGraph 的源代码克隆到当前目录的
nebula
子目录中。
步骤¶
-
拉取 NebulaGraph 编译镜像。
docker pull vesoft/nebula-dev:ubuntu2004
这里我们使用的是 NebulaGraph 的官方编译镜像,版本号为
ubuntu2004
,你也可以根据需要使用特定的版本号。详情参见nebula-dev-docker。 -
运行编译容器。
现在,我们可以在 Docker 容器中编译 NebulaGraph。执行以下命令:
docker run -ti \ --security-opt seccomp=unconfined \ -v "$PWD":/home \ -w /home \ --name nebula_dev \ vesoft/nebula-dev:ubuntu2004 \ bash
--security-opt seccomp=unconfined
:为了避免 Docker 容器中的 CMake 编译过程中出现Killed
错误,不限制容器进程可以进行的系统调用。
-v "$PWD":/home
:表示当前的 NebulaGraph 代码本地的路径会被挂载到容器内部的/home
目录。
-w /home
:将容器的工作目录设置为/home
,在容器中运行任何命令都将以该目录作为当前目录。
--name nebula_dev
:为容器指定一个名称,方便管理和操作。
vesoft/nebula-dev:ubuntu2004
:使用vesoft/nebula-dev
编译镜像的ubuntu2004
版本。
bash
:在容器中运行bash
命令,进入容器的交互式终端。
成功运行以上命令后,将会自动进入容器的交互式终端。若退出容器,可执行
docker exec -ti nebula_dev bash
重新进入容器。 -
在容器内编译 NebulaGraph。
-
进入 NebulaGraph 源代码目录
cd nebula
-
创建目录build并进入该目录。
mkdir build && cd build
-
使用 CMake 生成 makefile 文件。
cmake -DCMAKE_CXX_COMPILER=$TOOLSET_CLANG_DIR/bin/g++ -DCMAKE_C_COMPILER=$TOOLSET_CLANG_DIR/bin/gcc -DENABLE_WERROR=OFF -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=OFF ..
有关 CMake 的 更多信息,参见 CMake 参数。
-
执行编译命令。
# 根据服务器的空闲 CPU 核心数,设置合理的并行编译的线程数。比如,如果服务器有 2 个空闲 CPU 核心,可以设置为 make -j2。 make -j2
这将会开始编译 NebulaGraph,编译过程可能会花费一些时间,取决于用户的系统性能。
-
-
将生产的可执行文件和库文件安装到
/usr/local/nebula
目录下。编译成功后,在容器中的
/home/nebula/build
目录下将生成 NebulaGraph 的可执行文件和库文件。为了方便管理,我们可以将这些文件安装到/usr/local/nebula
目录下。执行以下命令:make install
完成以上步骤后,NebulaGraph 将会被同步编译并安装到宿主机的/usr/local/nebula
目录下。