关于docker:突破-DockerHub-限制全镜像加速服务

38次阅读

共计 5593 个字符,预计需要花费 14 分钟才能阅读完成。

最近 DockerHub 批改了定价,对于收费帐号会限度 200 pulls/ 6 小时,对于匿名帐号则限度 100 pulls/ 6 小时。本文我来介绍下如何应用 Cache 来应对此问题。

背景

DockerHub 是全世界最早也是最大的容器镜像仓库,托管着泛滥操作系统发行版及各类软件的 Docker 镜像。

在推动业务容器化的过程中,不可避免的,咱们会须要应用来自 DockerHub 上的容器镜像。无论是在集体本地环境中应用,还是用于跑测试服务

以下是两种次要的解决方案:

  • 构建一些公共根底镜像,寄存在企业的公有镜像仓库中给业务方应用:

    这种计划下,如果业务方偶然须要一些小众的 / 非根底的镜像,可能只是长期测试应用,那通常状况下是没必要将此类镜像作为根底镜像保护的。

    后果可能是:

    • 应用中间接从 DockerHub pull 镜像,网络状况不佳时,就是无尽的期待;
    • 先 pull 镜像,而后 docker tag 重 tag 后,push 到企业的公有镜像仓库中。这种状况下,如果没有较好的镜像治理规定,那么镜像仓库中就会存在各种无意义的镜像,造成存储资源的节约。
  • 为 docker daemon 配置 Proxy 进行减速:

    • 泛滥国内镜像减速服务,仅提供 Docker 官网镜像的减速服务,集体 / 组织下的镜像不提供减速服务
    • 即便在不同节点上,下载雷同的镜像,依然须要通过网络减速,会产生额定的海内带宽老本;

并且近期 DockerHub 批改了其服务价格, 对于收费用户,进行了如下限度:

  • 未登录用户,每 6 小时只容许 pull 100 次
  • 已登录用户,每 6 小时只容许 pull 200 次

如果咱们持续应用上述两种模式的话,因为进口 IP 是绝对固定的,所以很容易触发 DockerHub 的配额限度。此限度将于 11 月 1 日正式全面实施。

为了能 晋升效率 ,以及 节约减速带宽老本,企业外部 / 集体就十分须要一个 DockerHub 全镜像减速服务了,也就是咱们常说的 pull through cache

上面我来介绍下,如何利用 Docker 开源的我的项目 registry:2 来实现这一需要。

启动服务

应用 registry:2 部署镜像缓存服务很简略,这里先执行 docker pull registry:2 下载所需的镜像:

(MoeLove) ➜  docker pull registry:2
2: Pulling from library/registry
cbdbe7a5bc2a: Pull complete 
47112e65547d: Pull complete 
46bcb632e506: Pull complete 
c1cc712bcecd: Pull complete 
3db6272dcbfa: Pull complete 
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:2
docker.io/library/registry:2

最小化配置的 DockerHub 镜像缓存服务,只须要应用一个配置项 REGISTRY_PROXY_REMOTEURL 即可:

这里我顺便为它独自创立了一个名为 hub-cache 的 network,以及创立了对应的 volume。

(MoeLove) ➜  ~ docker network create hub-cache
19a39f873a23150d3bdaf021e040ccccb092ee3071884d64d52a92df0397b220
(MoeLove) ➜  ~ docker volume create hub-cache
hub-cache
(MoeLove) ➜  ~ docker run --name=cache -d --restart=always --network=hub-cache -v hub-cache:/var/lib/registry -p 5000:5000  -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2 
6cbdcbdcc2d62ec781479901c20be43184a48b2d73e06f04bd4693253c0c5a73
(MoeLove) ➜  ~ docker ps -l
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                    NAMES
6cbdcbdcc2d6   registry:2   "/entrypoint.sh /etc…"   8 seconds ago   Up 6 seconds   0.0.0.0:5000->5000/tcp   cache

验证减速成果

启动一个全新的 Docker In Docker 容器进行验证,防止受到本地环境的影响。

通过传递 --registry-mirror http://cache:5000,将方才启动的 registry 设置为 mirror。

