Doris Docker 完整部署指南

Doris Docker 完整部署指南

目前在网上没找到一个好用的doris 本地安装教程,参考官网的教程,写了一docker版本,基于mac版本的
在这里插入图片描述

一、创建 Dockerfile

1.1 先克隆 Doris 源码到本地

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

# 创建目录
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:

# 创建构建目录
mkdir -p ~/doris-docker-build
cd ~/doris-docker-build
vim Dockerfile

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

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

参考 官网 : Doris Docker 快速搭建开发环境
提供我使用的模版

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 创建其他宿主机目录结构

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

# 创建 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 验证源码是否下载完成

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

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

三、构建镜像

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

注意事项:

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

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

# 使用代理构建(如果有代理)
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 首次启动容器

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 进入容器

docker exec -it doris-dev zsh

五、编译 Doris

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

cd ~/doris-src

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

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

5.2 编译产物位置

# FE 编译产物
~/doris-src/output/fe/

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

六、配置自动启动脚本

6.1 创建启动脚本

在容器内创建启动脚本:

# 进入容器
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)

# 在容器内执行
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

# 编辑 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

# 编辑 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 手动启动服务

# 方式1:使用启动脚本
~/start-doris.sh

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

8.2 停止服务

# 停止 FE
~/doris-src/output/fe/bin/stop_fe.sh

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

8.3 查看服务状态

# 查看进程
ps aux | grep doris

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

8.4 连接 Doris

# 使用 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

九、常用命令

# 进入容器
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

十、重新编译

# 进入容器
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 启动失败

# 查看 FE 日志
tail -f ~/logs/fe/fe.log
tail -f ~/logs/fe/fe.out

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

11.2 BE 启动失败

# 查看 BE 日志
tail -f ~/logs/be/be.INFO
tail -f ~/logs/be/be.out

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

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

# 检查 .zshrc 配置
cat ~/.zshrc | grep start-doris

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

十二、端口说明

服务端口说明
FE8030HTTP 端口(Web UI)
FE9030MySQL 协议端口
FE9010RPC 端口
BE8040HTTP 端口
BE9050Heartbeat 端口
BE9060RPC 端口
BE8060Brpc 端口

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

十三、备份与恢复

# 备份(在宿主机执行)
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.

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.

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

# 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piepis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值