Doris Docker 完整部署指南

Doris Docker 完整部署指南

目前在网上没找到一个好用的doris 本地安装教程,参考官网的教程,写了一docker版本,基于mac版本的

一、创建 Dockerfile

1.1 先克隆 Doris 源码到本地

重要:必须先下载源码,因为 Dockerfile 需要使用源码中的构建环境

bash 复制代码
# 创建目录
mkdir -p ~/doris-docker/doris-src
cd ~/doris-docker/doris-src

# 克隆 Doris 源码
git clone https://github.com/apache/doris.git
# 或使用国内镜像(如果 GitHub 较慢)
# git clone https://gitee.com/mirrors/doris.git

# 等待克隆完成后,进入源码目录
cd doris

1.2 创建 Dockerfile 文件

在 Doris 源码的 docker 目录中已经有构建环境的 Dockerfile,我们需要在外部创建一个自定义的 Dockerfile:

bash 复制代码
# 创建构建目录
mkdir -p ~/doris-docker-build
cd ~/doris-docker-build
vim Dockerfile

将以下内容复制到 Dockerfile 中(使用本地源码中的 Dockerfile 作为基础):

方式:直接使用 Doris 官方构建镜像并自定义(更简单)

参考 官网 : Doris Docker 快速搭建开发环境

提供我使用的模版

dockerfile 复制代码
FROM apache/doris:build-env-ldb-toolchain-latest

USER root
WORKDIR /root

# 设置 root 密码
RUN echo '123456' | passwd root --stdin

# 安装额外工具
RUN yum install -y vim net-tools man wget git mysql lsof bash-completion zsh sudo \
    && yum clean all

# 创建用户 ocsuser
RUN useradd -ms /bin/bash ocsuser \
    && echo '0)y^B5vD' | passwd ocsuser --stdin \
    && usermod -a -G wheel ocsuser \
    && echo 'ocsuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

# 切换到普通用户
USER ocsuser
WORKDIR /home/ocsuser

# 配置 Git
RUN git config --global color.ui true \
    && git config --global user.email "piepis@163.com" \
    && git config --global user.name "piepis"

# 配置 Maven(使用国内镜像加速)


# 安装并配置 zsh
USER root
RUN chsh -s /bin/zsh ocsuser

USER ocsuser
RUN wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - | zsh || true \
    && git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions || true \
    && git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting || true \
    && sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/' ~/.zshrc || true

WORKDIR /home/ocsuser

CMD ["/bin/zsh"]

推荐使用方式,因为 Doris 官方的构建镜像已经包含了所有编译所需的依赖。

