gcr.io 仓库代理 — 漠然

gcr.io 仓库代理

2017/02/09 Docker

对于 kubernetes 用户来说很头疼的问题就是 1.4 以后组件容器化,而相关镜像在 Google gcr.io 仓库;对于国内的网络环境(傻逼 GFW、一群脑残、闭关锁国、妈了个蛋的…好了下面继续)来说,这些镜像下载极其困难;当然国内 IT 巨头一般都提供了所谓的 “Docker 加速器”,但是由于使用众多,速度也不尽人意;这里开放一个个人维护的反代仓库

一、仓库使用

注意:本仓库需要 docker 1.12 版本使用,最新的 1.13 无法使用,不推荐 1.13 和最新的 k8s 组合

1.1、启动代理仓库

docker run -dt --privileged --name gcr-registry -p 5000:5000 --restart always mritd/gcr-registry:1.0.0

1.2、配置 docker 非安全 registry

# centos
vim /usr/lib/systemd/system/docker.service
# ubuntu(好像是这个位置)
vim /lib/systemd//system/docker.service

# 在 ExecStart 后增加 --insecure-registry registry_address,如下所示
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.120:5000

然后重载配置

systemctl daemon-reload
systemctl restart docker

1.3、拉取镜像

此时直接对私服拉取镜像即可,注意要加 google_containers 前缀

docker pull 192.168.1.120:5000/google_containers/etcd-amd64:3.0.14-kubeadm

如果有兴趣自己搭建请看第二部分,共享的仓库相关设置已经做了加密;为了防止滥用已经以黑箱形式 push 到 Docker Hub,每个月大约有 500G 流量可供使用,请大家节约;使用时最好 pull 到本地,然后 save 出来以作备用和集群分发;请不要集群部署时全部采用此仓库进行 pull;目前处于试运行,随时可能跑路(建立在有人恶意使用的情况下);如果你感觉这个仓库对你有帮助,欢迎请我喝杯咖啡:

alipay

二、仓库基本原理

大致上想在墙内获取 gcr.io 镜像一般有两种方式:

  • 在本地开梯子,docker 设置全局代理,然后 pull 镜像
  • 架设反代私服,在国外服务器架设私服,或者给国内架设私服并给私服套个梯子

关于如何给 docker 设置代理请参考 这个脚本,如果本地是 http/https 代理只需要更改脚本的协议头即可;以下介绍私服反代 gcr.io

2.1、国外服务器反代

这种情况相对简单,只需要在国外服务器中启动一个 docker 官方仓库,同时修改一下 docker registry 配置文件,添加代理仓库地址即可;官方配置文件 在这里,修改如下

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
# 指定反代仓库
proxy:
  remoteurl: https://gcr.io

由于 registry 位于国外服务器,所以不受 GFW 影响,此时本地 docker 直接向国外服务器 pull 即可,注意 pull 时 镜像增加 google_containers 前缀

2.2、国内服务器反代

国内服务器想反代的话由于在国内,所以办法只有一个,给 registry 套上一个代理,使 registry 可以通过代理连接到 gcr.io,经过测试,官方 registry 只接受 http/https 代理,不接受 socks5 协议;具体方法如下所示

  • 获取官方 registry 仓库 Dockerfile 相关文件(地址点这里)
  • 想办法在本地搞一个 http/https 代理
  • registry serve 命令启动前声明代理

再直白一点做法就是 https_proxy=http://xxxxx registry serve,剩下的各位自己探索吧

转载请注明出处,本文采用 CC4.0 协议授权

Search

    Post Directory