Dragonfly:P2P 镜像与文件分发加速

FreeGuideOnline 最新 2026-07-03

[Registry / HTTP Server] | [Seed Peer] (预取完整数据) | [Scheduler] (调度任务、维护Peer状态) | [Peer A] <--> [Peer B] <--> [Peer C] ...


### 部署 Dragonfly 环境

本教程使用 Docker Compose 快速部署一套单机体验环境(包含 Manager、Scheduler、Seed Peer 和一个 Peer)。操作系统以 Ubuntu/CentOS 为例,确保已安装 Docker Engine 和 Docker Compose。

#### 第一步:获取 Dragonfly 部署文件

克隆 Dragonfly 官方仓库:

```bash
git clone https://github.com/dragonflyoss/Dragonfly2.git
cd Dragonfly2/deploy/docker-compose

该目录下包含一个 docker-compose.yaml 模板文件,主要用于快速体验。如果是生产环境,建议参考官方 Helm Chart 部署到 Kubernetes。

第二步:配置环境变量(可选)

部署文件使用环境变量控制参数,通常可以保持默认值。如需自定义,可创建 .env 文件或直接修改 docker-compose.yaml

默认关键配置项:

  • MANAGER_ADDRESS:Manager 的实际可访问地址,默认为 127.0.0.1:65003
  • SCHEDULER_ADDRESS:Scheduler 地址,默认为 127.0.0.1:8002
  • SEED_PEER_ADDRESS:Seed Peer 地址,默认为 127.0.0.1:4001

如果所有组件都在同一台机器上运行,默认值即可。

第三步:启动服务

执行以下命令拉取镜像并启动所有容器:

docker compose up -d

检查容器状态:

docker compose ps

预期输出四个运行中的容器:mysql、manager、scheduler 和 seed-peer。等待约 1 分钟,确保服务完全就绪。

打开浏览器访问 http://<你的主机IP>:8080,即可登录 Dragonfly 管理控制台。默认用户名/密码为 root / dragonfly。控制台可用于查看集群状态、任务分发情况和 Peer 列表。

第四步:配置 Peer 节点

Peer 节点需要安装 dfdaemon 并将其配置为本地代理。这里我们也在同一台 Docker 主机上部署一个 Peer。

docker compose 同一目录下,有一个 docker-compose-peer.yaml 文件,可以直接使用:

docker compose -f docker-compose-peer.yaml up -d

该 Peer 容器默认配置了 dfdaemon 作为 HTTP/HTTPS 代理(监听 127.0.0.1:65001),并已注册到 Manager。

验证 Peer 是否成功注册:

在 Manager 控制台的“Peer”页面,应能看到一个活跃的 Peer 节点。

第五步:测试镜像拉取加速

现在,你可以让宿主机上的 Docker 客户端通过 Dragonfly Peer 代理拉取镜像。

编辑 Docker 守护进程配置文件 /etc/docker/daemon.json,增加以下内容:

{
  "registry-mirrors": [],
  "proxies": {
    "http-proxy": "http://127.0.0.1:65001",
    "https-proxy": "http://127.0.0.1:65001",
    "no-proxy": "localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
  }
}

注意proxies 配置项在较新的 Docker Engine(≥23.0)中支持;旧版本可考虑使用 HTTP_PROXY 环境变量或通过 containerd 配置。如果无法直接代理 Docker daemon,也可通过 dfget 命令测试文件下载。

重启 Docker 使配置生效:

sudo systemctl restart docker

现在执行镜像拉取:

docker pull nginx:alpine

第一次拉取时,数据会经过 Peer 代理,Peer 向 Scheduler 请求,并由 Seed Peer 或 Manager 指定的源下载。后续其他 Peer 拉取相同镜像时,就直接从已缓存数据的 Peer 节点获取,实现 P2P 加速。

在 Manager 控制台的“Task”面板,可以看到对应的下载任务和流量曲线。

第六步:使用 dfget 直接下载文件

Dragonfly 也支持加速任意 HTTP 文件下载。首先进入 Peer 容器内部:

docker exec -it dragonfly-peer-1 sh

使用 dfget 命令下载一个测试文件:

dfget -u "http://speedtest.tele2.net/100MB.zip" -o /tmp/test.zip