1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。
1:需要至少两台以上的主机节点,一台充当supernode,另一台为dfclient
2:每个主机节点都已部署docker守护程序
3:supernode节点已经部署了harbor仓库,可以正常登陆并且pull或push
4:测试环境:
服务端:IP:115.67.106.132
客户端:IP:105.12.72.5
注意:使用以下命令需要使用”docker ps- a”以及“docker images”查看是否存在相同的镜像,如果没有被使用,根据实际情况使用 “docker rm $(docker ps -a -q)”删除所有已经停止的容器或者“docker rmi -f <IMAGE_ID>“删除指定容器,如果提示无法删除,容器正在运行,则使用“docker stop <IMAGE_ID>”停止运行的镜像,再进行删除。
docker run -d --name supernode \
--restart=always \
-p 8001:8001 \
-p 8002:8002 \
-v /home/admin/supernode:/home/admin/supernode \
dragonflyoss/supernode:1.0.2 --download-port=8001
1:下面的操作应该在客户机上执行
Dragonfly的配置文件/etc/dragonfly默认位于目录中。使用容器部署客户端时,需要将配置文件挂载到容器上。注意:如果路径下没有/etc/dragonfly/dfget.yml 需要自己创建
cat <<EOD > /etc/dragonfly/dfget.yml
nodes:
- 115.67.106.132
EOD
2:启动蜻蜓客户端
docker run -d --name dfclient \
--restart = always \
-p 65001:65001 \
-v / etc / dragonfly :/ etc / dragonfly \
-v $ HOME /.small-dragonfly:/root/.small-dragonfly \
dragonflyoss / dfclient:1.0.2 --registry https://index.docker.io
3:注意:可以直接执行以上命令,但是值得注意的是以上命令中 ”registry https://index.docker.io ” docker 不支持 https://index.docker.io 以外的 registry,由于我们需要指向自己的仓库,所以不能通过registry 直接配置registry 115.67.106.132:8111/test。
4:我们需要使用docker 的proxy 模式,将Dfdaemon用作Docker Daemon的HTTP代理,首先需要在客户端中添加代理规则 /etc/dragonfly/dfdaemon.yml:
proxies:
- regx: blobs/sha256.*
将docker守护程序的dfdaemon设置为HTTP_PROXY和HTTPS_PROXY /etc/systemd/system/docker.service.d/http-proxy.conf:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:65001"
Environment="HTTPS_PROXY=http://127.0.0.1:65001"
所有需要 docker pull 的都需要修改
proxy 模式可以给指定的任意 http(s) 请求加速。
1:需要在客户端上修改docker守护程序的配置,在 /etc/docker/daemon.json路径下
{
"registry-mirrors":["http://127.0.0.1:65001"],
"insecure-registries": ["115.67.106.132:8111"]
}
2:重新启动Docker Daemon。
systemctl restart docker
1:在客户端上使用以下命令拉取镜像
docker pull nginx:latest
2:使用以下命令来检查nginx镜像是否通过Dragonfly分发
docker exec dfclient grep 'downloading piece' /root/.small-dragonfly/logs/dfclient.log
如果上面命令的输出内容如下
2019-03-29 15:49:53.913 INFO sign:96027-1553845785.119 : downloading piece:{"taskID":"00a0503ea12457638ebbef5d0bfae51f9e8e0a0a349312c211f26f53beb93cdc","superNode":"127.0.0.1","dstCid":"127.0.0.1-95953-1553845720.488","range":"67108864-71303167","result":503,"status":701,"pieceSize":4194304,"pieceNum":16}
就代表镜像下载是由Dragonfly完成的。 如果需要确保镜像是通过其他对等节点传输的,则可以执行以下命令:
docker exec dfclient grep 'downloading piece' /root/.small-dragonfly/logs/dfclient.log | grep -v cdnnode
如果以上命令没有输出结果,则镜像不会完成通过其他对等节点的传输。否则,通过其他对等节点完成传输。
以上配置了Dragonfly进行镜像分发,如果需要通过自己的harbor仓库拉取镜像,需要使用以下类似的命令进行pull
docker pull 115.67.106.132:8111/xxx/xxx:latest