Docker 镜像拉取加速
Docker 镜像拉取加速
2023年7月19日
摘要
由于国内众所周知的网络原因,从 Docker Hub 拉取镜像的时候,经常需要等很久很久,还不一定能成功。本文提供了几种加速拉取镜像的方案,在国内比较适用。
前置技巧
无论是使用 docker run
还是 docker-compose
,亦或是使用我自己最常用的 Portainer 来部署 Docker 应用时,经常会由于网络原因等待很久都无法完成。由于 Docker 在部署时会先自动查找所需镜像是否有本地已经下载缓存好的版本,所以可以通过预先使用 docker pull IMAGE
拉取的方式来加速后续部署。一旦镜像拉取成功,照常进行之前的部署流程就好,可以跳过下载过程,减少等待过程中带来的心理折磨。
加速方案
本文所使用的加速方案都是通过使用镜像或代理服务器的方式来进行加速,只是使用的平台不同,方法不同。
直接使用镜像站
感谢各大高校和企业的无私奉献,他们在国内搭建了许多 Docker Hub 的镜像站,我们可以通过使用他们来加速镜像的拉取。本文将他们整理如下:
- 南京大学 - https://docker.nju.edu.cn
- 上海交通大学 - https://mirror.sjtu.edu.cn/docs/docker-registry
- 腾讯云 - https://mirror.ccs.tencentyun.com
- 网易云 - https://hub-mirror.c.163.com
- 道客 - https://f1361db2.m.daocloud.io
- 微软 Azure - https://dockerhub.azk8s.com
- 阿里云/成都 - https://registry.cn-chengdu.aliyuncs.com
- 阿里云/深圳 - https://registry.cn-shenzhen.aliyuncs.com
- 阿里云/杭州 - https://registry.cn-hangzhou.aliyuncs.com
- 阿里云/广州 - https://registry.cn-guangzhou.aliyuncs.com
注意这些站点大多为纯镜像站,不是用来给浏览器看的,所以直接打开大概率显示不出任何东西,不代表不能用。
由于各个镜像站都是非营利性的公益性服务,所以说不定哪天某个镜像站就关了,如果一个不行就换另一个多试试,我自己用的比较多的是南京大学的镜像站,一直很快很稳定。不过,听说阿里云的 Docker 镜像站要停止更新了,不知道真假。
话说为什么上交的各种镜像站都那么出名,我大复旦不搞一个啊!!
接下来介绍一下使用方式。
更改配置文件
最长久的方式是直接更改配置文件,首先在 /etc/docker
目录下新建一个名为 daemon.json
的配置文件,如存在则不需要重新创建。编辑该文件,将以下内容粘贴进去:
{
"registry-mirrors": ["https://docker.nju.edu.cn"]
}
你可以自己选择其他镜像站,按此格式编辑即可。
完成编辑后,使用以下命令重新加载各个服务的配置文件:
sudo systemctl daemon-reload
再重启 Docker 服务即可:
sudo systemctl restart docker
再次拉取镜像应该就会比较快了。
拉取时指定镜像站
使用配置文件的方式虽然一劳永逸,但缺点是你无法知晓其在某些时候是否生效,另一个直接在拉取时指定镜像站的方式就显得更为直接,我自己经常使用。
使用方法也很简单,以一个我非常喜欢的专门构建各种易用的 Docker 容器的开源组织 LinuxServer 为例,他们在 Docker Hub 上发布的 Nginx 容器 的 Docker Hub 官方拉取命令是:
docker pull linuxserver/nginx
而在其下方 Documents 里所使用的却是从 lscr.io/linuxserver/nginx:latest
拉取,:latest
标签只是一个版本 tag,无需在意,但前方却追加了一个 lscr.io
的标记,这个就是从其自家的仓库里拉取自家的镜像的方式。
对于这个仓库标记,我们可以去掉,从而从 Docker Hub 仓库拉取,也可以更改为我们想使用的镜像站,比如从南京大学镜像站拉取,我们只需要使用以下命令:
docker pull docker.nju.edu.cn/linuxserver/nginx
非常简单。
Docker Proxy(不推荐)
这玩意儿根据我对其官网的观察,应该是个靠顺便给梯子打广告盈利的,或者干脆就是卖梯子的做的一个推广性的服务,虽然也是半公益性的,但不太纯粹,不过却是用起来也还行。他家还有 GitHub 代理,用着也还行。
这个方案的使用方法和拉取时指定镜像站差不多,直接使用 Docker Proxy 官网 的服务即可。