laminux29

docker 仓库这套体系设计的真差,这么多年了都还没有镜像统一缓存的方案。

  •  
  •   laminux29 · 4 days ago · 1348 views
    想在内网部署一个 docker 镜像的缓存层:

    如果用 docker 官方的 registry:2 + proxy cache ,则只能缓存 docker 官方的仓库 registry-1.docker.io ,无法缓存别的仓库比如 registry.gitlab.comghcr.ioquay.ioregistry.k8s.io 等等。

    如果用 Harbor Proxy Cache 或 Nexus/JFrog ,在 docker pull 时需要更改镜像的 URL ,比如需要把:

    docker pull ghcr.io/home-assistant/home-assistant
    改为
    docker pull DockerCacheServer.com/home-assistant/home-assistant

    不改 URL 且能缓存所有 docker 仓库的方案,目前不存在。这么多年的发展,这么点小事都解决不了。
    zizon
        1
    zizon  
       4 days ago
    记得是可以的.客户端需要配置 registry 的 mirror.
    类似
    docker pull ubuntu
    其实是
    docker pull docker.io/library/ubuntu
    kur0d3s
        2
    kur0d3s  
       4 days ago
    {
    "registry-mirrors": ["https://<my-docker-mirror-host>"]
    }

    这个功能有点年头了...
    morphyhu
        3
    morphyhu  
       4 days ago
    你行你上
    laminux29
        4
    laminux29  
    OP
       3 days ago
    @zizon 这种方案,客户端在 docker pull 时,需要更改 image 的 URL ,URL 变得很不标准。
    laminux29
        5
    laminux29  
    OP
       3 days ago
    @kur0d3s 问过 AI ,没用。
    anubu
        6
    anubu  
       1 day ago
    还是有一些变通方案的,要从服务端和客户端两方面分析。
    - 服务端就是缓存服务本身,比如 registry:2 ,是可以正常代理缓存非 docker.io 的上游仓库,配置环境变量即可。麻烦的是如果要缓存多个上游就要启动多个 registry ,还需要考虑前面放个反向代理和域名路由问题。也可以考虑 zot 、Harbor 类的方案。
    - 客户端就比较多了,docker 的 mirror 配置仅对 docker.io 这个默认仓库生效。一个方法就是把其它仓库配置为 insecure-registries ,然后本地 hosts 劫持到上面部署的 registry 缓存代理上。如果是 nerdctl+containerd 就方便多了,自身的 mirror 配置比较丰富。可能还会涉及到 k3s 或 k8s 场景,mirror 配置上可能会多一层考虑,或直接使用底层的 containerd 。其它客户端 podman 、skopeo 、crane 等需要根据情况自行研究了。

    看上去能解决问题,实际上的确是复杂了一些。这个场景目前的确没有一个共识的最佳实践,只能根据自己具体场景来摸索调整。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2917 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:56 · PVG 16:56 · LAX 01:56 · JFK 04:56
    ♥ Do have faith in what you're doing.