V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myml
V2EX  ›  Docker

docker 镜像无法使用了,用 golang 写了一个 docker、pip 的镜像代理

  •  
  •   myml · 23 天前 · 1144 次点击

    国内的 docker 镜像源要 G 了,尝试用官方的 registry 做代理,发现 registry 虽然可以使用对象存储做后端,也会重定向到存储,但用的是异步存储,初次 pull 的时候还是直接给客户端发数据,这样下大文件的时候很容易中断,失败率很高。

    我就用 golang 实现了一个镜像代理服务 https://github.com/myml/mirrorhub这个服务会先将文件上传到对象存储,然后再重定向对象存储的链接,客户端从对象存储下载文件速度快还不容易中断,相当于使用了云服务商的专线传输文件。

    试过七牛的 Kudo 和 Cloudflare 的 R2 ,在我的俄罗斯节点和美国节点都能达到 60Mb/s 的上传速度(都是内存 512M,带宽 100M 的小鸡),客户端下载对象存储的文件 R2 能达到 80Mb/s ,Kudo 有 20Mb/s ,感觉七牛的速度有些不对劲,但是 R2 不限制流量速度又快,就没去排查了。

    部署方法

    docker run --network host ghcr.io/myml/mirrorhub:master -endpoint https://$ACCOUNT_ID.r2.cloudflarestorage.com -download_endpoint https://pub-xxxxxxxxxxx.r2.dev -region auto -bucket $BUCKET_NAME -access_key $ACCESS_KEY --secret_key $SECRET_KEY -mirrors :1234=>docker://registry-1.docker.io,:1235=>docker://ghcr.io,:1236=>docker://lscr.io,:1237=>pip://pypi.org

    endpoint 、region 、bucket 、access_key 、secret_key 这些都是 S3 的主要配置,不再赘述

    download_endpoint 是生成重定向链接用的,七牛的测试域名、R2 的 Public subdomain

    mirrors 这个格式是“监听地址=>镜像地址”,现在实现了 docker 和 pip ,后续计划支持 npm 、debian 这些我常用的镜像支持

    注意事项

    因为是先上传到对象存储再重定向,大文件要等待一段时间(会没有进度条)。

    pip 设置 index-url 的时候,顺便修改 timeout=6000 ,否则大文件会触发超时。

    8 条回复    2024-06-14 15:03:15 +08:00
    wcloudme
        1
    wcloudme  
       22 天前
    还不如直接机器上挂个代理~
    myml
        2
    myml  
    OP
       22 天前
    @wcloudme 不知是不是我的节点太拉了,用代理下载大文件时容易在中途降速卡死
    MONGGO
        3
    MONGGO  
       22 天前
    @myml 一般按带宽算不限流量的机器会有这种问题,要限速,不然网络满载就延迟暴增
    Satansickle
        4
    Satansickle  
       22 天前
    收藏了,这个能否装在局域网能科学的设备上做本地镜像代理?
    wcloudme
        5
    wcloudme  
       21 天前
    @myml 有的 IDC 的防火墙不行,流量大了会直接黑洞~~
    myml
        6
    myml  
    OP
       20 天前   ❤️ 1
    @Satansickle 这种场景可以用官方的 registry 或者 nexsus ,他们也能实现代理缓存

    这个软件比较适合放在网络条件不好的小鸡上,相当于借用云厂商的专线,文件不直传到你本地,局域网就不用担心网络问题。
    myml
        7
    myml  
    OP
       20 天前
    @MONGGO 确实是按宽带不限流量的,还很便宜,我觉得是 gwf 限速的,因为用这个服务从节点上传到七牛、R2 时没看到有限速的情况。
    zzl22100048
        8
    zzl22100048  
       19 天前
    快处理下 docker 镜像状态码转发,现在全是 200 ,默认的认证流程走不了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:19 · PVG 20:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.