告别手动调度:用Docker Compose一键拉起Apache DolphinScheduler测试环境

在数据工程领域,快速搭建可靠的调度系统测试环境是每个开发者都会遇到的刚需。传统部署方式需要手动配置数据库、注册中心、依赖库等一系列组件,光是环境准备就可能耗费半天时间。而今天,我们只需要一个docker-compose.yml文件,就能在5分钟内启动完整的DolphinScheduler服务集群。

1. 为什么选择容器化部署

还记得第一次手动部署DolphinScheduler的经历吗?从JDK版本兼容问题到ZooKeeper配置错误,从数据库权限设置到服务启动顺序依赖,每个环节都可能成为时间黑洞。而容器化方案至少带来三个显著优势:

  • 环境隔离:所有服务运行在独立容器中,不会污染宿主机环境
  • 依赖固化:镜像内已包含正确版本的JDK、数据库驱动等组件
  • 一键启停:无需记忆复杂的服务启动顺序,docker-compose自动处理依赖关系
# 传统部署 vs 容器化部署时间对比
+---------------------+---------------+---------------+
| 步骤                | 传统部署(分钟) | 容器化(分钟)  |
+---------------------+---------------+---------------+
| 基础环境配置        | 30-60         | 0             |
| 数据库初始化        | 15-30         | 自动完成      |
| 服务启动与验证      | 10-20         | 2             |
+---------------------+---------------+---------------+

提示:对于短期使用的测试环境,容器化方案能节省90%的部署时间。即便是生产环境,也推荐先用容器方案验证配置可行性。

2. 环境准备与工具选型

在开始前,请确保你的开发机满足以下基础要求:

  1. Docker引擎:版本≥20.10.7(社区版或商业版均可)
  2. Docker Compose:版本≥v2.17.2
  3. 硬件资源
    • 至少4GB可用内存
    • 10GB磁盘空间
    • 2核CPU
# 验证环境是否就绪
docker --version
docker-compose version

数据库方面,官方同时支持MySQL和PostgreSQL。考虑到轻量化,我们选择MySQL 5.7作为元数据存储。如果团队更熟悉PostgreSQL,只需修改docker-compose.yml中的几个参数:

# PostgreSQL配置示例
services:
  postgres:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: dolphinscheduler
      POSTGRES_DB: dolphinscheduler

3. 编写Docker Compose编排文件

下面是我们精心调优的docker-compose.yml模板,已经处理好所有服务依赖和网络配置:

version: '3'
services:
  zookeeper:
    image: zookeeper:3.8
    ports:
      - "2181:2181"
    networks:
      - ds-net

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dolphinscheduler
      MYSQL_USER: ds_user
      MYSQL_PASSWORD: ds_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - ds-net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 10s
      retries: 3

  dolphinscheduler:
    image: apache/dolphinscheduler:3.1.3
    depends_on:
      zookeeper:
        condition: service_healthy
      mysql:
        condition: service_healthy
    environment:
      DATABASE_TYPE: mysql
      DATABASE_DRIVER: com.mysql.jdbc.Driver
      DATABASE_HOST: mysql
      DATABASE_PORT: 3306
      DATABASE_USERNAME: ds_user
      DATABASE_PASSWORD: ds_password
      ZOOKEEPER_QUORUM: zookeeper:2181
    ports:
      - "12345:12345"
    volumes:
      - ds_data:/opt/dolphinscheduler
    networks:
      - ds-net

volumes:
  mysql_data:
  ds_data:

networks:
  ds-net:
    driver: bridge

关键配置说明:

  • 服务依赖:通过depends_on确保启动顺序,配合healthcheck实现真正的服务就绪等待
  • 数据持久化:使用命名卷保存数据库和调度数据,避免容器重启后数据丢失
  • 网络隔离:自定义桥接网络确保服务间安全通信,同时暴露必要端口到宿主机

4. 启动与验证集群

保存好docker-compose.yml后,只需执行以下命令即可启动全套服务:

# 启动所有服务(后台模式)
docker-compose up -d

# 查看服务状态
docker-compose ps

# 观察日志(Ctrl+C退出)
docker-compose logs -f

当看到所有服务状态显示为healthy后,打开浏览器访问:

http://localhost:12345/dolphinscheduler

使用默认凭证登录:

  • 用户名:admin
  • 密码:dolphinscheduler123

如果遇到启动问题,可以重点检查:

  1. 端口冲突:确保宿主机12345、3306、2181端口未被占用
  2. 资源不足:通过docker stats查看容器资源使用情况
  3. 数据库连接:验证MySQL容器日志是否有权限错误

5. 高级配置与调优

基础环境运行起来后,你可能需要根据测试需求调整配置:

5.1 修改工作节点配置

要增加worker节点数量,只需扩展服务定义:

services:
  worker1:
    image: apache/dolphinscheduler:3.1.3
    command: ["bash", "./bin/start.sh", "worker-server"]
    environment: 
      WORKER_GROUPS: default
    depends_on:
      - zookeeper
      - mysql
    networks:
      - ds-net

  worker2:
    image: apache/dolphinscheduler:3.1.3 
    command: ["bash", "./bin/start.sh", "worker-server"]
    environment:
      WORKER_GROUPS: bigdata
    depends_on:
      - zookeeper
      - mysql
    networks:
      - ds-net

5.2 启用邮件告警功能

修改dolphinscheduler服务环境变量:

environment:
  ALERT_TYPE: email
  MAIL_SERVER_HOST: smtp.example.com
  MAIL_SERVER_PORT: 465
  MAIL_SENDER: noreply@example.com 
  MAIL_USER: alert@example.com
  MAIL_PASSWD: your_password
  MAIL_SMTP_SSL: "true"

5.3 资源限制与预留

避免容器占用过多宿主机资源:

services:
  dolphinscheduler:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M

6. 日常维护技巧

容器化环境虽然简化了部署,但仍需注意以下维护要点:

  • 定期备份:重要数据卷应设置备份策略

    # 备份MySQL数据卷
    docker run --rm -v mysql_data:/source -v /backups:/backup alpine \
      tar czf /backup/mysql_$(date +%Y%m%d).tar.gz -C /source .
    
  • 版本升级:修改镜像标签后重新创建服务

    docker-compose pull
    docker-compose up -d --no-deps dolphinscheduler
    
  • 日志收集:建议将日志导出到ELK等集中式系统

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    
  • 性能监控:集成Prometheus监控指标

    environment:
      PROMETHEUS_ENABLED: "true"
      PROMETHEUS_PORT: "12346"
    

这套容器化方案已经在多个团队的开发测试环境中稳定运行超过半年。最让我惊喜的是,当需要重建环境时,从零开始到完全可用只需要执行两条命令的时间。

更多推荐