本文基于 apache/doris 官方运行时镜像
fe-4.1.3+be-4.1.3,正文默认 Linux(host 网络) ;另设 macOS bridge 专节。Compose 与验证命令可直接复用。
业务看板要秒级刷新、运营要按用户/订单做多维下钻,用传统行存库扛聚合又慢又贵;把整仓扔公有云分析服务,又担心成本与数据出境------很多团队会把目光投向可自托管的实时数仓。Apache Doris 正是为此而生:它是 Apache 软件基金会旗下的开源 MPP 实时分析型数据库 ,以「极致速度 + 易用」为卖点------在海量数据上常能做到亚秒级 查询响应,同一套系统既能扛高并发点查 (如按主键查明细、画像),也能做高吞吐复杂分析 (多表 Join、宽表聚合、实时报表)。对运维与研发更友好的是:它高度兼容 MySQL 协议与 ANSI SQL 风格 ,现有的 mysql 客户端、JDBC、DBeaver、各类 BI 往往改连接串就能用;内置 FE Web(默认 8030)可直接写 SQL、看节点与日志,不必先搭一整套外围工具。
架构上 Doris 把职责拆成 FE(Frontend) 与 BE(Backend) :FE 负责接收 SQL、解析规划、管理元数据与节点;BE 负责数据存储与计算执行。生产可多 FE / 多 BE 做高可用,本文用 Docker 先跑通最小形态------1 FE + 1 BE。存算一体之外,新版本也支持存算分离等架构,可按业务规模再演进。典型落地包括:对内/对外实时大盘、用户行为与漏斗分析、A/B 实验、日志与可观测分析,以及湖仓联邦查询加速等。
本文用 轩辕镜像 加速,在 Linux 上用 Docker Compose 拉起 1 FE + 1 BE :固定标签、验证集群 Alive,再用 Web(8030) 与 MySQL 协议(9030) 建库查数。
镜像页见 apache/doris,官方快速入门见 Doris Quick Start,项目主页 doris.apache.org、仓库 apache/doris。
定位说明 :官方明确 Docker Quick Start 偏 本地开发 / 体验 ;默认 Compose 未挂数据卷 ,
docker compose down后数据可能丢失。生产请按官方「本地完整部署」或多节点方案规划。
一、Apache Doris 是什么?
Apache Doris 是基于 MPP 架构的开源实时分析型数据库,以极致速度与易用性著称:海量数据下可提供亚秒级查询,同时覆盖高并发点查与高吞吐复杂分析。高度兼容 MySQL 协议,可用 mysql 客户端、JDBC、DBeaver 等直接连接。
| 能力 | 说明 |
|---|---|
| MPP + 向量化 | FE 管元数据与规划,BE 存算执行 |
| MySQL 协议 | 默认查询端口 9030,学习成本低 |
| Web UI | FE 8030 内置登录、Playground、System、Log 等 |
| 场景 | 实时报表、用户行为、湖仓加速、日志与可观测分析 |
架构示意(本文单机 1 FE + 1 BE):
text
浏览器 ──HTTP:8030──▶ FE(元数据 / SQL 入口)
mysql / DBeaver ──MySQL:9030──▶ FE
FE ──心跳 / 调度──▶ BE(存储与计算)
1.1 标签怎么选(必看)
apache/doris 不是 一个 latest 就能跑,标签按角色拆分:
| 标签前缀 | 用途 | 本文是否使用 |
|---|---|---|
fe-x.y.z |
Frontend | 要 (fe-4.1.3) |
be-x.y.z |
Backend | 要 (be-4.1.3,与 FE 同版本) |
broker-x.y.z |
外部存储 Broker | 快速体验不需要 |
ms-x.y.z |
存算分离 MetaService | 不需要 |
operator-x.y.z |
K8s Operator | 不需要 |
build-env-* |
源码编译环境,不能当运行时 | 不要 |
*-latest |
浮动标签 | 文稿 / 复现 不推荐 |
更多标签见 标签列表。
1.2 Doris 和 ClickHouse 有什么区别?
两者都是主流 OLAP,但定位不同:
| Apache Doris | ClickHouse | |
|---|---|---|
| 架构 | MPP,FE + BE 分角色,偏「一套数据库产品」 | 单节点即可很强,也可分片;偏「分析引擎」 |
| SQL / 接入 | 高度兼容 MySQL 协议,BI / JDBC 几乎开箱 | 自有协议 + HTTP;也有 MySQL 兼容层,习惯不同 |
| 典型场景 | 实时报表、高并发点查 + 复杂分析、湖仓、面向业务的实时数仓 | 日志 / 埋点 / 指标海量写入与宽表聚合、可观测 |
| 更新 | Unique / Aggregate 等模型,行级更新相对友好 | 偏追加写;更新删除有代价,近年在加强 |
| Docker 形态 | 至少 两个镜像(fe + be) | 常 一个容器 就能玩 |
怎么选:
- 要 MySQL 兼容、报表 / BI、点查与分析一体、团队更熟关系库 → 优先 Doris
- 要日志指标狂写狂聚合、单机压榨吞吐 → 优先 ClickHouse
- 可并存:ClickHouse 扛流水,Doris 做面向业务的实时数仓。本仓库另有 ClickHouse Docker 部署教程。
二、环境要求
| 项目 | 建议 |
|---|---|
| 操作系统 | Linux x86_64(正文默认;Ubuntu 等均可) |
| Docker | Docker Engine + Compose V2 (docker compose) |
| 内存 | 建议 ≥ 8 GB 可用(FE+BE 同机体验) |
| CPU | amd64 必须支持 AVX2(约 Intel 4 代 Haswell / 2013 年后常见 i5 多数支持) |
| 磁盘 | 镜像合计数 GB 级 + 数据增长 |
| 端口 | 8030 (FE Web)、9030(MySQL)、另有 9010/9050 等集群内部端口 |
| 工作目录 | /data/doris(示例) |
bash
docker --version
docker compose version
未装 Docker 可用轩辕一键脚本:
bash
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
更多见 轩辕镜像使用手册。
2.1 部署前自检 AVX2(强烈建议)
官方说明:amd64 运行时镜像 仅支持带 AVX2 的 CPU ;无 AVX2 需按 Doris docker/runtime 自建镜像。
bash
grep -o 'avx2' /proc/cpuinfo | head -1 || echo 'AVX2 NOT found'
| 结果 | 说明 |
|---|---|
有 avx2 |
可继续拉取与启动 |
AVX2 NOT found |
不要硬启动官方 fe/be;换机或自建 no-avx2 镜像 |
三、拉取镜像
本文固定成对标签 fe-4.1.3 + be-4.1.3 。不要拉 build-env-*。
bash
docker pull docker.xuanyuan.run/apache/doris:fe-4.1.3
docker pull docker.xuanyuan.run/apache/doris:be-4.1.3
实测完整输出(节选):
text
fe-4.1.3: Pulling from apache/doris
...
Digest: sha256:3dd47644cd9fa8152028bdae449e77170ab0de004bd7a3fa311a204a106c26c7
Status: Downloaded newer image for docker.xuanyuan.run/apache/doris:fe-4.1.3
docker.xuanyuan.run/apache/doris:fe-4.1.3
be-4.1.3: Pulling from apache/doris
...
Digest: sha256:9f84a8b018069cd3c9a65af42ff5ef2c733b3b25e1ca708e0a3e4078361a1eb3
Status: Downloaded newer image for docker.xuanyuan.run/apache/doris:be-4.1.3
docker.xuanyuan.run/apache/doris:be-4.1.3
国内建议全程使用
docker.xuanyuan.run。需登录时见 登录认证说明。
四、Linux 部署(正文默认)
与官方 start-doris.sh 在 Linux 上的行为一致:使用 network_mode: host ,FE/BE 通过 127.0.0.1 互通。
4.1 创建目录与 compose 文件
bash
mkdir -p /data/doris
cd /data/doris
vim docker-compose.yml
内容:
yaml
services:
fe:
image: docker.xuanyuan.run/apache/doris:fe-4.1.3
hostname: fe
environment:
- FE_SERVERS=fe1:127.0.0.1:9010
- FE_ID=1
network_mode: host
be:
image: docker.xuanyuan.run/apache/doris:be-4.1.3
hostname: be
environment:
- FE_SERVERS=fe1:127.0.0.1:9010
- BE_ADDR=127.0.0.1:9050
depends_on:
- fe
network_mode: host
| 配置项 | 说明 |
|---|---|
FE_SERVERS |
FE 列表,名称:IP:edit_log_port |
FE_ID=1 |
单 FE 场景固定为 1 |
BE_ADDR |
本机 BE 心跳地址 IP:9050 |
network_mode: host |
Linux 下 FE/BE 共用宿主机网络栈,端口直接落在宿主机 |
不要 把下文 macOS 的
172.20.80.x配置抄到 Linux host 模式里混用。
4.2 启动
bash
docker compose up -d
docker compose ps
docker compose logs --tail=50
期望两个服务均为 Up 。首次启动请 等待 1~2 分钟 再验证(FE/BE 注册与心跳需要时间)。
五、验证与使用(Linux)
5.1 MySQL 协议验证(9030)
本机已装 mysql 客户端时:
bash
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `join`, `alive` FROM frontends()'
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `alive` FROM backends()'
未安装客户端时,可用临时容器(建议轩辕拉取,避免直连 Docker Hub 超时):
bash
docker run --rm -it docker.xuanyuan.run/library/mysql:8.0 \
mysql -uroot -P9030 -h127.0.0.1 \
-e 'SELECT `host`, `join`, `alive` FROM frontends()'
docker run --rm -it docker.xuanyuan.run/library/mysql:8.0 \
mysql -uroot -P9030 -h127.0.0.1 \
-e 'SELECT `host`, `alive` FROM backends()'
若
library/mysql坐标在你环境不可用,可试docker.xuanyuan.run/mysql:8.0(实测可用)。
期望:FE 的 Join / Alive 为 true ;BE 的 Alive 为 1 (或 true,视版本输出而定)。
也可交互进入:
bash
mysql -uroot -P9030 -h127.0.0.1
# 或
docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
mysql -uroot -P9030 -h127.0.0.1
sql
SHOW FRONTENDS\G
SHOW BACKENDS\G
5.2 建库建表冒烟
sql
CREATE DATABASE demo;
USE demo;
CREATE TABLE mytable (
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.05",
k3 CHAR(10),
k4 INT NOT NULL DEFAULT "1"
)
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES ("replication_num" = "1");
INSERT INTO mytable VALUES
(1, 0.14, 'a1', 20),
(2, 1.04, 'b2', 21);
SELECT * FROM demo.mytable;
期望返回 2 行。单机体验请保持 replication_num = 1(只有一个 BE)。
5.3 默认账号与改密
| 项 | 值 |
|---|---|
| 用户 | root |
| 初始密码 | 空(不填) |
| Web | http://<服务器IP>:8030 |
| MySQL | <服务器IP>:9030 |
建议立刻改密(须在 MySQL 客户端执行 ;内置 Web 不能 执行 SET 类语句):
sql
SET PASSWORD FOR 'root' = PASSWORD('你的强密码');
5.4 浏览器 Web UI(8030)
打开(把 IP 换成你的服务器):
text
http://<服务器IP>:8030/login
用户名 root,密码初始为空(若已改密则填新密码),点 Login。

