大家好,欢迎来到今天的 Docker 课程。在使用 Docker 的过程中,我们常常会遇到镜像拉取速度慢的问题,这很大程度上是因为 Docker 默认的镜像源可能距离我们比较远,网络延迟较高。所以,选择一个离我们近且稳定的 Docker 源就显得尤为重要。今天,我就来给大家详细讲解一下如何找到并配置离你最近的 Docker 源。
找到国内有用的 Docker 源
首先,我们需要收集一些国内可用的 Docker 源。为了方便后续操作,我们把这些源的地址存放在一个文件中,这里我们将其命名为reg.txt
。来看一下具体的命令:
cat > reg.txt << EOF
https://docker.registry.cyou
https://docker-cf.registry.cyou
https://docker.1panel.live
https://hub.rat.dev
https://dhub.kubesre.xyz
https://docker.kejilion.pro
https://hub.firefly.store
https://docker.nat.tf
https://hub.crdz.gq
https://hub.docker-ttc.xyz
https://freeno.xyz
https://docker.hpcloud.cloud
https://dislabaiot.xyz
https://doublezonline.cloud
https://hub.xdark.top
https://registry.dockermirror.com
https://docker.mrxn.net
https://docker.chenby.cn
https://ccr.ccs.tencentyun.com
https://hub.littlediary.cn
https://ginger20240704.asia
https://dockerproxy.com
https://noohub.ru
https://docker.nastool.de
https://docker.hlyun.org
https://dockerpull.com
https://dockerproxy.cn
EOF
这里使用了cat
命令结合<< EOF
的语法,它的作用是将我们列出的这些 Docker 源地址写入到reg.txt
文件中。EOF
是一个自定义的结束标记,cat
会一直读取输入,直到遇到EOF
为止。
批量检测脚本 dore.sh
有了这些 Docker 源的列表后,我们需要检测哪些源是可用的。这时候,我们就需要编写一个批量检测的脚本,我们把它命名为dore.sh
。
cat > dore.sh << EOF
#!/bin/bash
# 检查镜像源可用性的函数
check_mirror() {
local mirror=\$1
if curl -s --head --fail "\$mirror/v2/" > /dev/null ; then
return 0
else
echo \${mirror}
echo \${mirror} >> reg.yes
time curl -s --head --fail "\$mirror/v2/" > /dev/null
return 1
fi
}
for mirror in \`cat reg.txt\`; do
if check_mirror "\$mirror" ; then
AVAILABLE_MIRROR=\$mirror
fi
done
mv reg.yes reg.txt
EOF
让我们来详细解析一下这个脚本:
- 首先,
#!/bin/bash
这一行指定了脚本使用的解释器为bash
。 - 接着,我们定义了一个名为
check_mirror
的函数,它接收一个参数$1
,这个参数就是我们要检测的镜像源地址。在函数内部,使用curl
命令来检测镜像源是否可用。curl -s --head --fail "$mirror/v2/"
表示以静默模式(-s
)发送一个 HTTP HEAD 请求(--head
),如果请求失败(--fail
)则返回非零状态码。如果请求成功,将标准输出重定向到/dev/null
(丢弃输出),并返回状态码0
表示可用;如果请求失败,就将该镜像源地址输出并追加到reg.yes
文件中,同时再次使用time curl
命令来记录请求的时间,最后返回状态码1
表示不可用。 - 然后,使用
for
循环遍历reg.txt
文件中的每一个镜像源地址,调用check_mirror
函数进行检测。如果某个镜像源可用,就将其赋值给变量AVAILABLE_MIRROR
。 - 最后,将
reg.yes
文件重命名为reg.txt
,这样就更新了可用镜像源的列表。
我们可以通过以下命令来执行这个脚本:
bash dore.sh
执行脚本后,会输出一些信息,包括不可用的镜像源地址以及每个请求的时间,比如:
[root@C9 ~]# bash dore.sh
https://docker.registry.cyou
real 0m26.061s
user 0m0.005s
sys 0m0.009s
https://docker-cf.registry.cyou
real 0m26.066s
user 0m0.007s
sys 0m0.013s
https://docker.1panel.live
real 0m7.421s
user 0m0.024s
sys 0m0.014s
https://dhub.kubesre.xyz
real 4m22.073s
user 0m0.045s
sys 0m0.020s
https://docker.nat.tf
real 0m26.065s
user 0m0.004s
sys 0m0.009s
选择最快的镜像源并配置 Docker
通过上面的检测,我们得到了各个镜像源的响应时间。接下来,我们要选择响应时间最短的一两个镜像源,将其配置到 Docker 的配置文件/etc/docker/daemon.json
中。
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://ccr.ccs.tencentyun.com",
"https://docker.chenby.cn"
]
}
EOF
systemctl restart docker
这里同样使用了cat
命令将配置信息写入到/etc/docker/daemon.json
文件中,其中registry-mirrors
字段指定了我们选择的镜像源地址。配置完成后,使用systemctl restart docker
命令重启 Docker 服务,使配置生效。
总结
通过以上步骤,我们就完成了选择离你最近的 Docker 源并进行配置的整个过程。首先,我们收集了一些国内可用的 Docker 源地址;然后,通过编写批量检测脚本,检测了这些源的可用性并记录了响应时间;最后,选择最快的镜像源配置到 Docker 中并重启服务。这样,我们在拉取 Docker 镜像时就能获得更快的速度了。