Dragonfly2 项目 Docker Compose 部署详解
2025-07-10 08:23:17作者:郜逊炳
概述
Dragonfly2 是一个基于 P2P 技术的智能镜像与文件分发系统,它通过 Docker Compose 提供了便捷的本地部署方案。本文将深入解析其 Docker Compose 配置文件的设计原理和各个组件的功能。
核心组件架构
Dragonfly2 系统由以下几个核心组件构成:
- Redis:作为系统的缓存和消息队列服务
- MySQL:存储系统元数据和持久化数据
- Manager:系统管理节点,负责协调各组件
- Scheduler:调度器,负责任务分配
- Client:客户端组件,提供文件分发服务
- 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 类似
- 使用不同的端口范围避免冲突
部署建议
-
环境准备:
- 确保 Docker 和 Docker Compose 已安装
- 分配足够的内存和 CPU 资源
-
配置文件定制:
- 根据实际需求修改各服务的 YAML 配置文件
- 生产环境应修改默认密码和安全设置
-
日志管理:
- 日志默认存储在 ./log 目录下
- 可配置日志轮转和持久化策略
-
网络配置:
- 确保各服务端口不冲突
- 生产环境应考虑使用自定义网络
-
健康监控:
- 利用内置的健康检查机制
- 可集成外部监控系统
常见问题排查
-
服务启动失败:
- 检查依赖服务是否正常
- 查看对应组件的日志文件
-
健康检查失败:
- 确认端口未被占用
- 检查配置文件语法是否正确
-
性能问题:
- 调整 Redis 和 MySQL 的资源限制
- 优化调度器配置
通过理解这份 Docker Compose 配置文件,开发者可以更好地部署和管理 Dragonfly2 系统,充分发挥其 P2P 文件分发的优势。