图 1:FE Web 登录页(http://服务器IP:8030/login),默认 root / 空密码
登录后可在 System 查看版本与硬件信息(版本类似 doris-4.1.3-rc02):

图 2:System --- 版本、主机名、内存与磁盘等环境信息
System 下还有类似 /proc 的 System Info 索引(frontends、backends、dbs 等),便于点选查看集群状态:

图 3:System Info --- 集群诊断入口列表
打开 Playground,可在浏览器里写 SQL(左侧为库表树,中间为编辑器):

图 4:Playground --- 内置 SQL 编辑器
例如验证 FE 状态:
sql
SELECT host, join, alive FROM frontends()
执行成功后可见 Alive = true:

图 5:Playground 查询 frontends(),Join / Alive 为 true
Log 页可在线查看 FE 日志(路径类似 /opt/apache-doris/fe/log/fe.warn.log):

图 6:Log --- 浏览器查看 FE 告警 / 错误日志
QueryProfile 可查看已完成查询画像(刚部署时常为空):

图 7:QueryProfile --- 已完成查询列表(初期可为空)
Session 查看当前会话:

图 8:Session --- 会话列表
Configuration 可浏览 FE 配置项(条目很多,便于核对参数):

图 9:Configuration --- FE 配置一览
六、macOS 部署(专节)
Docker Desktop(Mac)上 network_mode: host 基本不可用 ,请改用官方 Quick Start 同思路的 bridge + 固定 IP ,并做端口映射。与 Linux 配置 不能混用。
6.1 macOS Compose
yaml
networks:
doris_net:
driver: bridge
ipam:
config:
- subnet: 172.20.80.0/24
services:
fe:
image: docker.xuanyuan.run/apache/doris:fe-4.1.3
hostname: fe
ports:
- "8030:8030"
- "9030:9030"
- "9010:9010"
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- FE_ID=1
networks:
doris_net:
ipv4_address: 172.20.80.2
be:
image: docker.xuanyuan.run/apache/doris:be-4.1.3
hostname: be
ports:
- "8040:8040"
- "9050:9050"
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- BE_ADDR=172.20.80.3:9050
depends_on:
- fe
networks:
doris_net:
ipv4_address: 172.20.80.3
bash
docker compose up -d
# 等 1~2 分钟
6.2 macOS 验证差异
| 项 | Linux | macOS |
|---|---|---|
| 网络 | host + 127.0.0.1 |
bridge 172.20.80.0/24 |
| FE / BE 地址 | 127.0.0.1 |
172.20.80.2 / 172.20.80.3 |
| 端口映射 | 不需要 | 需要 |
| mysql 从容器连 | -h127.0.0.1 |
常用 -hhost.docker.internal |
| Web | http://127.0.0.1:8030 或局域网 IP |
同左(已映射 8030) |
bash
docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
mysql -uroot -P9030 -hhost.docker.internal \
-e 'SELECT `host`, `join`, `alive` FROM frontends()'
docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
mysql -uroot -P9030 -hhost.docker.internal \
-e 'SELECT `host`, `alive` FROM backends()'
实测期望示例:FE host=172.20.80.2 且 Alive;BE host=172.20.80.3 且 Alive=1。Web 登录与 Playground 步骤同 §五(上文截图即在 macOS bridge 环境采集)。
七、日常运维
bash
cd /data/doris # 或你的 compose 目录
docker compose ps
docker compose logs -f --tail=100
docker compose restart
docker compose down # 停止;默认未挂卷时数据可能丢失
docker compose up -d
日常用法简述:
docker compose up -d启动- 浏览器打开
http://IP:8030写 SQL,或用 mysql / DBeaver 连IP:9030 - 用完可
docker compose down
升级:同步改 FE/BE 镜像标签为同一版本 → docker compose pull && docker compose up -d。
八、FAQ
Q:可以只拉一个镜像吗?
A:快速体验至少需要 成对的 fe-x.y.z 与 be-x.y.z 。build-env-* 是编译环境,不能当数据库跑。
Q:容器起来了但 BE Alive 一直不对?
A:多等 1~2 分钟;确认 FE/BE 同版本 ;Linux 用 host + 127.0.0.1,macOS 用 bridge 固定 IP,不要混用 。看 FE Log(图 6)是否有 No backend available 一类报错。
Q:本机提示 zsh: command not found: mysql?
A:未装客户端。用临时容器连接(见 §5.1 / §6.2),或 brew install mysql-client(macOS)。
Q:拉 mysql:8.0 超时?
A:国内请走轩辕,例如 docker.xuanyuan.run/mysql:8.0,勿直连 registry-1.docker.io。
Q:Web 默认密码是什么?
A:root / 空密码 。改密用 MySQL 客户端执行 SET PASSWORD;Web 不能执行 SET。
Q:CPU 是 i5 能跑吗?
A:关键是 有没有 AVX2,不是牌子。约 4 代及以后的桌面 i5 多数可以;用 §2.1 命令自检。
Q:Docker 部署适合生产吗?
A:官方认为 Quick Start Docker 不适合生产(易丢数据、单副本等)。生产请参考官方完整部署 / 多节点 / K8s Operator。
Q:和 ClickHouse 怎么选?
A:见 §1.2。需要 MySQL 协议与「数仓产品」体验偏 Doris;日志指标狂写偏 ClickHouse。
九、命令速查
bash
# 拉取
docker pull docker.xuanyuan.run/apache/doris:fe-4.1.3
docker pull docker.xuanyuan.run/apache/doris:be-4.1.3
# Linux 启动
cd /data/doris
docker compose up -d
docker compose ps
# 验证
mysql -uroot -P9030 -h127.0.0.1 -e 'SHOW FRONTENDS'
mysql -uroot -P9030 -h127.0.0.1 -e 'SHOW BACKENDS'
# Web
# http://<IP>:8030
# 停止
docker compose down
十、延伸阅读
- 轩辕镜像页:apache/doris
- 标签列表:apache/doris tags
- 官方快速入门:5 分钟快速入门
- 官方网站:doris.apache.org
- GitHub:apache/doris
- 轩辕使用手册:xuanyuan.cloud/usage
- 同系列:ClickHouse Docker 部署