Apache DolphinScheduler Docker 部署指南:三种方式快速启动与配置详解
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler
导读
本文围绕 Apache DolphinScheduler 的 Docker 部署展开,系统讲解三种启动方式:使用standalone-server镜像快速体验、使用docker-compose启动完整服务、以及沿用已有 PostgreSQL 与 ZooKeeper 基础设施分别启动各服务容器。读完本文,你将掌握 DolphinScheduler 全部 Docker 部署命令、关键环境变量与端口映射、数据库初始化流程(upgrade-schema.sh)的底层原理,并能根据自身场景(快速尝鲜、长期稳定运行、复用已有基础组件)做出正确的部署选型。
前置条件
在开始任何 Docker 部署之前,需要先在本机安装以下工具:
- Docker:1.13.1 及以上版本,参考 Docker Engine 安装文档;
- Docker Compose:1.28.0 及以上版本,参考 Docker Compose 安装文档,链接适用于 Mac、Linux、Windows。
提示:如果通过 docker-compose 启动服务,建议为 Docker 守护进程分配不少于 4GB 的空闲内存,以保证各服务组件(API、Master、Worker、Alert、PostgreSQL、ZooKeeper)能顺利运行。
方式一:使用 standalone-server 镜像快速体验
如果你只是想以最小的成本快速体验 DolphinScheduler 的核心功能和主要概念,推荐使用apache/dolphinscheduler-standalone-server镜像。它把全部服务打包进一个进程,执行一条命令即可启动:
$ DOLPHINSCHEDULER_VERSION=<version> $ docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -d apache/dolphinscheduler-standalone-server:"${DOLPHINSCHEDULER_VERSION}"命令中映射的两个端口分别为:
| 端口 | 用途 |
|---|---|
12345 | DolphinScheduler API 服务端口,Web UI 即通过该端口访问 |
25333 | API 服务通信端口 |
standalone-server 的适用边界
请不要将 standalone-server 镜像用于生产环境,它只适合首次体验,原因有三:
- 单进程运行全部服务:Master、Worker、API、Alert 等组件全部运行在一个进程内,一旦进程退出,所有服务同时停止;
- 内存数据库 H2:standalone-server 使用 H2 内存数据库存储元数据,服务停止后元数据会被清空(如确有需要,可通过配置切换为其他数据库持久化);
- 功能裁剪:镜像仅包含 DolphinScheduler 核心服务,部分任务组件(如 Spark、Flink)与告警组件(如 Telegram、Dingtalk 等)需要外部组件或相应配置后才能使用。
方式二:使用 docker-compose 启动完整服务
与 standalone-server 单进程模式不同,通过 docker-compose 启动时,DolphinScheduler 的各个组件运行在独立的容器与进程中,相互影响最小,且元数据可以持久化到磁盘卷中(挂载本地路径需自行配置)。这种方式更健壮,适合中小规模、需要长期稳定运行的场景。
获取 docker-compose 文件
docker-compose 编排文件位于源码包的deploy/docker目录下。可以通过官方下载页面下载对应版本的源码包,解压后进入该目录执行部署命令:
$ DOLPHINSCHEDULER_VERSION=<version> $ tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.tar.gz # Mac / Linux 用户 $ cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src/deploy/docker # Windows 用户 $ cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src\deploy\docker分两步启动:先初始化 Schema,再启动全部服务
# 如果需要初始化或者升级数据库结构,指定 profile 为 schema $ docker-compose --profile schema up -d # 启动 DolphinScheduler 所有服务,指定 profile 为 all $ docker-compose --profile all up -d两步分别对应 docker-compose.yml 中定义的两组服务:
--profile schema:仅启动dolphinscheduler-postgresql与dolphinscheduler-schema-initializer。前者是元数据库(PostgreSQL),后者使用dolphinscheduler-tools镜像执行数据库初始化脚本,depends_on指定了 PostgreSQL 必须通过健康检查(healthcheck探测127.0.0.1:5432)后才开始初始化;--profile all:启动全部业务服务dolphinscheduler-api、dolphinscheduler-alert、dolphinscheduler-master、dolphinscheduler-worker,以及依赖的dolphinscheduler-zookeeper服务发现组件。
提醒:通过 docker-compose 启动时,除了 DolphinScheduler 自身的各服务外,还会一并启动必要的依赖服务:PostgreSQL(用户
root、密码root、数据库dolphinscheduler)与 ZooKeeper。
docker-compose 服务拓扑与端口一览
基于仓库中 docker-compose.yml 的实际定义,各服务的镜像、端口与健康检查如下:
| 服务 | 镜像 | 对外端口 | 健康检查端口 | 挂载卷 |
|---|---|---|---|---|
dolphinscheduler-postgresql | bitnami/postgresql:15.2.0 | 5432 | 5432(tcp 探测) | dolphinscheduler-postgresql |
dolphinscheduler-zookeeper | bitnami/zookeeper:3.7.1 | 无 | 2181(tcp 探测) | dolphinscheduler-zookeeper |
dolphinscheduler-api | ${HUB}/dolphinscheduler-api:${TAG} | 12345、25333 | 12345/dolphinscheduler/actuator/health | logs、shared-local、resource-local |
dolphinscheduler-alert | ${HUB}/dolphinscheduler-alert-server:${TAG} | 无 | 50053/actuator/health | logs |
dolphinscheduler-master | ${HUB}/dolphinscheduler-master:${TAG} | 无 | 5679/actuator/health | logs、shared-local |
dolphinscheduler-worker | ${HUB}/dolphinscheduler-worker:${TAG} | 无 | 1235/actuator/health | worker-data、logs、shared-local、resource-local |
其中${HUB}与${TAG}由 .env 文件注入,默认值分别为ghcr.io/apache/dolphinscheduler与latest,如需切换镜像仓库或固定版本号,直接修改该文件即可:
HUB=ghcr.io/apache/dolphinscheduler TAG=latest TZ=Asia/Shanghai DATABASE=postgresql SPRING_JACKSON_TIME_ZONE=UTC SPRING_DATASOURCE_URL=jdbc:postgresql://dolphinscheduler-postgresql:5432/dolphinscheduler REGISTRY_ZOOKEEPER_CONNECT_STRING=dolphinscheduler-zookeeper:2181几个值得注意的配置细节:
- 所有业务服务通过
env_file: .env注入统一的数据源与注册中心配置,保证各容器使用同一个 PostgreSQL 与 ZooKeeper; - 容器间通过自定义 bridge 网络
dolphinscheduler通信,因此.env中的SPRING_DATASOURCE_URL使用服务名dolphinscheduler-postgresql、REGISTRY_ZOOKEEPER_CONNECT_STRING使用dolphinscheduler-zookeeper作为主机名; - 定义了 5 个命名卷(
dolphinscheduler-postgresql、dolphinscheduler-zookeeper、dolphinscheduler-worker-data、dolphinscheduler-logs、dolphinscheduler-shared-local、dolphinscheduler-resource-local),元数据、日志、任务临时数据与资源文件均持久化于命名卷中,这是 docker-compose 方式能跨重启保留数据的关键。
另外,仓库中还提供了面向 Docker Swarm 的编排文件 docker-stack.yml(version: "3.1",网络驱动为 overlay,并为每个服务声明了deploy.replicas: 1),适用于已在生产环境使用 Swarm 模式编排的团队。
方式三:沿用已有的 PostgreSQL 和 ZooKeeper 服务
使用 docker-compose 启动会新建数据库和 ZooKeeper 容器。如果你已经运行着 PostgreSQL(8.2.15+)和 ZooKeeper(3.8.0)服务,并且希望复用它们,可以分别启动 DolphinScheduler 的各个容器。
第 1 步:初始化数据库
使用dolphinscheduler-tools镜像执行数据库初始化/升级脚本(确保目标数据库<DATABASE>已提前创建):
$ DOLPHINSCHEDULER_VERSION=<version> $ docker run -d --name dolphinscheduler-tools \ -e DATABASE="postgresql" \ -e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \ -e SPRING_DATASOURCE_USERNAME="<USER>" \ -e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \ -e SPRING_JACKSON_TIME_ZONE="UTC" \ --net host \ apache/dolphinscheduler-tools:"${DOLPHINSCHEDULER_VERSION}" tools/bin/upgrade-schema.sh第 2 步:分别启动各服务容器
依次启动 Master、Worker、API、Alert Server 四个容器,每个容器都需要配置数据库连接与注册中心地址:
# 启动 dolphinscheduler-master $ docker run -d --name dolphinscheduler-master \ -e DATABASE="postgresql" \ -e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \ -e SPRING_DATASOURCE_USERNAME="<USER>" \ -e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \ -e SPRING_JACKSON_TIME_ZONE="UTC" \ -e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \ --net host \ -d apache/dolphinscheduler-master:"${DOLPHINSCHEDULER_VERSION}" # 启动 dolphinscheduler-worker $ docker run -d --name dolphinscheduler-worker \ -e DATABASE="postgresql" \ -e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \ -e SPRING_DATASOURCE_USERNAME="<USER>" \ -e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \ -e SPRING_JACKSON_TIME_ZONE="UTC" \ -e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \ --net host \ -d apache/dolphinscheduler-worker:"${DOLPHINSCHEDULER_VERSION}" # 启动 dolphinscheduler-api $ docker run -d --name dolphinscheduler-api \ -e DATABASE="postgresql" \ -e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \ -e SPRING_DATASOURCE_USERNAME="<USER>" \ -e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \ -e SPRING_JACKSON_TIME_ZONE="UTC" \ -e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \ --net host \ -d apache/dolphinscheduler-api:"${DOLPHINSCHEDULER_VERSION}" # 启动 dolphinscheduler-alert-server $ docker run -d --name dolphinscheduler-alert-server \ -e DATABASE="postgresql" \ -e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \ -e SPRING_DATASOURCE_USERNAME="<USER>" \ -e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \ -e SPRING_JACKSON_TIME_ZONE="UTC" \ -e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \ --net host \ -d apache/dolphinscheduler-alert-server:"${DOLPHINSCHEDULER_VERSION}"关于 upgrade-schema.sh 的源码级说明
数据库初始化命令中的tools/bin/upgrade-schema.sh对应仓库中的 upgrade-schema.sh。从脚本源码看,其核心调用逻辑是:
$JAVA_HOME/bin/java $JAVA_OPTS \ -cp "$DOLPHINSCHEDULER_HOME/tools/conf":"$DOLPHINSCHEDULER_HOME/tools/libs/*":"$DOLPHINSCHEDULER_HOME/tools/sql" \ -Dspring.profiles.active=upgrade,${DATABASE} \ org.apache.dolphinscheduler.tools.datasource.UpgradeDolphinScheduler关键点有两个:
-Dspring.profiles.active=upgrade,${DATABASE}:通过环境变量DATABASE(此处为postgresql)激活对应的数据库方言 Profile,Spring Boot 据此选择 PostgreSQL 的建表/升级 SQL 方言;- 入口类
UpgradeDolphinScheduler:其升级流程由 DolphinSchedulerManager 驱动——先判断当前元数据版本(读取t_escheduler_version或t_ds_version表),再按版本依次执行sql/upgrade/{schemaDir}/{dbType}/dolphinscheduler_ddl.sql与dolphinscheduler_dml.sql完成结构升级与数据迁移,最后更新版本号。也就是说,这条命令既承担首次建库(初始化 schema),也承担后续版本升级,是复用已有数据库时必不可少的第一步。
注意:如果本地还没有 PostgreSQL 和 ZooKeeper 服务,又想尝试这种方式,可以自行安装并启动 PostgreSQL(8.2.15+)与 ZooKeeper(3.8.0)后再执行上述命令。
登录系统
无论使用以上哪种方式启动,只要服务正常启动,即可通过浏览器访问 Web UI:
- 访问地址:
http://localhost:12345/dolphinscheduler/ui - 默认用户名:
admin - 默认密码:
dolphinscheduler123
访问后会跳转到登录页面:
注意:如果你使用“沿用已有的 PostgreSQL 和 ZooKeeper 服务”方式,且服务分布在多台机器上,请将访问地址中的
localhost替换为 API 容器所在主机的 hostname 或 IP。
登录成功后,后续的创建工作流、配置任务等操作可参考用户手册 快速上手。
通过环境变量修改 Docker 运行配置
在 Docker 部署场景下,DolphinScheduler 各组件支持通过环境变量覆盖运行配置。前文“沿用已有服务”的方式正是通过环境变量修改了数据库连接(SPRING_DATASOURCE_URL、SPRING_DATASOURCE_USERNAME、SPRING_DATASOURCE_PASSWORD)与注册中心(REGISTRY_ZOOKEEPER_CONNECT_STRING)配置。
常用环境变量速查:
| 环境变量 | 作用 |
|---|---|
DATABASE | 数据库类型(如postgresql、mysql),同时决定 Spring Profile 与 SQL 方言 |
SPRING_DATASOURCE_URL | JDBC 数据源连接地址 |
SPRING_DATASOURCE_USERNAME | 数据库用户名 |
SPRING_DATASOURCE_PASSWORD | 数据库密码 |
SPRING_JACKSON_TIME_ZONE | JSON 序列化时区,生产环境建议固定为UTC或你的业务时区 |
REGISTRY_ZOOKEEPER_CONNECT_STRING | ZooKeeper 连接串,用于服务注册与发现 |
TZ | 容器时区(docker-compose 方式在.env中设置,默认Asia/Shanghai) |
全部可配置的环境变量可通过查看各组件镜像内的application.yaml文件了解(例如 dolphinscheduler-api、dolphinscheduler-master、dolphinscheduler-worker 等,Spring Boot 会将环境变量自动映射为spring.*、registry.*等配置项)。
三种部署方式选型总结
| 方式 | 适用场景 | 数据持久化 | 生产可用性 |
|---|---|---|---|
| standalone-server 镜像 | 首次体验、学习概念、功能尝鲜 | 不持久化(H2 内存库,停止即清空) | 不建议生产 |
| docker-compose | 中小规模、需要长期稳定运行 | 元数据存于命名卷(PostgreSQL),可跨重启保留 | 适合测试与中小规模业务 |
| 沿用已有 PostgreSQL + ZooKeeper | 已有基础设施、需要复用现网组件 | 数据落在已有数据库与注册中心 | 适合与已有组件体系集成 |
无论选择哪种方式,启动后的访问入口、默认账号与配置覆盖机制都是一致的,你可以根据团队基础设施现状与稳定性要求灵活切换部署形态。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考