当前位置: 首页 > news >正文

合肥个人做网站北京网站备案拍照地点

合肥个人做网站,北京网站备案拍照地点,做seo要明白网站内容乃重中之重,台州seo网站推广Registry Docker Distribution Docker Distribution 是第一个是实现了打包、发布、存储和镜像分发的工具#xff0c;起到 docker registry 的作用。#xff08;目前 Distribution 已经捐赠给了 CNCF#xff09;。其中 Docker Distribution 中的 spec 规范后来也就成为了 O…Registry Docker Distribution Docker Distribution 是第一个是实现了打包、发布、存储和镜像分发的工具起到 docker registry 的作用。目前 Distribution 已经捐赠给了 CNCF。其中 Docker Distribution 中的 spec 规范后来也就成为了 OCI distribution-spec 规范。可以认为 Docker Distribution 实现了大部分 OCI 镜像分发的规范二者在很大程度上也是兼容的。 OCI 的指导思想时先有工业界的实践再将这些实践总结成技术规范因此尽管 OCI 的 distribution-spec 规范还没有正式发布目前版本是 v1.0.0-rc1但以 Docker Distribution 作为基础的镜像仓库已经成为普遍采用的方案docker registry http api v2 也就成为了事实上的标准。 Harbor harbor 也是采用了 Docker Distribution docker registry作为后端镜像存储服务在 harbor 2.0 之前的版本镜像相关的功能大部分是由 Docker Distribution 来处理镜像和 OCI 等制品的元数据是 harbor 组件从 docker registry 中提取出来的harbor 在 2.0 版本之后镜像等 OCI 制品相关的元数据由 harbor 自己来维护而且元数据是在 PUSH 这些制品时写入到 harbor 的数据库中的。 正因得益于此harbor 不再仅仅是个用来存储和管理镜像的服务而一个云原生仓库服务能够存储和管理符合 OCI 规范的 Helm Chart、CNAB、OPA Bundle 等多种 Artifact。 Docker Registry to Harbor 回到本文主题如何将 docker registry 中的镜像迁移至 harbor 假如内网环境中有两台机器一台机器上运行着 docker registry域名假设为 registry.k8s.li 。另一台机器运行着 harbor假设域名为 harbor.k8s.li。现在 docker registry 中存放了五千个镜像。harbor 是刚刚部署的里面还没有镜像。在磁盘和网络没有限制的情况下如何高效地将 docker registry 中的镜像迁移到 harbor 中呢 获取 Registry 所有镜像的列表 首先在迁移之前我们要获取一份 docker registry 中镜像的列表这样我们才能保证迁移后没有镜像丢失。根据《 深入浅出容器镜像的一生》一文中提到的 registry 的存储目录结构。在 registry 存储目录中每个镜像的 tag 都是由 current/index 这个文件指向该 tag 镜像的 manifests 文件的由此我们可以通过遍历 registry 存储目录中 current/index 文件的方式来得到所有镜像的 tag由此得到该 registry 中所有镜像的列表。注意这样只能得到有 tag 的镜像其他没 tag 的镜像无法获取到。 可通过如下命令在 registry 存储目录下获取镜像列表 Harbor 创建 project 对于新部署的 harbor 来说上面只会有一个默认的 library 的 project需要手动在 harbor 上创建 docker registry 中对应的 project。docker registry 中镜像的 project 就是 registry 存储目录中 repositories 下的目录名。 得到了镜像列表以及在 harbor 上完成了对应 project 的创建我们就可以做正式的迁移工作啦。根据不同的场景可使用如下几种方案 方案一docker retag 方案一可能是大多数人首先想到的办法也是最简单粗暴的方法。就是在一台机器上使用 docker pull 下 docker registry 中的所有镜像然后再 docker retag 一下再 docker push 到 harbor 中。 如果之前看过我写的《深入浅出容器镜像的一生》和 《镜像搬运工 skopeo 初体验》并且已经在日常生活中使用 skopeo 一定会觉得这并不是个聪明的方案因为 docker pull – docker tag – docker pull 的过程中会对镜像的 layer 进行解压缩。对于只是将镜像从一个 registry 复制到另一个 registry 来说这些 docker 在这些过程中做了很多无用功。详细的原理可以参考上述两篇文章在此不再赘述。 为了追求高效我们不使用 docker retag 方案下面看一下方案二 方案二skopeo 在《镜像搬运工 skopeo 初体验》一文中介绍过可以使用 skopeo copy 直接从一个 registry 中复制镜像原始 blobs 到另一个 registry 中在此期间不会涉及镜像 layer 解压缩操作。在性能和耗时两个角度上都比使用 docker 的方式高效很多。 使用 skopeo copy 使用 skopeo sync 无论是 docker 和 skopeo 本质上都是通过 registry 的 HTTP API 下载和上传镜像的在这过程中还是多了不少 HTTP 请求的如果走的是 HTTPS 的话还涉及了 HTTPS 加密和解密的过程这期间有很多无用功。那么还有没有更好的办法 方案三迁移存储目录 文章开头提到 harbor 的后端镜像存储也是使用的 docker registry对于一个 registry 来说只要是使用的是 Docker Distribution V2 它后端的存储目录结构都是一模一样的。那为什么不直接将 registry 的存储目录打包复制并解压到 harbor 的 registry 存储目录这样又能保证所有的镜像都迁移过去不会落下任何一个。 对于 harbor 1.x 版本来讲将 docker registry 的存储目录直接迁移到 harbor 的 registry 存储目录然后删除 harbor 的 redis 数据因为 harbor 的 redis 缓存了镜像的元数据信息重启 harbor 就好了。重启 harbor 之后harbor 会调用后端的 registry 去提取镜像的元数据信息并存储到 redis 中。这样就完成了迁移的工作。 在 docker registry 机器上备份 registry 存储目录 备份完成之后将 docker.tar scp 到 harbor 机器上然后在 harbor 机器上恢复 registry 存储目录 这样迁移之后可能会遇到无法往 harbor push 镜像的问题。因为 docker registry 容器内 registry 存储目录的所属和所属组为 root而 harbor registry 容器内 registry 存储目录的所属和所属组为 10000:10000二者权限并不相同会导致 harbor 无法 push 镜像。因此在迁移完成之后需要修改一下 harbor registry 目录的所属和所属组。 方案四 对于 harbor 2.x 来讲由于 harbor 强化了 Artifact 的元数据管理能力即元数据要在 push 或者 sync 到 harbor 时写入到 harbor 自身的数据库中。在 harbor 看来只要数据库中没有这个 Artifact 的 manifest 信息或者没有这一层 layer 的信息harbor 都会认为该 Artifact 或者 layer 不存在返回 404 的错误。按照方案三直接而将 docker registry 存储目录解压到 harbor 的 registry 存储目录的方法行不通的。因为是将镜像解压到 registry 存储中的虽然在 harbor 的 registry 容器看来是有镜像的但因为 harbor 的数据库中没有镜像harbor 就会认为没有镜像。那么现在看来只能通过方案二使用 skopeo 将镜像一个一个地 push 到 harbor 中了。 但对于某些特定的场景下不能像方案二那样拥有一个 docker registry 的 HTTP 服务只有一个 docker registry 的压缩包这如何将 docker registry 的存储目录中的镜像迁移到 harbor 2.0 中呢 在《镜像搬运工 skopeo 初体验》中提到过 skopeo 支持的镜像格式有如下几种 需要注意的是这几种镜像的名字对应着镜像存在的方式不同存在的方式对镜像的 layer 处理的方式也不一样比如 docker:// 这种方式是存在 registry 上的docker-daemon: 是存在本地 docker pull 下来的再比如 docker-archive 是通过 docker save 出来的镜像而 dir: 是镜像以文件夹的形式保存的。同一个镜像有这几种存在的方式就像水有气体、液体、固体一样。可以这样去理解他们表述的都是同一个镜像只不过是存在的方式不一样而已。 既然镜像是存放在 registry 存储目录里的那么使用 dir 的形式直接从文件系统读取镜像理论上来讲会比方案二要好一些。虽然 skopeo 支持 dir 格式的镜像但 skopeo 目前并不支持直接使用 registry 的存储目录所以还是需要想办法将 docker registry 存储目录里的每一个镜像转换成 skopeo dir 的形式。 skopeo dir 那么先来看一下 skopeo dir 是什么样子的 为了方便测试方案的可行性先使用 skopeo 命令先从 docker hub 上拉取一个镜像并保存为 dir命令如下 使用 tree 命令查看一下 alpine 文件夹的目录结构如下 从文件名和大小以及文件的内省我们可以判断出manifest 文件对应的就是镜像的 manifests 文件类型为 ASCII text 的文件正是镜像的 image config 文件里面包含着镜像的元数据信息。而另一个 gzip compressed data 文件不就是经过 gzip 压缩过的镜像 layer 嘛。看一下 manifest 文件的内容也再次印证了这个结论 镜像的 config 字段对应的正是 e50c909a8df2而文件类型正是 image.v1json 文本文件。 镜像的 layer 字段对应的也正是 4c0d98bf9879 而文件类型正是 .tar.gzip gzip 压缩文件。 从 registry 存储目录中捞镜像出来 接下来到本文的较为精彩的地方了。如何从 registry 存储里“捞”镜像出来转换成 skopeo 所支持的 dir 格式。 首先要得到镜像的 manifests 文件从 manifests 文件中可以得到该镜像的所有 blob 文件。例如对于 registry 存储目录中的 library/alpine:latest 镜像来讲它在 registry 中是这样存放的 1.通过 repositories/library/alpine/_manifests/tags/latest/current/link 文件得到 alpine 镜像 lasts 这个 tag 的 manifests 文件的 sha256 值然后根据这个 sha256 值去 blobs 找到镜像的 manifests 文件; 2.根据 current/link 文件中的 sha256 值在 blobs 目录下找到与之对应的文件blobs 目录下对应的 manifests 文件为 blobs/sha256/39/39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01/data; 3.使用正则匹配过滤出 manifests 文件中的所有 sha256 值这些 sha256 值就对应着 blobs 目录下的 image config 文件和 image layer 文件; 4.根据 manifests 文件就可以得到 blobs 目录中镜像的所有 layer 和 image config 文件然后将这些文件拼成一个 dir 格式的镜像在这里使用 cp 的方式将镜像从 registry 存储目录里复制出来过程如下 最终得到的镜像格式如下 和上面的 skopeo copy 出来的 dir 文件夹对比一下除了一个无关紧要的 version 文件其他的都一摸一样。 5.再优化一下将步骤 4 中的 cp 操作修改成硬链接操作能极大减少磁盘的 IO 操作。需要注意硬链接文件不能跨分区所以要和 registry 存储目录在同一个分区下才行。 然后使用 skopeo copy 或者 skopeo sync 将捞出来的镜像 push 到 harbor 使用 skopeo copy 使用 skopeo sync 需要注意的是skopeo sync 的方式是同步 project 级别的镜像的 name 和 tag 就对应的是目录的名称 实现脚本 其实修改一下 skopeo 的源码应该也是可以无缝支持 registry 存储目录的。 对比 对比总结一下以上几种方案 方案一上手成本低适用于镜像数量比较多少无需安装 skopeo 的情况缺点是性能较差 方案二适用于两个 registry 之间同步复制镜像如将 docker hub 中的一些公共镜像复制到公司内网的镜像仓库中。 方案三适用于镜像仓库之间进行迁移性能是所有方案里最好的需要额外注意的是如果目的镜像仓库是 harbor 2.x是无法使用这种方式的。 方案四是方案三的妥协版为了适配 harbor 2.0 因为需要重新将镜像 push 到 harbor 所以性能上要比方案三差一些。
http://www.zqtcl.cn/news/76998/

