Docker镜像加速 使用HTTP代理直接向Docker官方仓库拉取镜像

上期呢我写过一篇利用Docker的Registry镜像服务器配置代理拉取官方的镜像,但是这存在一个弊端,每次拉取镜像时,都会先将镜像缓存到中转服务器中,然后再分发给用户。这种做法无疑会占用大量的磁盘空间,对Registry镜像服务器的存储资源造成压力,还有,当用户首次拉取一个新的镜像时,实际上需要经历两次完整的镜像下载过程,首先是将镜像下载到镜像服务器,然后再次从服务器拉取到本地。这无疑增加了首次拉取镜像的时间成本,降低效率。

上篇文章回顾:

这篇文章呢介绍的是如何自定义Docker的 systemd 服务单元,通过自定义配置文件实现HTTP代理加速

可能有的人会问: 为什么不直接通过 export HTTP_PROXY 实现呢,这样不更简单吗。

确实这样更简单,在全局环境中设置代理,几乎所有命令行程序,包括 Docker,在执行网络操作时都会使用这个代理,可能会影响到系统中的其他程序,如果通过 Docker 的服务配置文件来设置代理,这样只有 Docker 守护进程会受到代理设置的影响,其他的不会。

 

准备工作

首先呢你需要有一个HTTP代理的节点,可以使用局域网中OpenWrt的某种插件实现HTTP代理服务器,或者说通过goproxy这种专业的代理工具在能够访问docker官方仓库的服务器上进行配置,本篇文章我就以我的OpenWrt HTTP代理为例进行配置。

openwrt

goproxy

安装Docker

安装Docker就不用多说了吧,也可以用我的懒人版 Docker一键脚本进行安装:

https://www.geeklinux.cn/articles/264.html

curl https://download.geeklinux.cn/scripts/install_docker.sh | bash

 

配置Docker的服务单元配置文件

安装完成Docker之后,我们需要配置一下Docker服务的 systemd 服务单元文件

一般默认是在/usr/lib/systemd/system/docker.service

我们需要将这个服务单元文件复制到/etc/systemd/system/目录中

然后再/etc/systemd/system/目录中创建一个docker.service.d/的目录,用于存放 Docker 服务的额外配置文件

当然,你也可以直接编辑docker.service配置文件,这是极力不推荐的!!!

然后在/etc/systemd/system/docker.service.d/目录中创建一个扩展名为*.conf结尾的配置文件 *代表任意字符,你可以自由的定义此名称,只要以.conf为扩展名即可。

然后我们需要编辑你的Docker服务的额外配置文件,填入如下内容

[Service]
Environment="HTTP_PROXY=http://10.0.0.1:1080"
Environment="HTTPS_PROXY=http://10.0.0.1:1080" # http://10.0.0.1:1080为你的HTTP代理地址

懒人办法,直接复制粘贴

cat << 'EOF' > /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.0.0.1:1080"
Environment="HTTPS_PROXY=http://10.0.0.1:1080" # http://10.0.0.1:1080为你的HTTP代理地址
EOF

 

重启服务

完了之后我们不要忘记重新加载 systemd 配置并重启 Docker 服务

rm -f /etc/docker/daemon.json # 删除之前配置的镜像加速,建议检查一下
sudo systemctl daemon-reload
sudo systemctl restart docker

 

重启完了之后执行如下命令,查看一下状态,确认是否正常启动

docker-start

如上图所示,Docker已经正常启动并且成功的加载了额外的服务单元配置文件。

现在就可以愉快的拉取镜像了~

docker-pull

原创文章,作者:geeklinux.cn,如若转载,请注明出处:https://www.geeklinux.cn/cloud-native/docker/265.html

(0)
geeklinux.cn的头像geeklinux.cn
上一篇 2024 年 8 月 12 日 下午7:03
下一篇 2024 年 8 月 16 日 下午11:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注