上期呢我写过一篇利用Docker的Registry镜像服务器配置代理拉取官方的镜像,但是这存在一个弊端,每次拉取镜像时,都会先将镜像缓存到中转服务器中,然后再分发给用户。这种做法无疑会占用大量的磁盘空间,对Registry镜像服务器的存储资源造成压力,还有,当用户首次拉取一个新的镜像时,实际上需要经历两次完整的镜像下载过程,首先是将镜像下载到镜像服务器,然后再次从服务器拉取到本地。这无疑增加了首次拉取镜像的时间成本,降低效率。
这篇文章呢介绍的是如何自定义Docker的 systemd 服务单元,通过自定义配置文件实现HTTP代理加速
可能有的人会问: 为什么不直接通过 export HTTP_PROXY
实现呢,这样不更简单吗。
确实这样更简单,在全局环境中设置代理,几乎所有命令行程序,包括 Docker,在执行网络操作时都会使用这个代理,可能会影响到系统中的其他程序,如果通过 Docker 的服务配置文件来设置代理,这样只有 Docker 守护进程会受到代理设置的影响,其他的不会。
准备工作
首先呢你需要有一个HTTP代理的节点,可以使用局域网中OpenWrt的某种插件实现HTTP代理服务器,或者说通过goproxy这种专业的代理工具在能够访问docker官方仓库的服务器上进行配置,本篇文章我就以我的OpenWrt HTTP代理为例进行配置。
安装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已经正常启动并且成功的加载了额外的服务单元配置文件。
现在就可以愉快的拉取镜像了~
暂无评论内容