自建简易 docker 镜像源

163 天前
 mosby

很早之前为了省流量缓存镜像折腾的,看到最近突然有人 star 了,分享一下,帮助有需要的人

实现方式是客户端将 gcr.io k8s.gcr.io quay.io docker.io registry-1.docker.io nvcr.io 这些域名解析到自己的机器,利用 nginx 根据域名分流到不同的 docker registry,利用 docker registry 的 pull through cache 功能缓存&加速镜像下载。

如果部署在外网 vps 的话可以直接用,如果部署在内网还需要指定一个代理,具体步骤可以看仓库 README

https://github.com/brighill/registry-mirror

3201 次点击
所在节点    Linux
7 条回复
anubu
163 天前
非常感谢分享,给 OP 点赞。
之前折腾了一个一样的实现,客户端侧老老实实配置 mirror ,发现 docker 只能 mirror dockerhub ,其它仓库直接忽略。被迫切换到 containerd 用它的 hosts.toml 。看到 OP 客户端侧劫持 DNS 解析加 insecure ,豁然开朗。
E1n
163 天前
'''
Error response from daemon: error parsing HTTP 403 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body>\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx/1.20.1</center>\r\n</body>\r\n</html>\r\n"
''' 请问只能默认 80 端口,不能修改端口吗
ebi5oowiiy1llo
162 天前
原来作者也在这里呀,除了解析劫持还有共享存储也很妙,不过我设备多没弄劫持,直接泛域名解析正经用了,还加了个 ui 方便删镜像
raysonlu
162 天前
为何不用 nexus?
mosby
162 天前
@E1n 只能用 80 或者 443 ,其他端口的话镜像 tag 就不一样了,要改到 443 端口的话,理论上自签名一个泛域名证书,nginx.conf 里加上 ssl 配置,客户端信任 ca 证书应该就行了
dream10201
162 天前
话说都上 V2EX 了,配置个代理不行吗?
我用的 podman ,附上配置
# cat /etc/containers/containers.conf.d/proxy.conf
[engine]
env=["HTTPS_PROXY=http://127.0.0.1:10809","HTTP_PROXY=http://127.0.0.1:10809"]
[containers]
http_proxy = false
mosby
162 天前
统一回复一下:
@dream10201
这个使用场景不一样,全走代理只适合个人开发电脑或者节点很少的情况,节点很多的情况全都走代理速度慢又费流量

另外就是某些离线环境,这个镜像仓库缓存好之后把整个目录打包也可以离线使用

4 楼说的 nexus ,可以仔细看下仓库的内容,这个主要是用 nginx 域名分流以及劫持了 dns ,镜像 tag 是保持不变的
比如要部署 kubeflow 之类的一些组件是可以直接使用默认配置,不需要任何改动

还有 2 楼的端口问题,现在更新了一下默认 443 端口了,加了 ssl 证书生成脚本,只需要客户端信任 ca 证书

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1048655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX