1. DockerHub 限制
终究还是绕不过下面这个报错:
|
|
DockerHub 从 2020 年 11 月 2 日,正式开始限制非付费用户的拉取频率:
匿名用户,每 6 小时只允许 pull 100 次
已登录用户,每 6 小时只允许 pull 200 次
好吧,正常情况下,到这里就友尽了,不让用就不用。但是再看看这张图:
对于有些团队来说,DockerHub 的功能不仅仅是存储镜像,更重要的是作为分发中心。每次构建完镜像,直接被推送到 DockerHub,然后其他地方再同步镜像。
如此,DockerHub 拉取镜像的限制就不得不解决了。
2. 如何测试
2.1 镜像是如何拉取的
在测试之前,我们先来了解一下镜像是如何拉取的。下图是一个镜像的结构,一个镜像对应着一个 Manifest,也就是这里的 JSON 结构。
为了更具体一点,我们开启 Docker 的实验特征,查看一下 nginx 镜像的 manifest。
|
|
可以看到在 Manifest 中,记录着很多 Layer 的指纹数据,而 Layer 层才是镜像层数据,Manifest 记录的只是元数据。拉取镜像的过程,分为两步:
- 拉取 Manifest
- 根据 Manifest 中的描述,拉取 Layer 层数据。如果本地有缓存,则不用请求。
2.2 测试脚本
- 查看当前 Dockerhub 的拉取余额
如果是登录用户,可以在 curl
后面添加 --user 'username:password'
参数。
|
|
docker-ratelimit-source,表示受限的 IP
ratelimit-remaining,表示的是 21600 秒,6 小时内,剩下的拉取次数余额。
拉取镜像层数据才会消耗余额,因此拉取已经拉取的镜像不会消耗余额。
- 使用脚本耗尽配额
|
|
|
|
- 配置后,继续拉取镜像
这里主要分为三类镜像:
- 第一类是本地存在的镜像
|
|
- 第二类是公共镜像(本地不存在)
|
|
- 第三类是自己编译的镜像(本地不存在)
|
|
3. 配置镜像源解除拉取限制
3.1 可选镜像源及测试结果
镜像源 | 是否有效 | 速度 | 地址 | 备注 |
---|---|---|---|---|
网易 | 有 | *** | https://hub-mirror.c.163.com | |
腾讯 | 有 | ** | https://mirror.ccs.tencentyun.com | 速度还行 |
中科大 | 有 | ** | https://ustc-edu-cn.mirror.aliyuncs.com | 相当于 Aliyun 的公共镜像源 |
阿里云 | 有 | ** | https://<your_code>.mirror.aliyuncs.com | 需要登录,每人一个地址 |
百度 | 无 | - | https://mirror.baidubce.com | 不能使用 |
Azure | 无 | - | https://dockerhub.azk8s.cn | 仅允许 Azure 主机使用 |
网易 | 无 | - | https://hub-mirror.c.163.com | |
Daocloud | 无 | - | https://f1361db2.m.daocloud.io | 已经缓存的本地镜像也无法拉取 |
七牛 | 无 | - | https://reg-mirror.qiniu.com |
总体来看,使用网易或者腾讯的镜像源是个不错的选择。
3.2 配置方法
- 编辑 Docker 的 Daemon 文件
|
|
- 添加网易的镜像源
|
|
- 重启 Docker 服务
|
|