首页
/ Dragonfly2 项目 Docker Compose 部署详解

Dragonfly2 项目 Docker Compose 部署详解

2025-07-10 08:23:17作者:郜逊炳

概述

Dragonfly2 是一个基于 P2P 技术的智能镜像与文件分发系统,它通过 Docker Compose 提供了便捷的本地部署方案。本文将深入解析其 Docker Compose 配置文件的设计原理和各个组件的功能。

核心组件架构

Dragonfly2 系统由以下几个核心组件构成:

  1. Redis:作为系统的缓存和消息队列服务
  2. MySQL:存储系统元数据和持久化数据
  3. Manager:系统管理节点,负责协调各组件
  4. Scheduler:调度器,负责任务分配
  5. Client:客户端组件,提供文件分发服务
  6. Seed-Client:种子客户端,用于初始化数据源

详细配置解析

Redis 服务配置

redis:
  image: redis:6-alpine
  container_name: dragonfly-redis
  command: >
    --requirepass dragonfly
  healthcheck:
    test: ["CMD", "redis-cli", "-a", "dragonfly", "ping"]
    interval: 1s
    timeout: 2s
    retries: 30
  ports:
    - 6379:6379
  • 使用轻量级的 Redis 6 Alpine 镜像
  • 设置了密码保护(dragonfly)
  • 健康检查配置确保服务可用性
  • 暴露标准 Redis 端口 6379

MySQL 服务配置

mysql:
  image: mariadb:10.6
  container_name: dragonfly-mysql
  environment:
    - MARIADB_USER=dragonfly
    - MARIADB_PASSWORD=dragonfly
    - MARIADB_DATABASE=manager
    - MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=yes
  healthcheck:
    test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
    interval: 1s
    timeout: 2s
    retries: 30
  ports:
    - 3306:3306
  • 使用 MariaDB 10.6 作为数据库
  • 预配置了用户、密码和数据库
  • 允许空 root 密码(仅限开发环境)
  • 健康检查确保数据库服务可用
  • 暴露标准 MySQL 端口 3306

Manager 服务配置

manager:
  image: dragonflyoss/manager:latest
  container_name: manager
  depends_on:
    - redis
    - mysql
  restart: always
  volumes:
    - ./log/manager:/var/log/dragonfly
    - ./config/manager.yaml:/etc/dragonfly/manager.yaml:ro
  healthcheck:
    test: ["CMD-SHELL", "/bin/grpc_health_probe -addr=:65003 || exit 1"]
    interval: 1s
    timeout: 2s
    retries: 30
  ports:
    - 65003:65003
    - 8080:8080
  • 依赖 Redis 和 MySQL 服务
  • 配置了持久化日志存储
  • 挂载自定义配置文件
  • 使用 gRPC 健康检查
  • 暴露管理端口 65003 和 HTTP 端口 8080

Client 服务配置

client:
  image: dragonflyoss/client:latest
  depends_on:
    - manager
    - scheduler
    - seed-client
  container_name: client
  restart: always
  healthcheck:
    test: ["CMD-SHELL", "/bin/grpc_health_probe -addr=unix:///var/run/dragonfly/dfdaemon.sock || exit 1"]
    interval: 1s
    timeout: 2s
    retries: 30
  volumes:
    - ./log/client:/var/log/dragonfly
    - ./config/client.yaml:/etc/dragonfly/dfdaemon.yaml:ro
  ports:
    - 4000:4000
    - 4001:4001
    - 4002:4002
  • 依赖 Manager、Scheduler 和 Seed-Client
  • 配置 Unix 域套接字健康检查
  • 持久化日志和自定义配置
  • 暴露多个端口用于不同功能

Scheduler 服务配置

scheduler:
  image: dragonflyoss/scheduler:latest
  depends_on:
    - manager
  container_name: scheduler
  restart: always
  healthcheck:
    test: ["CMD-SHELL", "/bin/grpc_health_probe -addr=:8002 || exit 1"]
    interval: 1s
    timeout: 2s
    retries: 30
  volumes:
    - ./log/scheduler:/var/log/dragonfly
    - ./config/scheduler.yaml:/etc/dragonfly/scheduler.yaml:ro
  ports:
    - 8002:8002
  • 依赖 Manager 服务
  • 使用 gRPC 健康检查
  • 持久化日志和自定义配置
  • 暴露调度器端口 8002

Seed-Client 服务配置

seed-client:
  image: dragonflyoss/client:latest
  depends_on:
    - manager
    - scheduler
  container_name: seed-client
  restart: always
  healthcheck:
    test: ["CMD-SHELL", "/bin/grpc_health_probe -addr=unix:///var/run/dragonfly/dfdaemon.sock || exit 1"]
    interval: 1s
    timeout: 2s
    retries: 30
  volumes:
    - ./log/seed-client:/var/log/dragonfly
    - ./config/seed-client.yaml:/etc/dragonfly/dfdaemon.yaml:ro
  ports:
    - 4010:4010
    - 4011:4011
    - 4012:4012
  • 特殊类型的客户端,用于种子节点
  • 依赖 Manager 和 Scheduler
  • 配置与普通 Client 类似
  • 使用不同的端口范围避免冲突

部署建议

  1. 环境准备

    • 确保 Docker 和 Docker Compose 已安装
    • 分配足够的内存和 CPU 资源
  2. 配置文件定制

    • 根据实际需求修改各服务的 YAML 配置文件
    • 生产环境应修改默认密码和安全设置
  3. 日志管理

    • 日志默认存储在 ./log 目录下
    • 可配置日志轮转和持久化策略
  4. 网络配置

    • 确保各服务端口不冲突
    • 生产环境应考虑使用自定义网络
  5. 健康监控

    • 利用内置的健康检查机制
    • 可集成外部监控系统

常见问题排查

  1. 服务启动失败

    • 检查依赖服务是否正常
    • 查看对应组件的日志文件
  2. 健康检查失败

    • 确认端口未被占用
    • 检查配置文件语法是否正确
  3. 性能问题

    • 调整 Redis 和 MySQL 的资源限制
    • 优化调度器配置

通过理解这份 Docker Compose 配置文件,开发者可以更好地部署和管理 Dragonfly2 系统,充分发挥其 P2P 文件分发的优势。