很早之前为了省流量缓存镜像折腾的,看到最近突然有人 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
1
anubu 163 天前 1
非常感谢分享,给 OP 点赞。
之前折腾了一个一样的实现,客户端侧老老实实配置 mirror ,发现 docker 只能 mirror dockerhub ,其它仓库直接忽略。被迫切换到 containerd 用它的 hosts.toml 。看到 OP 客户端侧劫持 DNS 解析加 insecure ,豁然开朗。 |
2
E1n 162 天前
'''
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 端口,不能修改端口吗 |
3
ebi5oowiiy1llo 162 天前 via Android 1
原来作者也在这里呀,除了解析劫持还有共享存储也很妙,不过我设备多没弄劫持,直接泛域名解析正经用了,还加了个 ui 方便删镜像
|
4
raysonlu 162 天前
为何不用 nexus?
|
5
mosby OP @E1n 只能用 80 或者 443 ,其他端口的话镜像 tag 就不一样了,要改到 443 端口的话,理论上自签名一个泛域名证书,nginx.conf 里加上 ssl 配置,客户端信任 ca 证书应该就行了
|
6
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 |
7
mosby OP 统一回复一下:
@dream10201 这个使用场景不一样,全走代理只适合个人开发电脑或者节点很少的情况,节点很多的情况全都走代理速度慢又费流量 另外就是某些离线环境,这个镜像仓库缓存好之后把整个目录打包也可以离线使用 4 楼说的 nexus ,可以仔细看下仓库的内容,这个主要是用 nginx 域名分流以及劫持了 dns ,镜像 tag 是保持不变的 比如要部署 kubeflow 之类的一些组件是可以直接使用默认配置,不需要任何改动 还有 2 楼的端口问题,现在更新了一下默认 443 端口了,加了 ssl 证书生成脚本,只需要客户端信任 ca 证书 |