近期由于负责公司的PAAS平台的镜像仓库部分,对registry v2做了一些研究以及以它为基础开发的PAAS平台镜像仓库的过程中,遇到的问题做一些总结。
以上是最为简单的仓库搭建,但是对于实际生产的环境还有很多不足,像可持续化存储,权限控制等等。
下面介绍下可持续化存储:
说白了也就是通过docker自带的把容器中的卷路径挂载到宿主机上功能,通过-v参数来实现,registry v2的默认存储路径是/var/lib/registry,可以直接docker run -e XXXX=/var/lib/registry 这样设置,一般的话通过原生镜像仓库的配置文件来进行配置。
上图中就是关于registry v2存储相关的部分配置,delete配置的意思就是是否支持删除镜像文件,filesystem(auth server开源项目当然你也可以选择其他的存储方式,我这里选择的是文件系统存储),rootdirectory就是存储的路径,manitenance是设置仓库是否设置为只读的,也就是不能上传镜像。
除此之外比较重要的就是权限控制了
registry的权限认证可以选择三种方式silly、token、htpasswd,其中silly我这次没有做一些预演,但是token和htpasswd我这边针对这两种方式说一下,htpasswd是通过apache提供的htpasswd工具生成的一组用户名密码文件,密码是通过加密算法加密过的,其实就是N组用户名密码记录到一个文件里,通过这个做一个简单的用户名控制。但是还达不到生产所需要的目的,下面主要讲下token的权限控制。
首先理解下上图中所提到的auth认证的机制,然后我们看下registry的配置文件相关配置项:
issuer:发行者,必须和auth server的issuer一致。
realm:auth server的地址
rootcertbundle:自签名证书路径
service:任意字符串,获取token的时候要用到
剩下的配置项就是http的配置了,addr是registry的地址,tls是安全传输协议,certificate是自签名证书,key是我们生成证书的私钥。
上面就是目前所需要的整个registry全部配置了。
接下来说下auth server,其实auth server就是用的开源的项目。https://github.com/cesanta/docker_auth
具体说下它的配置方面,
其中token设置项的issuer和registry的issuer保持一致,users是用户的信息。接下来才是最重要的权限控制
account是用户名,service是镜像仓库定义的那个service配置项,type就是类型,一般就是repository和registry,这个是根据请求registry v2接口所需要的scope来确定的,name是进行操作的名字。actions是进行的动作。其中/.+/是登录用户的意思,""是匿名用户的意思。