保存并退出(:wq

二、准备工作

2.1 创建其他宿主机目录结构

源码目录已经在第一步创建了,现在创建其他需要的目录:

bash 复制代码
# 创建 Maven 缓存和数据目录(源码目录已经在第一步创建)
mkdir -p ~/doris-docker/.m2            # Maven 依赖缓存
mkdir -p ~/doris-docker/fe-data        # FE 数据目录
mkdir -p ~/doris-docker/be-data        # BE 数据目录
mkdir -p ~/doris-docker/logs           # 日志目录

2.2 验证源码是否下载完成

bash 复制代码
# 检查源码目录
ls -la ~/doris-docker/doris-src/doris/
# 应该能看到 fe、be、docker 等目录

# 查看 Doris 版本
cd ~/doris-docker/doris-src/doris
git branch

三、构建镜像

bash 复制代码
# 在 Dockerfile 所在目录执行
cd ~/doris-docker-build
docker build -t doris-dev:latest .

注意事项:

  • 首次构建可能需要较长时间(下载基础镜像和安装依赖)
  • 推荐使用方式的 Dockerfile(基于官方构建镜像),因为已包含所有编译依赖
  • 如果 GitHub 访问较慢,可以配置 Docker 代理或使用国内镜像源
  • 构建完成后可以使用 docker images 查看镜像

如果构建失败,可以尝试:

bash 复制代码
# 使用代理构建(如果有代理)
docker build --build-arg HTTP_PROXY=http://your-proxy:port \
             --build-arg HTTPS_PROXY=http://your-proxy:port \
             -t doris-dev:latest .

# 或者跳过 oh-my-zsh 安装(手动安装)
# 修改 Dockerfile,在 zsh 安装命令后添加 || true

四、运行容器(推荐方式)

4.1 首次启动容器

bash 复制代码
docker run -dit \
  --name doris-dev \
  --restart=always \
  --network host \
  -v ~/doris-docker/doris-src/doris:/home/ocsuser/doris-src \
  -v ~/doris-docker/.m2:/home/ocsuser/.m2 \
  -v ~/doris-docker/fe-data:/home/ocsuser/fe-data \
  -v ~/doris-docker/be-data:/home/ocsuser/be-data \
  -v ~/doris-docker/logs:/home/ocsuser/logs \
  doris-dev:latest \
  /bin/zsh

重要说明:

  • 注意源码挂载路径是 ~/doris-docker/doris-src/doris(包含 doris 子目录)
  • 这样容器内的 /home/ocsuser/doris-src 就是 Doris 源码根目录

参数说明:

  • -dit: 后台运行并分配终端
  • --name doris-dev: 容器名称
  • --restart=always: 容器自动重启(包括 Docker 重启后)
  • --network host: 使用宿主机网络(无需端口映射)
  • -v: 挂载目录到容器

4.2 进入容器

bash 复制代码
docker exec -it doris-dev zsh

五、编译 Doris

5.1 首次编译(在容器内执行)

bash 复制代码
cd ~/doris-src

# 编译 FE 和 BE(首次编译会下载依赖,耗时较长)
sh build.sh --clean

# 或分别编译
# sh build.sh --fe --clean    # 只编译 FE
# sh build.sh --be --clean    # 只编译 BE

5.2 编译产物位置

bash 复制代码
# FE 编译产物
~/doris-src/output/fe/

# BE 编译产物
~/doris-src/output/be/

六、配置自动启动脚本

6.1 创建启动脚本

在容器内创建启动脚本:

bash 复制代码
# 进入容器
docker exec -it doris-dev zsh

# 创建 FE 启动脚本
cat > ~/start-fe.sh << 'EOF'
#!/bin/bash
FE_HOME=/home/ocsuser/doris-src/output/fe
if [ -d "$FE_HOME" ]; then
    echo "Starting Doris FE..."
    cd $FE_HOME
    ./bin/start_fe.sh --daemon
    echo "FE started"
else
    echo "FE not found at $FE_HOME, please compile first"
fi
EOF

# 创建 BE 启动脚本
cat > ~/start-be.sh << 'EOF'
#!/bin/bash
BE_HOME=/home/ocsuser/doris-src/output/be
if [ -d "$BE_HOME" ]; then
    echo "Starting Doris BE..."
    cd $BE_HOME
    ./bin/start_be.sh --daemon
    echo "BE started"
else
    echo "BE not found at $BE_HOME, please compile first"
fi
EOF

# 创建统一启动脚本
cat > ~/start-doris.sh << 'EOF'
#!/bin/bash
echo "=== Starting Doris Services ==="
bash ~/start-fe.sh
sleep 5
bash ~/start-be.sh
echo "=== Doris Services Started ==="
EOF

# 赋予执行权限
chmod +x ~/start-fe.sh ~/start-be.sh ~/start-doris.sh

6.2 配置自动启动(添加到 .zshrc)

bash 复制代码
# 在容器内执行
cat >> ~/.zshrc << 'EOF'

# Auto start Doris FE and BE
if [ -f ~/start-doris.sh ]; then
    ~/start-doris.sh
fi
EOF

# 使配置生效
source ~/.zshrc

七、配置 Doris

7.1 初次配置 FE

bash 复制代码
# 编辑 FE 配置文件
vim ~/doris-src/output/fe/conf/fe.conf

# 关键配置项(根据需要调整):
# meta_dir = /home/ocsuser/fe-data/doris-meta
# sys_log_dir = /home/ocsuser/logs/fe
# priority_networks = 127.0.0.1/32  # 或你的实际网段

7.2 初次配置 BE

bash 复制代码
# 编辑 BE 配置文件
vim ~/doris-src/output/be/conf/be.conf

# 关键配置项(根据需要调整):
# storage_root_path = /home/ocsuser/be-data/storage
# sys_log_dir = /home/ocsuser/logs/be
# priority_networks = 127.0.0.1/32  # 或你的实际网段

八、启动和管理

8.1 手动启动服务

bash 复制代码
# 方式1:使用启动脚本
~/start-doris.sh

# 方式2:分别启动
~/start-fe.sh
~/start-be.sh

8.2 停止服务

bash 复制代码
# 停止 FE
~/doris-src/output/fe/bin/stop_fe.sh

# 停止 BE
~/doris-src/output/be/bin/stop_be.sh

8.3 查看服务状态

bash 复制代码
# 查看进程
ps aux | grep doris

# 查看日志
tail -f ~/logs/fe/fe.log
tail -f ~/logs/be/be.INFO

8.4 连接 Doris

bash 复制代码
# 使用 MySQL 客户端连接(默认端口 9030)
mysql -h 127.0.0.1 -P 9030 -u root

# 添加 BE 节点(首次需要)
ALTER SYSTEM ADD BACKEND "127.0.0.1:9050";

# 查看 BE 状态
SHOW BACKENDS\G

九、常用命令

bash 复制代码
# 进入容器
docker exec -it doris-dev zsh

# 查看容器日志
docker logs doris-dev

# 重启容器(会自动启动 FE/BE)
docker restart doris-dev

# 停止容器
docker stop doris-dev

# 启动容器
docker start doris-dev

# 删除容器(保留数据)
docker rm -f doris-dev

十、重新编译

bash 复制代码
# 进入容器
docker exec -it doris-dev zsh

# 停止服务
~/doris-src/output/fe/bin/stop_fe.sh
~/doris-src/output/be/bin/stop_be.sh

# 清理并重新编译
cd ~/doris-src
sh build.sh --clean

# 启动服务
~/start-doris.sh

十一、故障排查

11.1 FE 启动失败

bash 复制代码
# 查看 FE 日志
tail -f ~/logs/fe/fe.log
tail -f ~/logs/fe/fe.out

# 检查端口占用
lsof -i:9030
lsof -i:8030

11.2 BE 启动失败

bash 复制代码
# 查看 BE 日志
tail -f ~/logs/be/be.INFO
tail -f ~/logs/be/be.out

# 检查端口占用
lsof -i:9050
lsof -i:8040

11.3 容器重启后服务未自动启动

bash 复制代码
# 检查 .zshrc 配置
cat ~/.zshrc | grep start-doris

# 手动启动
~/start-doris.sh

十二、端口说明

服务 端口 说明
FE 8030 HTTP 端口(Web UI)
FE 9030 MySQL 协议端口
FE 9010 RPC 端口
BE 8040 HTTP 端口
BE 9050 Heartbeat 端口
BE 9060 RPC 端口
BE 8060 Brpc 端口

由于使用 --network host,这些端口直接绑定在宿主机上。

十三、备份与恢复

bash 复制代码
# 备份(在宿主机执行)
tar -czf doris-backup-$(date +%Y%m%d).tar.gz ~/doris-docker/

# 恢复(在宿主机执行)
tar -xzf doris-backup-20240101.tar.gz -C ~/

QA

ERROR: The JAVA version is 8, it must be JDK-17.

bash 复制代码
sh-4.2$ pwd
/home/ocsuser/doris-src
sh-4.2$ sh build.sh --fe --clean
Target system: Linux; Target arch: x86_64
Python 2.7.5
Check JAVA_HOME version
JAVA_HOME=/usr/lib/jvm/java-1.8.0. It does not point to JDK-17.
The 'JDK_17' environment variable is not set.
ERROR: The JAVA version is 8, it must be JDK-17.

现在请在容器中执行以下命令:

bash 复制代码
# 1. 切换到 root 用户
sudo su -

# 2. 下载 OpenJDK 17(使用华为云镜像,国内速度快)
cd /tmp
wget https://mirrors.huaweicloud.com/openjdk/17.0.2/openjdk-17.0.2_linux-x64_bin.tar.gz

# 3. 解压到 /usr/local
tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/
ln -s /usr/local/jdk-17.0.2 /usr/local/jdk-17

# 4. 清理
rm -f openjdk-17.0.2_linux-x64_bin.tar.gz

# 5. 退出 root
exit

# 6. 配置环境变量
echo 'export JAVA_HOME=/usr/local/jdk-17' >> ~/.zshrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

# 7. 验证安装
java -version
echo $JAVA_HOME

# 8. 开始编译
cd ~/doris-src
sh build.sh --fe --clean
sh build.sh --be --clean
相关推荐
sg_knight6 小时前
Docker 实战:如何限制容器的内存使用大小
java·spring boot·spring·spring cloud·docker·容器·eureka
电棍2336 小时前
在docker a100云服务器运行vulkan->sapien->robotwin的经验(报错segmentation fault)
运维·docker·容器
墨倾许11 小时前
《Windows 11 + Docker:极简DVWA靶场搭建全记录》—— 附详细排错指南与最终解决方案
windows·笔记·网络安全·docker·容器·靶场
岚天start11 小时前
解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器
服务器·docker·kubernetes·shell·日志备份
微学AI11 小时前
内网穿透的应用-摆脱局域网!Stable Diffusion3.5 结合cpolar使用更方便
docker·stable diffusion·内网穿透
梁萌12 小时前
linux中使用docker安装MySQL
linux·运维·docker·容器·mysql安装
晨晖212 小时前
docker打包,启动java程序
java·docker·容器
文言一心12 小时前
SenseVoice 离线部署指南(Xinference Docker v1.12)
运维·docker·ai·容器
AIchiNiurou12 小时前
mermaid install for free docker
运维·docker·容器