怎样优雅的将Docker Registry中容器镜像转移至Harbor
发布时间:2022-01-14 11:09:05 所属栏目:Linux 来源:互联网
导读:Docker Distribution[1] 是第一个是实现了打包、发布、存储和镜像分发的工具,起到 Docker registry 的作用。其中 Docker Distribution 中的 spec 规范[2] 后来也就成为了 OCI distribution-spec[3] 规范。可以认为 Docker Distribution 实现了大部分 OCI 镜
Docker Distribution[1] 是第一个是实现了打包、发布、存储和镜像分发的工具,起到 Docker registry 的作用。其中 Docker Distribution 中的 spec 规范[2] 后来也就成为了 OCI distribution-spec[3] 规范。可以认为 Docker Distribution 实现了大部分 OCI 镜像分发的规范,二者在很大程度上也是兼容的。OCI 的指导思想是先有工业界的实践,再将这些实践总结成技术规范,因此尽管 OCI 的 distribution-spec[4] 规范还没有正式发布(目前版本是v1.0.0-rc1[5]),但以 Docker Distribution 作为基础的镜像仓库已经成为普遍采用的方案,Docker registry HTTP API V2 也就成为了事实上的标准。 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 中的镜像迁移至 harbor?假如内网环境中有两台机器,一台机器上运行着 docker registry,域名假设为 registry.k8s.li 。另一台机器运行着 harbor,假设域名为 harbor.k8s.li。现在 docker registry 中存放了五千个镜像。harbor 是刚刚部署了,里面还没有镜像。在磁盘和网络没有限制的情况下,如何将 docker registry 中的镜像迁移到 harbor 中? ![]() 根据 manifests 文件就可以得到 blobs 目录中镜像的所有 layer 和 image config 文件,然后将这些文件拼成一个 dir 格式的镜像,在这里使用 cp 的方式将镜像从 registry 存储目录里 捞 出来 ��� # 首先创建一个文件夹,为了保留镜像的 name 和 tag,文件夹的名称就对应的是 NAME:TAG 和上面的 skopeo copy 出来的 dir 文件夹对比一下,到此为止镜像所需要的文件就基本上都齐全了,就差一个 version 文件,这个文件无关紧要可以去掉。 再优化一下,将步骤 4 中的 cp 操作修改成硬链接操作,能极大减少磁盘的 IO 操作。需要注意,硬链接文件不能跨分区,所以要和 registry 存储目录在同一个分区下才行。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |