该文档主要介绍了如何通过 Dockerfile 来制作 Apache Doris 的运行镜像,以便于在容器化编排工具或者快速测试过程中可迅速拉取一个 Apache Doris Image 来完成集群的创建和运行。
提示
目前还不支持存算分离模式编译部署
软硬件要求
概述
Docker 镜像在制作前要提前准备好制作机器,该机器的平台架构决定了制作以后的 Docker Image 适用的平台架构,如 X86_64 机器,需要下载 X86_64 的 Doris 二进制程序,制作以后的 Image 仅可在 X86_64 平台上运行。ARM64 平台同理。
硬件要求
推荐配置:4 核 16GB 内存
软件要求
Docker Version:20.10 及以后版本
Image 构建
构建前注意
Dockerfile 脚本编写注意
- 基础父镜像选用经过 Docker-Hub 认证的 OpenJDK 官方镜像,版本用 JDK 1.8 版本,推荐基础父镜像:openjdk:8u342-jdk;
- 需要内嵌脚本来完成 FE 的启动、多 FE 注册、状态检查和 BE 的启动、注册 BE 至 FE、状态检查等任务流程;
- 应用程序在 Docker 内启动时不建议使用
--daemon的方式启动,否则在 K8s 等编排工具部署过程中会有异常。
构建方式
编译 Docker Image 的 Dockerfile 脚本中,关于 Apache Doris 程序二进制包的加载方式,有两种:
- 通过 wget / curl 在编译时执行下载命令,随后完成 Docker Build 制作过程
- 提前下载二进制包至编译目录,然后通过 ADD 或者 COPY 命令加载至 Docker Build 过程中
使用前者会让 Docker Image Size 更小,但是如果构建失败的话可能下载操作会重复进行,导致构建时间过长,而后者更适用于网络环境不是很好的构建环境。这里以第二种方式进行示例。
构建 FE 镜像
- 构建 FE 镜像的环境目录
构建环境目录如下
1. └── docker-build // 构建根目录
2. └── fe // Doris 构建目录
3. ├── dockerfile // Dockerfile 脚本
4. └── resource // 资源目录
5. ├── init_fe.sh // FE 启动及注册脚本
6. └── apache-doris-2.0.3-bin.tar.gz // 二进制程序包
- 下载二进制包
下载官方二进制包/编译的二进制包,然后覆盖./docker-build/fe/resource中的 apache-doris 安装包。
- 编写 Dockerfile
1. # 选择基础镜像
2. FROM openjdk:8u342-jdk
4. # 设置环境变量
5. ENV JAVA_HOME="/usr/local/openjdk-8/"
6. ENV PATH="/opt/apache-doris/fe/bin:$PATH"
8. # 下载软件至镜像内,可根据需要替换
9. ADD ./resource/apache-doris-2.0.3-bin.tar.gz /opt/
11. RUN apt-get update && \
12. apt-get install -y default-mysql-client && \
13. apt-get clean && \
14. mkdir /opt/apache-doris && \
15. cd /opt && \
16. mv apache-doris-2.0.3-bin/fe /opt/apache-doris/
18. ADD ./resource/init_fe.sh /opt/apache-doris/fe/bin
19. RUN chmod 755 /opt/apache-doris/fe/bin/init_fe.sh
21. ENTRYPOINT ["/opt/apache-doris/fe/bin/init_fe.sh"]
- 编写后命名为
Dockerfile并保存至./docker-build/fe目录下 -
FE 的执行脚本 init_fe.sh 的内容可以参考 Doris 源码库中的 init_fe.sh 的内容
-
执行构建
需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:2.0.3-fe
1. cd ./docker-build/fe
2. docker build . -t ${fe-tagName}
构建 BE 镜像
- 构建环境目录如下:
1. └── docker-build // 构建根目录
2. └── be // BE 构建目录
3. ├── dockerfile // dockerfile 脚本
4. └── resource // 资源目录
5. ├── init_be.sh // 启动及注册脚本
6. └── apache-doris-2.0.3-bin.tar.gz // 二进制程序包
- 编写 BE 的 Dockerfile 脚本
1. # 选择基础镜像
2. FROM openjdk:8u342-jdk
4. # 设置环境变量
5. ENV JAVA_HOME="/usr/local/openjdk-8/"
6. ENV PATH="/opt/apache-doris/be/bin:$PATH"
8. # 下载软件至镜像内,可根据需要替换
9. ADD ./resource/apache-doris-2.0.3-bin.tar.gz /opt/
11. RUN apt-get update && \
12. apt-get install -y default-mysql-client && \
13. apt-get clean && \
14. mkdir /opt/apache-doris && \
15. cd /opt && \
16. mv apache-doris-2.0.3-bin/be /opt/apache-doris/
18. ADD ./resource/init_be.sh /opt/apache-doris/be/bin
19. RUN chmod 755 /opt/apache-doris/be/bin/init_be.sh
21. ENTRYPOINT ["/opt/apache-doris/be/bin/init_be.sh"]
- 编写后命名为
Dockerfile并保存至./docker-build/be目录下 -
编写 BE 的执行脚本,可参考复制 init_be.sh 的内容
-
执行构建
需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:2.0.3-be
1. cd ./docker-build/be
2. docker build . -t ${be-tagName}
推送镜像至 DockerHub 或私有仓库
登录 DockerHub 账号
1. docker login
登录成功会提示 Success 相关提示,随后推送至仓库即可
1. docker push ${tagName}
部署 Docker 集群
这里将简述如何通过 docker run 或 docker-compose up 命令快速构建一套完整的 Doris 测试集群。
在生产环境上,当前尽量避免使用容器化的方案进行 Doris 部署,在 K8s 中部署 Doris,请采用 Doris Operator 来部署。
前期环境准备
软件环境
| 软件 | 版本 |
|---|---|
| Docker | 20.0 及以上 |
| docker-compose | 20.1 及以上 |
硬件环境
| 配置类型 | 硬件信息 | 最大运行集群规模 |
|---|---|---|
| 最低配置 | 2C 4G | 1FE 1BE |
| 推荐配置 | 4C 16G | 3FE 3BE |
在宿主机执行如下命令
1. sysctl -w vm.max_map_count=2000000
Docker Compose
不同平台需要使用不同 Image 镜像,本篇以 X86_64 平台为例。
网络模式说明
Doris Docker 适用的网络模式有两种。
- 适合跨多节点部署的 HOST 模式,这种模式适合每个节点部署 1 FE 1 BE。
- 适合单节点部署多 Doris 进程的子网网桥模式,这种模式适合单节点部署(推荐),若要多节点混部需要做更多组件部署(不推荐)。
为便于展示,本章节仅演示子网网桥模式编写的脚本。
接口说明
从 Apache Doris 2.0.3 Docker Image 版本起,各个进程镜像接口列表如下:
| 进程名 | 接口名 | 接口定义 | 接口示例 |
|---|---|---|---|
| FE | BE | BROKER | FE_SERVERS |
| FE | FE_ID | FE 节点 ID | 1 |
| BE | BE_ADDR | BE 节点主要信息 | 172.20.80.5:9050 |
| BE | NODE_ROLE | BE 节点类型 | computation |
注意,以上接口必须填写信息,否则进程无法启动。
提示
- FE_SERVERS 接口规则为:
FE_NAME:FE_HOST:FE_EDIT_LOG_PORT[,FE_NAME:FE_HOST:FE_EDIT_LOG_PORT] - FE_ID 接口规则为:
1-9的整数,其中1号 FE 为 Master 节点。 - BE_ADDR 接口规则为:
BE_HOST:BE_HEARTBEAT_SERVICE_PORT - NODE_ROLE 接口规则为:
computation或为空,其中为空或为其他值时表示节点类型为mix类型 - BROKER_ADDR 接口规则为:
BROKER_HOST:BROKER_IPC_PORT
脚本模板
1. Docker Run 命令
1 FE & 1 BE 命令模板
注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网 IP
1. docker run -itd \
2. --name=fe \
3. --env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
4. --env FE_ID=1 \
5. -p 8030:8030 \
6. -p 9030:9030 \
7. -v /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
8. -v /data/fe/log:/opt/apache-doris/fe/log \
9. --net=host \
10. apache/doris:2.0.3-fe-x86_64
12. docker run -itd \
13. --name=be \
14. --env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
15. --env BE_ADDR="${当前机器的内网IP}:9050" \
16. -p 8040:8040 \
17. -v /data/be/storage:/opt/apache-doris/be/storage \
18. -v /data/be/log:/opt/apache-doris/be/log \
19. --net=host \
20. apache/doris:2.0.3-be-x86_64
备注
3 FE & 3 BE Run 命令模板如有需要点击此处访问下载。
2. Docker Compose 脚本
1 FE & 1 BE 模板
注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网 IP
1. version: "3"
2. services:
3. fe:
4. image: apache/doris:2.0.3-fe-x86_64
5. hostname: fe
6. environment:
7. - FE_SERVERS=fe1:${当前机器的内网IP}:9010
8. - FE_ID=1
9. volumes:
10. - /data/fe/doris-meta/:/opt/apache-doris/fe/doris-meta/
11. - /data/fe/log/:/opt/apache-doris/fe/log/
12. network_mode: host
13. be:
14. image: apache/doris:2.0.3-be-x86_64
15. hostname: be
16. environment:
17. - FE_SERVERS=fe1:${当前机器的内网IP}:9010
18. - BE_ADDR=${当前机器的内网IP}:9050
19. volumes:
20. - /data/be/storage/:/opt/apache-doris/be/storage/
21. - /data/be/script/:/docker-entrypoint-initdb.d/
22. depends_on:
23. - fe
24. network_mode: host
备注
3 FE & 3 BE Docker Compose 脚本模板如有需要点击此处访问下载。
部署 Doris Docker
部署方式二选一即可:
- 执行
docker run命令创建集群 - 保存
docker-compose.yaml脚本,同目录下执行docker-compose up -d命令创建集群
