网站做备案需要多久高端品牌网站建设优势
news/
2025/9/23 22:11:16/
文章来源:
网站做备案需要多久,高端品牌网站建设优势,莱芜信誉好的网络推广公司,深圳高端网站制作公司排名提到registry v2#xff0c;主要改进是支持并行pull镜像#xff0c;镜像层id变成唯一的#xff0c;解决同一个tag可能对应多个镜像的问题等等。如果还不太了解#xff0c;可以且听我细细道来。首先不得不说的是v2 新加了一个概念Digest他是基于内容进行寻址(Content-addres…提到registry v2主要改进是支持并行pull镜像镜像层id变成唯一的解决同一个tag可能对应多个镜像的问题等等。如果还不太了解可以且听我细细道来。首先不得不说的是v2 新加了一个概念Digest他是基于内容进行寻址(Content-addressable)算法算出来的一串hash值。简单的说就是内容不同得出了的digest值是不同的但是内容相同的话得出的digest值是一定相同的。我们的每个镜像层id就是根据每个镜像层的内容得出来的digest的。所以你在改动镜像层以后生成的digest就不同了而不动的话这个digest还是不变的那么这个digest id是什么时候生成的呢我们在本地构建镜像时生成的镜像层id每次都是不一样的这个digest是我们在push镜像时生成的。为了验证内容相同push到registry得到的digest相同我做了个小实验用如下Dockerfile 注释掉第三行和不注释构建了两次镜像再push到registry如果是v1的话push上去得到的层id肯定是不一样的但是v2里面注释第三行得到了5个镜像层不注释掉第三行得到了6个镜像层并且第一次的5个层都包含在第二次6个里面。所以得出结论这个digest确实是根据内容生成的。接下来说一下镜像的id镜像id也是生成了一个digest值镜像id是根据_manifest这个文件也就是镜像层id和镜像名字等一些其他信息生成的digest。我们在每次向v2 push镜像时候最后都会返回给docker client一个digest值这个值就代表了镜像的digest id。这个id的作用就是可以指定唯一的镜像了。类似tag使用。因为我们知道v1时候用tag有个弊病就是多次构建的镜像可以使用同一个tag导致我们用tag标识镜像的时候可能并不是我们想要的而用了digest就不会出现这种问题。我们在写Dockerfile的时候引用镜像就可以这么用FROM localhost:5000/testsha256:ac81211548c0d228e10daaf76f6e0024e5f91879c8a7e105e777d6f964270449像使用tag一样用本地docker查看镜像digests时候可以使用docker images --digests当然目前来说你看到的都是我们需要从registry上pull下来使用docker pull localhost:5000/testsha256:ac81211548c0d228e10daaf76f6e0024e5f91879c8a7e105e777d6f964270449了解了digest我们来看一看registry的存储结构这部分最好可以对着registry的文件夹结构来看。简单的画了个草图。是v2的文件夹层级关系这个是目录下具体的样子可以先看一会儿可以看到registry 下面有两个文件夹blobs和repositoriesblobs下面存储了registry的所有基本信息元素包括镜像层digest和镜像digest之后在通过某种方式将调用这里的信息。blobs文件夹下面先分了一个等级是digest的前两位字符组成的文件夹为了筛选digest避免了这个文件夹太大查看时都难。这样方便定位。每个blob里都有一个data文件存储相关信息。repositories下面存储的是各个镜像名字命名的文件夹进入一个镜像文件夹后可以看到三个子文件夹_layers, _manifests, _uploads_layers这个文件夹是跟这个镜像有关的所有镜像层进入其中一个镜像层文件夹下面只有一个文件--link命名的文件里面的内容就是一个digest。这就跟blobs下面的镜像层建立起了联系在repositories这个文件夹下都是通过link文件与blobs文件夹下的文件建立的联系。_upload这个文件夹平时点进去是空的这个文件夹主要作用是上传用的。我们上传镜像层的时候先上传到这个文件夹下等完成传输以后在将这个文件夹下的内容移动到blobs下面然后将原来的文件删除。_manifest这个文件夹非常重要是镜像的相关信息。他下面有两个子文件夹revisions和tagsrevisions这个文件夹下是这个镜像的所有可用的镜像digest里面的link文件指向了镜像的digest。我们去blobs里面找相应的id对应的文件查看文件下面的data我们发现这个data文件里面存储的信息和我们通过registry v2 rest api请求manifest信息相同~在看_manifest/tags/。下面就是这个镜像的不同tag了。又分了current和index分别表示当前tag对应的digest和此tag下的所有镜像digest。下面来介绍一下如何搭建token验证的registry先看一下官方给的图可以看到v2和v1相比访问形式完全变了去掉了index server加上了一个auth server。访问顺序是这样的我们通过docker client让docker deamon先访问registryregistry如果不需要身份验证则直接返回结果若需要验证返回401并在header附带一些信息daemon根据信息访问auth server。auth server判断通过了验证并返回给daemon一串token。daemon带着这串token再去访问registry则可以获得到信息pull pushapi都走的这套流程。接下来贴下我的配置文件config.yml配置了选项auth/token表示要token验证。这个流程确实需要好好读一下跟她的加密方式有很大关系version: 0.1log:fields:service: registrystorage:cache:blobdescriptor: redisfilesystem:rootdirectory: /var/lib/registryhttp:addr: :5000secret: randomstringsecrettls:certificate: /root/sslkeys/domain.crtkey: /root/sslkeys/domain.keyauth:token:realm: https://registry.tenxcloud.com:5001/authservice: test123.tenxcloud.com:5000issuer: qwertyuirootcertbundle: /root/sslkeys/domain.crt当然我是通过容器启动的v2把这个config volume进去的我的启动命令docker run -d -p 5000:5000 --restartalways --name registry -v pwd/sslkeys:/root/sslkeys -v pwd/config.yml:/etc/docker/registry/config.yml -v pwd/data:/var/lib/registry registry:2.1.1auth/token下的4个子选项都是必须配置的realm表示我的auth server地址service表示的registry的地址issuer是一串标示符随便写一下auth server加密的时候也需要配置同样的字符串。rootcertbundle配置一个秘钥对token进行加密。(我这里复用了我的tls token)当我们第一次未带token访问registry时会返回401并附带如下信息Www-Authenticate: Bearer realmtest123.tenxcloud.com:5000 ,servicetest123.tenxcloud.com:5000 scoperepository:husseingalal/hello:pushrealm和service就是前面说的scope表示的是我要做的操作repository代表镜像接着是镜像名字然后是pull或者是push或者二者都有知道了各个参数的功能就可以搭建我们的auth server了我从github下找到了一个项目https://github.com/cesanta/docker_auth用go语言写的其中的账号密码存储方式有写入文件ldap和google账号的。这个server实现了动态加载配置文件配置文件有变化这个server会进行安全的重启所以可以对文件动态添加账号密码。当然也可以自己写身份验证添加数据库等方式的只需要继承Authenticator这个interface就可以。添加起来很容易。身份验证后有权限控制acl并且我们也可以自定义权限控制继承Authorizer这个interface即可。前两项通过后就是生成token(这一部分这个项目已经封装好了不用改动)v2的token采用的JWT加密方式JWT分了三个部分headerpayload,signatureheader里面带的信息是token加密方式一般都是base64 payload里带的都是需要的基本信息user,权限过期时间还有前面说的issure 等等signature是headerpayload后用秘钥进行加密这个秘钥就是配置在registry里的rootcertbundle对应的秘钥。三部分通过 . 连接, 因为有秘钥加密保证了token信息不会被窜改这种加密方式保证了将权限验证和registry分离也 是安全的, 将token发送回daemon后daemon就可以带着token去正常访问registry了如果是rest api直接将其写成Bearer token就可以请求了。有疑问加站长微信联系(非本文作者)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914044.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!