(MoeLove) ➜  ~ docker run  --network=hub-cache -d --privileged docker:dind --registry-mirror http://cache:5000 
73c56ac25d68927c9f5b0e458f2babc0699cf8595df0d1e86c021fd03d477384
(MoeLove) ➜  ~ docker exec -it $(docker ps -ql) sh
/ # 查看配置是否失效
/ # docker info --format '{{.RegistryConfig.Mirrors}}' 
[http://cache:5000/]

/ # time docker pull prom/prometheus
Using default tag: latest
latest: Pulling from prom/prometheus
76df9210b28c: Pull complete 
559be8e06c14: Pull complete 
6a4bb3319487: Pull complete 
2cca90a64593: Pull complete 
d2014e464a99: Pull complete 
70b42590e4a2: Pull complete 
54645fcbd6cc: Pull complete 
67d9943de656: Pull complete 
b9c749b1af90: Pull complete 
9723d8eb5323: Pull complete 
7d20502d5322: Pull complete 
3e519cce6f63: Pull complete 
Digest: sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Status: Downloaded newer image for prom/prometheus:latest
docker.io/prom/prometheus:latest
real    0m 42.71s
user    0m 0.12s
sys     0m 0.09s


/ # docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
prom/prometheus     latest              cdfc440228d0        8 days ago          168MB

/ # docker rmi prom/prometheus                                     
Untagged: prom/prometheus:latest
Untagged: prom/prometheus@sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Deleted: sha256:cdfc440228d01d7a94937d7a047fa6461efc1b1806bb20677043fee032810830
Deleted: sha256:c72f348fd2f923996ea80222feb77e34aba9de397bd96206ddc3c8651adc306d
Deleted: sha256:e34df2c00334266a67bb846b958ba6eae3b1d5cdfe9d763707027a23e7c85100
Deleted: sha256:d2cb38310ada122064b7333bbfc12c67dc58acb30e29146b3ba1e24adc27a950
Deleted: sha256:7a87cd520d19a83b3582541aac4d95098ae5016b092e72eaf80dc54f587bf51e
Deleted: sha256:f84c79dceed6b5a27234c1291d0bdccab5c459d587f13934d74db9b9e79471c6
Deleted: sha256:f542b0cffe0fe16c31c98e7eed934d5fea5e598c03b53b4efd308a62e0e9c6a9
Deleted: sha256:f746b4a525727bcb79367d009d707ef45d75bac09aaa18a68c20a19046df0897
Deleted: sha256:09b45653ee7062c7cd754885bf46ebe554d0794573fb2e200acea8644e64670f
Deleted: sha256:867526c56b30e67493341ef33890aa242c1131e4bb4151e60011b4d450892d59
Deleted: sha256:86d629b358ee70bdb0f0a11c10915b8551e904fe337f9a8bfcad476977329532
Deleted: sha256:842455c528af7383ba4a0de424fc63664a0248581a191516d6dbf45195c69426
Deleted: sha256:1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569

/ # time docker pull prom/prometheus
Using default tag: latest
latest: Pulling from prom/prometheus
76df9210b28c: Pull complete 
559be8e06c14: Pull complete 
6a4bb3319487: Pull complete 
2cca90a64593: Pull complete 
d2014e464a99: Pull complete 
70b42590e4a2: Pull complete 
54645fcbd6cc: Pull complete 
67d9943de656: Pull complete 
b9c749b1af90: Pull complete 
9723d8eb5323: Pull complete 
7d20502d5322: Pull complete 
3e519cce6f63: Pull complete 
Digest: sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Status: Downloaded newer image for prom/prometheus:latest
docker.io/prom/prometheus:latest
real    0m 5.27s
user    0m 0.06s
sys     0m 0.03s

能够看到,在首次 pull prom/prometheus 镜像时,消耗了 42+s 的工夫,而删除掉已下载的镜像后,再次 pull,则只须要消耗 5+s 的工夫。速度晋升十分的显著。镜像减速成果达成

应用配置

对于 Linux 零碎而言,仅须要在 /etc/docker/daemon.json 文件(如果没有此文件,间接创立即可)中写入你的镜像减速服务的域名,重启 docker daemon 即可(也可抉择 reload 配置)。

{
        "registry-mirrors": ["https://hub-cache.moelove.info"]
}

或者是在 docker daemon 的启动参数中退出 registry-mirror 配置项。

对于 Mac 和 Windows 用户,间接在 Docker Desktop 零碎设置中,配置 registry-mirrors 即可。

留神 如果 Docker daemon 中配置了 HTTP_PROXYHTTPS_PROXY,那么须要将减速域名配置在 NO_PROXY 中,防止被代理。

总结

本文介绍了如何应用 Docker 开源的 registry:2 搭建 DockerHub 的镜像减速服务。这里只介绍了最简略的配置。

但如果在企业环境中部署的话,须要有更多的配置。比方,能够通过配置 REGISTRY_HTTP_DEBUG_PROMETHEUS_ENABLED 裸露 Prometheus metrics,用于监控服务可用性及查看 cache 的成果;能够对日志及相干字段进行配置;
为了防止在 11 月后,触发到 DockerHub 的流量限度,能够横向进行扩容,筹备多进口 IP,以及配置账户等。

最近新公布的 Harbor v2.1 貌似多了一个作为 proxy cache 的个性,但它与本文介绍的 pull through cache 并不相同,应用 Harbor 的 proxy cache 个性,须要将待 pull 的镜像,设置成 <harbor_servername>/<proxy_project_name>/repo/name:tag 的模式,这样子只是省去了本文一开始介绍的那种手动重 tag 的操作,不够不便,但也是个很不错的个性了。


欢送订阅我的文章公众号【MoeLove】

正文完
 0