前言
使用Docker时需要首先下载一个官方镜像,例如mysql、wordpress。然而由于众所周知的原因,下载Docker官方镜像可能很慢,甚至下载失败。为此,国内热心市民或组织提供了官方的镜像站点加速服务,从而加速官方镜像的下载。
常用镜像加速地址
以下地址可直接引用,仅整理,不保证可用性:
- 百度:https://mirror.baidubce.com
- 科大:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com
- 道客:http://f1361db2.m.daocloud.io
以下需要注册才能获取加速地址:
- 阿里:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 华为:https://console.huaweicloud.com/swr
参考地址:
- 道客:https://www.daocloud.io/mirror
- 科大:https://mirrors.ustc.edu.cn/help/dockerhub.html
- 其他:https://yeasy.gitbook.io/docker_practice/install/mirror
- 七牛:https://kirk-enterprise.github.io/hub-docs/#/user-guide/mirror
常用镜像同步工具
以下工具都不依赖docker环境,同步镜像时不落本地盘:
- skopeo:https://github.com/containers/skopeo/blob/master/docs/skopeo-sync.1.md
- 阿里云image-syncer:https://github.com/AliyunContainerService/image-syncer
可结合公网免费CICD工具githubAction、TravisCI、CircleCI、gitlabCI等,将gcr.io镜像定时同步到个人dockerhub账号下或国内阿里云镜像仓库中。
其他开源项目,可直接使用:
国内镜像源替换
针对部分国外镜像仓库无法访问问题,国内阿里云或dockerhub可能有转存镜像可用,拉取后需自行修改tag:
阿里云镜像仓库
可以拉取k8s.gcr.io镜像
#示例
docker pull k8s.gcr.io/pause:3.2
#改为
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
dockerhub镜像仓库
如果比较幸运,可以在dockerhub搜索到别人同步的最新k8s.gcr.io
镜像
docker命令搜索,排名及star靠前的比较靠谱,然后再去dockerhub确认是否有最新版本:
[root@localhost ~]# docker search kube-apiserver
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mirrorgooglecontainers/kube-apiserver-amd64 34
aiotceo/kube-apiserver k8s.gcr.io/kube-apiserver 20
mirrorgooglecontainers/kube-apiserver 18
kubesphere/kube-apiserver 7
kubeimage/kube-apiserver-amd64 k8s.gcr.io/kube-apiserver-amd64 4
empiregeneral/kube-apiserver-amd64 kube-apiserver-amd64 4 [OK]
gotok8s/kube-apiserver 3
graytshirt/kube-apiserver Alpine with the kube-apiserver binary 2
zhaowenlei/kube-apiserver from gcr.io/google-containers/kube-apiserver 1
k8smx/kube-apiserver 0
mesosphere/kube-apiserver-amd64 0
lchdzh/kube-apiserver kubernetes原版基础镜像,Registry为k8s.gcr.io 0
kope/kube-apiserver-healthcheck 0
ggangelo/kube-apiserver 0
pigletfly/kube-apiserver-amd64 kube-apiserver-amd64 0 [OK]
mesosphere/kube-apiserver 0
k8simage/kube-apiserver 0
kubeimage/kube-apiserver k8s.gcr.io/kube-apiserver 0
woshitiancai/kube-apiserver 0
ist0ne/kube-apiserver-amd64 https://gcr.io/google_containers/kube-apiser… 0 [OK]
rainbond/kube-apiserver 0
ramencloud/kube-apiserver k8s.gcr.io/kube-apiserver 0
maichong/kube-apiserver-amd64 kube-apiserver-amd64 0 [OK]
kontenapharos/kube-apiserver 0
htcfive/kube-apiserver kube-apiserver from gcr.io 0
镜像加速配置示例
以docker配置阿里云镜像加速为例:
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
然后重新启动 Docker 服务:
systemctl daemon-reload && sudo systemctl restart docker
验证配置是否生效
$ docker info | grep Mirrors -A1
Registry Mirrors:
https://uyah70su.mirror.aliyuncs.com/
验证镜像拉取速度
time docker pull centos
直接拉取国外镜像
如果你已经在本地windows上使用 某种不可名状
的工具,默认可以通过它的1080、7890等端口来拉取镜像。在安装docker的linux服务器执行以下操作,其中192.168.0.103是你本地windows能上网的网卡IP:
mkidr -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.0.103:1080"
EOF
systemctl daemon-reload && systemctl restart docker
注意还要在客户端里鼠标右键勾选允许其他设备连接。以上配置完成后即可直接拉取google镜像
# docker pull k8s.gcr.io/kube-apiserver:v1.16.1
v1.16.1: Pulling from kube-apiserver
39fafc05754f: Already exists
010af2aa5529: Pull complete
Digest: sha256:80feeaed6c6445ab0ea0c27153354c3cac19b8b028d9b14fc134f947e716e25e
Status: Downloaded newer image for k8s.gcr.io/kube-apiserver:v1.16.1
k8s.gcr.io/kube-apiserver:v1.16.1
查看gcloud容器仓库镜像
google cloudshell 类似web shell连接工具,你可以把它当做一个永久免费并且拥有5GB存储空间的linux服务器,能够执行所有docker命令和bash命令。
最重要的是它能够访问全球网络,所以如果你有能力连接到它,可以直接在上面使用docker命令拉取推送镜像到任何地方,这里主要介绍如何登录到cloudshell检索gcr.io中的镜像。
查看某个项目下的镜像
gcloud container images list --project google-containers
gcloud container images list --project kubernetes-helm
gcr.io镜像
查看某个仓库所有镜像
gcloud container images list --repository=gcr.io/google-containers
查看某个镜像所有tag
gcloud container images list-tags gcr.io/google-containers/metrics-server
k8s.gcr.io镜像
gcloud container images list --repository=k8s.gcr.io/metrics-server
gcloud container images list-tags k8s.gcr.io/metrics-server/metrics-server
gcloud container images list-tags \
k8s.gcr.io/metrics-server/metrics-server \
--format="table(TAGS)" \
--filter="tags:*" | grep -v TAGS
示例截图:
kubernetes 二进制文件国内源
kubernetes 主要的二进制文件是kubectl、kubelet以及kubeadm,无法找到 kubernetes 二进制文件的国内源,但是有基于包管理器的yum源和deb源。
阿里云国内kubernetes源:https://developer.aliyun.com/mirror/kubernetes/
清华源国内kubernetes源:https://mirrors.tuna.tsinghua.edu.cn/help/kubernetes/
方案1:通过国内源安装
如果要安装kubectl、kubelet、kubeadm,可以通过配置yum源或deb源方式,使用包管理器 dnf install
或者 apt install
方式安装,具体参考上面链接。
方案2:直接获取二进制文件
如果需要直接获取二进制文件,一种方案是直接从官方链接下载,示例如下:
wget https://dl.k8s.io/release/v1.31.0/bin/linux/amd64/kubectl
但是下载速度实在是夸张,以阿里云按流量计费ECS实例来测试,仅有12.0KB/s
,因此命令行下载很慢,但是直接从浏览器下载相对较快,具体原因不明。:
由于国内有相关的rpm或deb源,另一种折中的方案是下载rpm包或deb包文件,然后从其中提取二进制文件。
1、RPM包示例:
使用docker快速运行一个rockylinux9操作系统环境,如果你已经有redhat系操作系统,可以省略该步骤。
root@node71:~# docker run -it --rm docker.io/library/rockylinux:9.3 bash
[root@4c1cb1e0edb5 /]#
在容器中安装相关依赖
dnf install -y wget cpio
获取RPM包下载地址
从国内源下载RPM包(下载速度很快)
wget https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/x86_64/kubectl-1.31.0-150500.1.1.x86_64.rpm
从RPM包中提取kubectl二进制文件,提取后即可以复制到任意需要使用的地址。
[root@4c1cb1e0edb5 /]# rpm2cpio kubectl-1.31.0-150500.1.1.x86_64.rpm | cpio -idmv
./usr/bin/kubectl
./usr/share/doc/packages/kubectl
./usr/share/doc/packages/kubectl/README.md
./usr/share/licenses/kubectl
./usr/share/licenses/kubectl/LICENSE
110152 blocks
[root@4c1cb1e0edb5 /]#
[root@4c1cb1e0edb5 /]# ./usr/bin/kubectl version
Client Version: v1.31.0
Kustomize Version: v5.4.2
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@4c1cb1e0edb5 /]#
2、DEB包示例:
使用docker快速运行一个ubuntu操作系统环境,如果你已经有debain系操作系统,可以省略该步骤。
root@node71:~# docker run -it --rm docker.io/library/ubuntu:22.04 bash
root@88cc2ab722d5:/#
在容器中安装相关依赖
apt update -y
apt install -y wget
获取DEB包下载地址
从国内源下载DEB包(下载速度很快)
wget https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/amd64/kubectl_1.31.0-1.1_amd64.deb
从DEB包中提取kubectl二进制文件,提取后即可以复制到任意需要使用的地址
root@88cc2ab722d5:/# dpkg-deb -x kubectl_1.31.0-1.1_amd64.deb ./extracted_files
root@88cc2ab722d5:/#
root@88cc2ab722d5:/# ./extracted_files/usr/bin/kubectl version
Client Version: v1.31.0
Kustomize Version: v5.4.2
The connection to the server localhost:8080 was refused - did you specify the right host or port?