goproxy.io是一款很好用的Golang Module Proxy,解决了国内用户无法直接下载Golang模块依赖的问题。 本文准备研读一下其开源代码github.com/goproxyio/goproxy,了解下其实现原理。 goproxy工程的主要目录结构如下:
部署 registry 容器 首先我们在本地部署一个 registry 容器,再使用 skopeo 工具替代 Docker 命令行客户端进行 copy 镜像和 delete 镜像。 启动 registry 容器,docker run! -v /var/lib/registry:/var/lib/registry ,将本地的存储目录挂载到容器内的 registry 存储目录下。 -v pwd/certs:/certs,将生成的 SSL 证书挂载到容器内。 -e REGISTRY_STORAGE_DELETE_ENABLED=true,添加该参数才能进行 DELETE 镜像操作,不然的话会提示 Error in deleting repository in a private registry V2 #1573 这种错误。 GC 是什么? GC(Garbage collection)指垃圾回收。此前,《Kubernetess 中的垃圾回收》一文对 GC 的概念、策略以及实现方法有过简单的介绍。现在,我们通过 Docker 官方文档 Garbage collection 的例子对其进一步了解。 假如有镜像 A 和镜像 B,分别引用了layer a、b 和 a、c。