美文网首页
【Docker】关于“repository”(仓库)和“regi

【Docker】关于“repository”(仓库)和“regi

作者: Bogon | 来源:发表于2024-04-24 14:25 被阅读0次

关于“repository”(仓库)和“registry”(注册表)之间区别

本文将详细解释这两个术语在软件开发中的含义和用途,并强调它们之间的不同之处。

  1. 仓库(Repository):是存储和管理工作代码、文档、配置文件和其他与特定项目或应用程序相关的资产的中心位置。它通常用于版本控制和协作,允许多个开发者同时在同一个代码库上工作。

  2. 注册表(Registry):是一个存储软件组件信息的数据库,可以方便地搜索和检索。注册表通常用于存储和分发预构建的包,如库、框架和插件,并且可以管理不同软件组件之间的依赖关系。

  3. 仓库的类型

    • 本地仓库:存储在开发者本地机器上的仓库。
    • 远程仓库:存储在远程服务器上,并通过互联网访问的仓库。
    • 分布式仓库:存储在多台机器上并同步以确保一致性的仓库。
  4. 注册表的类型

    • 公共注册表:任何人都可以访问并用于存储和分发容器镜像的注册表。
    • 私有注册表:只有授权用户可以访问,用于在组织内部存储和分发容器镜像的注册表。
    • 托管注册表:由第三方提供商托管,并提供安全性、可扩展性和可靠性等额外功能的注册表。
  5. 正确使用术语:文章提供了一些例句,展示了如何在句子中正确使用“repository”和“registry”。

  6. 常见错误:文章指出了一些在处理仓库和注册表时常见的错误,如混淆这两个术语、假设所有注册表都是公开的、不正确地标记镜像以及不清理未使用的镜像。

  7. 避免错误的技巧:包括理解仓库和注册表之间的区别、了解所使用的注册表是公共的还是私有的、为镜像标记开发一致的命名约定以及定期清理未使用的镜像。

  8. 上下文的重要性:选择使用仓库还是注册表取决于特定用例和用户需求。例如,在软件开发中,通常使用仓库存储源代码,使用注册表存储编译后的代码,如Docker镜像或包。

  9. 例外情况:尽管通常建议使用仓库存储源代码,使用注册表存储容器镜像,但在某些情况下,使用注册表存储源代码或使用仓库存储容器镜像可能是必要的或有益的。

  10. 练习:文章最后提供了一些练习,帮助读者更好地理解如何在句子中正确使用“repository”和“registry”。

了解仓库和注册表之间的区别对于任何从事软件开发领域的人来说都是至关重要的,正确的术语使用可以帮助开发者与同事更有效地沟通,并避免可能导致代码错误的混淆。

镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。

image.png

镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com。一个 Registry 中可以存在多个Repository,Repository 可分为“顶层仓库”和“用户仓库”;·用户仓库名称格式为“用户名/仓库名”,每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像。

Repository: 由某特定的 docker 镜像的所有迭代版本组成的镜像仓库。

镜像名称(name)+标签(tag): 如 nginx:latest

认证能力: 提供用户注册、登录、登出能力。

索引: 提供镜像的索引信息,方便检索。

一个容器镜像包含了两个部分,一个是 元数据,其实就是由dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的blob里面,真正占有空间的就是这些 blob。

repository:本身是一个仓库,这个仓库里面可以放具体的镜像,是指具体的某个镜像的仓库,比如Tomcat下面有很多个版本的镜像,它们共同组成了tomcat的repository。

registry:镜像的仓库,比如官方的是Docker Hub,它是开源的,也可以自己部署一个,registry上有很多的repository,redis、tomcat、mysql等等repository组成了registry。

按照Docker的logo来看,repository是集装箱,registry是鲸鱼。

image.png
  • Registry:注册服务器,用于管理镜像仓库,起到的是服务器的作用。
  • Repository:镜像仓库,用于存储具体的docker镜像,起到的是仓库存储作用。

两者的关系可以简单从下图中体现出来:

image.png

从上图可以看出,注册服务器可以管理多个镜像仓库,这些镜像仓库中,按照不同的标签(Tag)和镜像名联合管理存储着各种各样的Docker镜像。

如下图,在一个镜像注册服务器中,有两个镜像仓库,分别命名为:ubuntu仓库和centos仓库。
在每个仓库中都存储着对应的仓库系统镜像,这些镜像含有不同的版本,用tag标记为6.1,3.2,6.7等等。

image.png

