#linux #镜像加速 #docker #docker-ce

使用重新打 tag 的方式,拉取 k8s.gcr.io 的镜像

简介

本文为安装 k8s 集群作铺垫,由于国内网络环境,拉取国外镜像真心不容易。使用各种加速源可以快速镜像摘取速度,但是遇到像 k8s gcr.io 这样的私有镜像,国内根本拉不动,只能动用打 tag 的方式来解决了。

先讲讲镜像加速

多年后的 docker 镜像加速已经比较成熟,很多服务商都提供了自己的加速服务。 docker 中国(docker-cn.com), 阿里云等都有加速镜像

linux 上直接修改 /etc/docker/daemon.json 文件

$ vim /etc/docker/daemon.json

添加以下配置文件并重启你的 docker

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

注意 : https://registry.docker-cn.comdocker-cn 的加速镜像,你可以换成阿里云的或其它的。

Mac & Windows 客户端

点击 docker 图标 => 点击 preferences => daemon => 在 registry mirrors 中添加你的加速镜像源

阿里云是每个人不同的镜像地址,点这个地址获取自己的专属地址

阿里云镜像加速地址

以上操作后可以加快你摘取 docker.io 镜像的速度,对于 gcr.io 这种 google 的镜像并起不到加速的效果

所以你可以先把国外的镜像同步到 docker.io

  • 有一台国外的服务器 : 在你的服务器中拉取国外的镜像,之后 push 到 docker.io
  • 利用 github.comtravis : 你可以建一个仓库,在里面添加 .travis.yml 之后把操作命令写在里面
    travis-ci 官方文档

因为我有国外的服务器,所以使用第一种方法

拉取需要的镜像

$ docker pull k8s.gcr.io/kube-apiserver:v1.13.0
$ docker pull k8s.gcr.io/kube-controller-manager:v1.13.0
$ docker pull k8s.gcr.io/kube-scheduler:v1.13.0
$ docker pull k8s.gcr.io/kube-proxy:v1.13.0
$ docker pull k8s.gcr.io/pause:3.1
$ docker pull k8s.gcr.io/etcd:3.2.24
$ docker pull k8s.gcr.io/coredns:1.2.6
$ docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

将拉下来的镜像重新打上 tag 便于上传到自己名下的 docker.io, 注意 这里的 gladmo 是我的用户名,需要改成你的,不传你是 push 不成功的

docker tag k8s.gcr.io/kube-apiserver:v1.13.0 gladmo/kube-apiserver:v1.13.0
docker tag k8s.gcr.io/kube-controller-manager:v1.13.0 gladmo/kube-controller-manager:v1.13.0
docker tag k8s.gcr.io/kube-scheduler:v1.13.0 gladmo/kube-scheduler:v1.13.0
docker tag k8s.gcr.io/kube-proxy:v1.13.0 gladmo/kube-proxy:v1.13.0
docker tag k8s.gcr.io/pause:3.1 gladmo/pause:3.1
docker tag k8s.gcr.io/etcd:3.2.24 gladmo/etcd:3.2.24
docker tag k8s.gcr.io/coredns:1.2.6 gladmo/coredns:1.2.6
docker tag k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0 gladmo/kubernetes-dashboard-amd64:v1.10.0

push 打好的镜像到 docker.io

docker push gladmo/kube-apiserver:v1.13.0
docker push gladmo/kube-controller-manager:v1.13.0
docker push gladmo/kube-scheduler:v1.13.0
docker push gladmo/kube-proxy:v1.13.0
docker push gladmo/pause:3.1
docker push gladmo/etcd:3.2.24
docker push gladmo/coredns:1.2.6
docker push gladmo/kubernetes-dashboard-amd64:v1.10.0

当你要使用时,你只要做上面的逆操作就可以了

docker pull gladmo/kube-apiserver:v1.13.0
docker pull gladmo/kube-controller-manager:v1.13.0
docker pull gladmo/kube-scheduler:v1.13.0
docker pull gladmo/kube-proxy:v1.13.0
docker pull gladmo/pause:3.1
docker pull gladmo/etcd:3.2.24
docker pull gladmo/coredns:1.2.6
docker pull gladmo/kubernetes-dashboard-amd64:v1.10.0

docker tag gladmo/kube-apiserver:v1.13.0 k8s.gcr.io/kube-apiserver:v1.13.0
docker tag gladmo/kube-controller-manager:v1.13.0 k8s.gcr.io/kube-controller-manager:v1.13.0
docker tag gladmo/kube-scheduler:v1.13.0 k8s.gcr.io/kube-scheduler:v1.13.0
docker tag gladmo/kube-proxy:v1.13.0 k8s.gcr.io/kube-proxy:v1.13.0
docker tag gladmo/pause:3.1 k8s.gcr.io/pause:3.1
docker tag gladmo/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag gladmo/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker tag gladmo/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

这样你就可以把一些拉不了的镜像拉取下来了,由于都是命令,所以还是可以做成脚本再自动一点的

最后做一点清理工作

docker rmi gladmo/kube-apiserver:v1.13.0
docker rmi gladmo/kube-controller-manager:v1.13.0
docker rmi gladmo/kube-scheduler:v1.13.0
docker rmi gladmo/kube-proxy:v1.13.0
docker rmi gladmo/pause:3.1
docker rmi gladmo/etcd:3.2.24
docker rmi gladmo/coredns:1.2.6

docker rmi k8s.gcr.io/kube-apiserver:v1.13.0
docker rmi k8s.gcr.io/kube-controller-manager:v1.13.0
docker rmi k8s.gcr.io/kube-scheduler:v1.13.0
docker rmi k8s.gcr.io/kube-proxy:v1.13.0
docker rmi k8s.gcr.io/pause:3.1
docker rmi k8s.gcr.io/etcd:3.2.24
docker rmi k8s.gcr.io/coredns:1.2.6

小结

由于网络环境真是费尽心思啊,什么时候写代码可以不因为网络问题拖慢速度就好了。

Author Mo 最后更新: 2018-12-10 16:17:34