docker|Docker---registry仓库工作原理

什么是仓库
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。

  • Docker Hub
    docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
    但我们直接访问docker hub的话特别的慢,因为它的站点在国外,所以我们直接连接阿里云来访问docker hub
Registry工作原理
  • 一次docker pull 或 push背后发生的事情
    docker|Docker---registry仓库工作原理
    文章图片

    index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
  • Docker Registry有三个角色,分别是index、registry和registry client。
    • index
      负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
      Web UI
      元数据存储
      认证服务
      符号化
    • registry
      是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
    • Registry Client
      Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
  • 情景A:用户要获取并下载镜像。
docker|Docker---registry仓库工作原理
文章图片

  • 情景A:具体工作流程如下:
用户发送请求到index来下载镜像。
index 响应返回三个相关部分信息:
该镜像位于的registry
该镜像包括所有层的校验
以授权目的Token
用户通过响应中返回的Token和registry沟通,registry全权负责镜像,它存
储基本的镜像和继承的层。
registry现在要与index证实该token是被授权的。
index会发送“true” 或者 “false”给registry,由此允许用户下载所需要的镜像。
  • 情景B:用户要推送镜像到registry中。
【docker|Docker---registry仓库工作原理】docker|Docker---registry仓库工作原理
文章图片

情景B:具体工作流程如下:
用户发送带证书请求到index要求分配库名。
在成功认证,命名空间可用以及库名被分配之后。index响应返回临时的token。
镜像连带token,一起被推送到registry中。
registry与index证实token,然后在index验证之后开始读取推送流。
该index然后更新由Docker生成的镜像校验。
  • 情景C:用户要从index或registry中删除镜像。
docker|Docker---registry仓库工作原理
文章图片

  • 情景C:具体工作流程如下:
    index接收来自Docker一个删除库的信号。
    如果index验证库成功,它将删除该库,并返回一个临时token。
    registry现在接收到带有该token的删除信号。
    registry与index核实该token,然后删除库以及所有相关信息。
    Docker现在通知有关删除的index,然后index移除库的所有记录

    推荐阅读