Dragonfly:P2P 镜像与文件分发加速
[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