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