当用户在想要拉取到具体的镜像时,就可以通过如下的命令拉取到对应的镜像到本地,并执行后续操作:

// 语法
docker pull 注册服务器的仓库名/镜像名:Tag

# docker pull registry.hub.docker.com/ubuntu:latest

//当不使用Tag的时候,默认会使用latest进行标记
# docker pull dl.dockerpool.com:5000/ubuntu
351128ef164a23fe34da9af09a78e4a.png
  1. registry
    registry主要用于保存Docker镜像,包括镜像层次结构和镜像的元数据。
    用户可以自己的数据中心搭建私有的registry,也可以使用Docker官方的registry服务(Docker Hub) Docker Hub 中有两种类型仓库:用户仓库(user repository,普通Docker Hub 用户创建)和顶层仓库(top-level repository,Docker公司负责维护、验证、架构良好且安全)。

  2. repository
    repository 是具有某个功能的docker镜像的所有迭代版本构成的镜像组。
    repository 的命名规则:用户名/repository 两部分组成,即 username/repositoryname 的形式,如docker.io/nginx 、docker.io/mysql 、docker.io/ubuntu 等等。

  1. image
    image用来存储一组元数据信息(镜像的架构、默认配置、构建镜像的容器配置、所有镜像层(layer)信息的rootfs)。

如:username/repositoryname:tag1、username/repositoryname:tag2、username/repositoryname:tag3和username/repositoryname:lastest,隶属于名为username/repositoryname 的 repository 下。

我们在装有Docker服务的pull 两个镜像(docker.io/mysql 和 mcr.microsoft.com/mssql/server),并查看repositories.json 文件可以看到如下信息。

# cat /var/lib/docker/image/overlay2/repositories.json 

{
    "Repositories": {
        "docker.io/mysql": {
            "docker.io/mysql:latest": "sha256:91dadee7afeebe274c51104d572ab6a2dc0ae97473f71afc57fbfd48c0ceb8aa",
            "docker.io/mysql@sha256:4589ba2850b93d103e60011fe528fc56230516c1efb4d3494c33ff499505356f": "sha256:91dadee7afeebe274c51104d572ab6a2dc0ae97473f71afc57fbfd48c0ceb8aa"
        },
        "mcr.microsoft.com/mssql/server": {
            "mcr.microsoft.com/mssql/server:latest": "sha256:ba266fae5320e745f1354ed1fe620b58855e5ed62f1fa0c962efe3a2734e0c92",
            "mcr.microsoft.com/mssql/server@sha256:0753f9e9c614c469e1e6b98ea60b21e20abd249323c9f6a9eab476c87a8cf826": "sha256:ba266fae5320e745f1354ed1fe620b58855e5ed62f1fa0c962efe3a2734e0c92"
        }
    }
}
  1. layer
    layer 是一个Docker用来管理镜像层的中间概念,由上图可见 镜像是镜像层组成的,而单个镜像层可以被多个镜像共享。
# docker images

REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/mssql/server   latest              ba266fae5320        4 months ago        1.57 GB
docker.io/mysql                  latest              91dadee7afee        12 months ago       477 MB

与repositories.json的信息一对比就能看到 layer、image、repository他们之间的关系。

  1. manifest
    manifest 描述文件,主要存在于registry中作为docker镜像的元数据文件,在pull、push、save、load中作为镜像结构和基础信息的描述文件。
    在镜像被pull 或load到宿主机时、manifest被转为了本地镜像配置文件config。
image.png

Docker重命名镜像名称和TAG
使用docker images时,可能会出现REPOSITORY和TAG均为none的镜像,如下图


image.png

这时,我们可以重命名镜像:

# docker tag  镜像id  REPOSITORY:TAG(仓库:标签)

私有仓库

私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的镜像仓库。
在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中, CI/CD 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。

Harbor: Harbor 是 VMware 公司最近开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。 Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 Docker Compose 来对它进行部署。

Nexus: Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,目前常被用来作为 Maven 私服、 Docker 私服。

Docker registry: 由 docker 官方提供的私服,类似于 docker hub,用于保存公司内部上传的 Docker 镜像。

参考

Registry vs Repository - What's the difference?
https://wikidiff.com/repository/registry

Repository vs Registry: How Are These Words Connected?
https://thecontentauthority.com/blog/repository-vs-registry

相关文章

网友评论

      本文标题:【Docker】关于“repository”(仓库)和“regi

      本文链接:https://www.haomeiwen.com/subject/kjkgxjtx.html