Docker多镜像仓库缓存代理方案

起因

  • 在最开始学习openstack的过程中一直希望有更方便的openstack部署方法,无论在单机测试还是生产环境
  • 现在经过openstack社区的蓬勃发展,出现了一系列openstack on k8s以及openstack on docker部署项目
  • 然而无论是部署kubernetes(k8s.gcr.io)还是部署openstack(quay.io/docker.io)所需的镜像都来自海外
  • 此外在生产环境中集群化部署时每台节点都需要拉取所需的镜像,不过其中的绝大部分都是重复的
  • 以及若要部署相同版本openstack的多个集群时,也会涉及镜像需要重新拉取耗时耗力的问题
  • 因此本文的多镜像仓库缓存代理方案主要目的有以下三点:
    1. 镜像拉取加速
    2. 拉取同时缓存
      • 同时可将缓存拷贝迁移重复使用
    3. 一站式支持多个常用的镜像仓库,如
      • registry-1.docker.io
      • k8s.gcr.io
      • gcr.io
      • quay.io
  • 方案地址:https://github.com/ohmyadd/mirror

镜像加速功能

  • 不用我多说了
  • 方案选择上有两个点:
  • 从哪来
    • 其实就是配置在OUTPUT 还是 PREROUTING的问题
    • 最后因为容器网络的特殊性和方案简洁性,选择了OUTPUT,所有容器共用同一个网络namespace
  • 怎么走:
    • TCP可以走REDIRECT,但不能走TPROXY
    • UDP可以走TUNNEL,也可以走TPROXY,但不能走REDIRECT
    • 最后综合选择了TCP(REDIRECT) + UDP(TUNNEL)

镜像缓存功能

  • 镜像缓存功能由docker官网提供的registry镜像提供
  • 官网registry镜像的使用和配置,在docker官方文档中都详细介绍
  • registry的配置文件就是一个yaml格式的文件,想要修改其配置有两种方式
    1. 写好整个yaml然后挂载进容器
    2. 通过环境变量配置单个配置项,如REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY配置如下代码块中的配置项
      • 可以看出规则是以REGITRY_开头,后面配置项的路径以_替换.,并写英文全部大写
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  • 有关镜像缓存代理的配置非常简单,只有三项:
    • remoteurl: 想要代理的镜像仓库的地址,必填
    • username password:连接本代理使用的用户名密码,可选
    • 根据上面的配置项转换规则,只需要把目标仓库地址写在REGISTRY_PROXY_REMOTEURL环境变量即可

多库集成功能

  • 方案中的镜像缓存代理都没有使用ssl,因此四个仓库代理都会开在80端口
  • 因此我们需要一个根据url路径选择反代对象的功能,这个是nginx本行
  • 所以写好一个nginx反代配置,挂在进官方nginx镜像就好了
  • 最后如果需要添加新的仓库代理的话,记得在nginx.conf里面也添加相应的配置

How-To说明

  • 如何使用镜像缓存代理

    • 本节指当镜像代理启动好后,内网其他主机如何使用本机提供的服务
    • 因此本节配置都是写在其他使用本机服务的主机
    • docker官方仓库:
      • 内容:"registry-mirrors": ["http://10.122.1.164"]
      • 路径:/etc/docker/daemon.json
    • 其他仓库:
      • 内容:"insecure-registries": ["k8s.gcr.io", "quay.io", "gcr.io"]
      • 路径:/etc/docker/daemon.json
      • 需要在集群DNS或本机hosts文件中把这三个域名指向缓存代理的IP地址
    • 记得把IP替换成你的IP
    • 修改配置后需要重启docker
    • 最后daemon.json可以总结为{"mtu": 1350, "registry-mirrors": ["http://10.122.1.164"], "insecure-registries": ["k8s.gcr.io", "quay.io", "gcr.io"]}
  • 如何迁移镜像的缓存

    • 本文方案的所有registry的数据文件全部挂载在/var/lib/registry
    • 因此无论是备份还是复制迁移,只需要操作/var/lib/registry,再启动新的compose,就可以使用之前缓存好的镜像文件了

Finally

  • docker-compose中的bridge类型network是可选的
    • 之所以添加是因为我们底层网络的mtu不是1500,而是由于底层是overlay的网络而mtu减小的网络
    • 因此必须在容器网络中配置mtu相应的减小,不然传输大文件时会丢数据包
    • 底层网络是物理以太网络时就不是必须修改mtu,但配置的小一点也没有问题
    • 如果要删除这个network的话,记得把容器连接网络的配置也删掉
  • 一个有意思的事情是
    • 去年的时候(2019)quay.io还不支持v2版本的manifest
    • 所以其他三个仓库使用2.7版本的registry,而quay.io只能用2.3.0版本的
    • 当时被quay.io着实恶心了一下,然而2.3.0版本是proxy功能 与 manifest v1功能的交集版本
    • 所以又因为自己灵机一动找到了这个版本作为解决方式很开心哈哈
    • 不过都已经是过去时了,现在(2020)quay.io已经支持了manifest v2,只是在这里小小记录一下
  • 再次感谢开源世界
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342