最近DockerHub修改了价格。对于免费帐户,限制为200次拉动/6小时,对于匿名帐户,限制为100次拉动/6小时。在这篇文章中,我将介绍如何使用缓存来处理这个问题。背景DockerHub是世界上最早、最大的容器镜像仓库,托管着众多操作系统发行版和各种软件的Docker镜像。在推动业务容器化的过程中,我们不可避免地会需要使用来自DockerHub的容器镜像。无论是用于个人本地环境,还是用于运行测试服务,主要有两种解决方案:构建一些公共的基础镜像,存储在企业的私有镜像仓库中,供业务方使用:在该方案下,如果业务方偶尔需要一些小众/非基础的图片,可能只是临时测试用。通常,不需要将此类镜像维护为基本镜像。结果可能是:使用的时候直接从DockerHub拉取镜像,网络不好的时候就是无休止的等待;先拉取镜像,然后重新打上docker标签,然后推送到企业私有镜像仓库。在这种情况下,如果没有良好的镜像管理规则,镜像仓库中就会出现各种无意义的镜像,造成存储资源的浪费。为dockerdaemon配置Proxy加速:国内很多镜像加速服务只对官方Docker镜像提供加速服务,个人/组织下的镜像不提供加速服务;即使在不同节点下载同一张图片,仍然需要通过网络进行加速,会产生额外的海外带宽费用;近期DockerHub修改了服务价格,对免费用户做了如下限制:对于未登录的用户,登录用户每6小时只能拉取100次,对于用户每6小时只能拉取200次。6小时其次,如果继续使用以上两种方式,由于出口IP相对固定,很容易触发DockerHub的配额限制。该限制将于11月1日正式全面生效。为了提高效率,节省加速带宽成本,企业/个人需要一个DockerHub全镜像加速服务,也就是我们常说的pullthroughcache。下面介绍一下如何使用Docker的开源项目registry:2来实现这个需求。启动服务很简单,使用registry:2部署镜像缓存服务,这里先执行dockerpullregistry:2下载需要的镜像:(萌萌哒)?dockerpullregistry:22:Pullingfromlibrary/registrycbdbe7a5bc2a:Pullcomplete47112e65547d:Pullcomplete46bcb632e506:Pullcompletec1cc712bcecd:Pullcomplete3db6272dcbfa:PullcompleteDigest:sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551dStatus:Downloadednewerimageforregistry:2docker.io/library/registry:2最小化配置的DockerHub镜像缓存服务,只REGISTRY_PROXY_REMOTEURL就绪:顺便说一句,我在这里创建了一个名为hub-cache的网络和一个相应的卷。(MoeLove)?~dockernetworkcreatehub-cache19a39f873a23150d3bdaf021e040ccccb092ee3071884d64d52a92df0397b220(MoeLove)?~dockervolumecreatehub-cachehub-cache(MoeLove)?~dockerrun--name==cachehubways--d--restart-vHub-cache:/var/lib/confertry-p5000:5000-econgeistry_proxy_remoteurl=https://registristic-1.docker-1.docker.iocomgristry:26cbdcbdc2d62ec781479901c20beinstrandtermantinstrytermantinstraPORTSNAMES6cbdcbdcc2d6registry:2"/entrypoint.sh/etc..."8秒前Up6秒0.0.0.0:5000->5000/tcp缓存验证加速效果启动新的Docker在Docker容器中进行验证,避免被本地影响环境影响。通过传递--registry-mirrorhttp://cache:5000来设置您刚开始镜像的注册表。(MoeLove)?~dockerrun--network=hub-cache-d--privilegeddocker:dind--registry-mirrorhttp://cache:500073c56ac25d68927c9f5b0e458f2babc0699cf8595df0d1e86c021fd03d477384(MoeLove)?-secpckerexit$-docker~)sh/#检查配置是否有效/#dockerinfo--format'{{.RegistryConfig.Mirrors}}'[http://cache:5000/]/#时间dockerpullprom/prometheusUsingdefaulttag:latestlatest:Pullingfromprom/prometheus76df9210b28c:Pullcomplete559be8e06c14:Pullcomplete6a4bb3319487:Pullcomplete2cca90a64593:Pullcompleted2014e464a99:Pullcomplete70b42590e4a2:Pullcomplete54645fcbd6cc:Pullcomplete67d9943de656:Pullcompleteb9c749b1af90:Pullcomplete9723d8eb5323:Pullcomplete7d20502d5322:Pullcomplete3e519cce6f63:Pullcomplete摘要:sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971状态:为舞会/普罗米修斯下载更新的图像:latestdocker.io/舞会/普罗米修斯:latestreal0m42.71suser0m0.12ms0s0.09s/#dockerimagelsREPOSITORYTAGIMAGEIDCREATEDSIZEprom/prometheuslatestcdfc440228d08daysago168MB/#dockerrmiprom/prometheusUntagged:prom/prometheus:latestUntagged:prom/prometheus@sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971Deleted:sha256:cdfc440228d01d7a94937d7a047fa6461efc1b1806bb20677043fee032810830Deleted:sha256:c72f348fd2f923996ea80222feb77e34aba9de397bd96206ddc3c8651adc306dDeleted:sha256:e34df2c00334266a67bb846b958ba6eae3b1d5cdfe9d763707027a23e7c85100Deleted:sha256:d2cb38310ada122064b7333bbfc12c67dc58acb30e29146b3ba1e24adc27a950Deleted:sha256:7a87cd520d19a83b3582541aac4d95098ae5016b092e72eaf80dc54f587bf51eDeleted:sha256:f84c79dceed6b5a27234c1291d0bdccab5c459d587f13934d74db9b9e79471c6Deleted:sha256:f542b0cffe0fe16c31c98e7eed934d5fea5e598c03b53b4efd308a62e0e9c6a9Deleted:sha256:f746b4a525727bcb79367d009d707ef45d75bac09aaa18a68c20a19046df0897Deleted:sha256:09b45653ee7062c7cd754885bf46ebe554d0794573fb2e200acea8644e64670fDeleted:sha256:867526c56b30e67493341ef33890aa242c1131e4bb4151e60011b4d450892d59Deleted:sha256:86d629b358ee70bdb0f0a11c10915b8551e904fe337f9a8bfcad476977329532Deleted:sha256:842455c528af7383ba4a0de424fc63664a0248581a191516d6dbf45195c69426Deleted:sha256:1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569/#timedockerpullprom/prometheusUsingdefaulttag:latestlatest:Pullingfromprom/prometheus76df9210b28c:Pullcomplete559be8e06c14:Pullcomplete6a4bb3319487:Pullcomplete2cca90a64593:Pullcompleted2014e464a99:Pullcomplete70b42590e4a2:Pullcomplete54645fcbd6cc:Pullcomplete67d9943de656:Pullcompleteb9c749b1af90:Pullcomplete9723d8eb5323:Pullcomplete7d20502d5322:Pullcomplete3e519cce6f63:PullcompleteDigest:sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971Status:Downloadednewerimageforprom/prometheus:latestdocker.io/prom/prometheus:latestreal0m5.27suser0m0.06ssys0m0.03s可以看到第一次拉取prom/prometheus镜像时,耗时42+s,而删除下载的镜像后,再次拉取只需要5+s,速度提升非常明显。实现图像加速效果。对于Linux系统,只需要在/etc/docker/daemon.json文件中写入你的图像加速服务的域名(如果没有该文件,直接创建即可),然后重启dockerdaemon。是(重新加载配置也是可选的)。{"registry-mirrors":["https://hub-cache.moelove.info"]}或者在dockerdaemon的启动参数中添加registry-mirror配置项。对于Mac和Windows用户,直接在DockerDesktop系统设置中配置注册表镜像。说明如果在Dockerdaemon中配置了HTTP_PROXY或HTTPS_PROXY,那么需要在NO_PROXY中配置加速域名,以免被代理。总结本文介绍如何使用Docker的开源registry:2搭建DockerHub的镜像加速服务。这里只介绍最简单的配置。但是如果部署在企业环境中,则需要更多的配置。例如,您可以通过配置REGISTRY_HTTP_DEBUG_PROMETHEUS_ENABLED来暴露Prometheus指标,以监控服务可用性并检查缓存的效果;您可以配置日志和相关字段;为避免11月后触发DockerHub限流,可以横向扩容,准备多个出口IP,配置账号等。最近发布的Harborv2.1好像多了一个proxycache的功能,但是和本文介绍的pullthroughcache不太一样。使用Harbor的代理缓存特性,需要将要拉取的镜像设置为