相关文章:

  • 海口建设公司网站wordpress 滑动菜单
  • 福州网站制作好的企业郑州网站排名哪家好
  • 上海企业制作网站有哪些内容职业学校网站建设方案
  • 权威发布e站做计算机网站有哪些
  • 茶庄网站模板个人是否可以申请持有网站
  • 广州做企业网站找哪家公司好一般网站 要 加入 友情链接吗
  • 苏州网站建设联系苏州梦易行电子购物网站开发公司
  • 网站怎么做后台亚洲和欧洲
  • 帝国cms影视网站模板网站怎么快速排名
  • 汝阳网站建设哪家好网站结构图怎么做
  • 马云谈2025的房价3500seo服务 公司
  • 视频网站建设策划书郑州一网网站建设
  • 马鞍山市建设银行网站wordpress获取分类链接地址
  • 有设计师做的装修效果图的网站网站建设公司知乎
  • 马家堡做网站的公司百度经验首页
  • 免费发布信息网网站哈尔滨网站建设一薇ls15227
  • 网站开发技术学习网站备案 公司注销
  • 美食网站建设的内容分析有哪些档案网站
  • 陕西省住房和城市建设厅网站成都市 建设领域信用系统网站
  • 做淘宝客要建网站吗wordpress页面教程视频教程
  • 企业社交网站定制书店网站建设目标调研的方案
  • 哪个网站可以接图纸做网站如何创建
  • 网站ip和pv的比例wordpress 小工具居中
  • 响应式网站做法网站建设取得了
  • 企业建站系统开源佛山建设外贸网站公司吗
  • 东莞seo建站投放嘉兴网站搭建
  • aso.net 网站开发网页的网站建设在哪里
  • 程序员做项目的网站如何做线下推广
  • 大良商城网站建设菏泽网站推广
  • 潍坊市建设一体化平台网站wordpress加速r