Flux7 Docker 系列教程(四):Registry & Workflows

本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第四篇 Part 4: Registry & Workflows
该系列全部文章将参考其余学习资料翻译,也会加入本身的学习做为部分注解。若有错误,欢迎指正。web

clipboard.png

上篇文章介绍了使用 Dockerfile 进行自动化部署和 Dockerfile 的经常使用命令,本篇文章来探讨 Docker Registry。相似 GitHub,Docker Registry 是用来存储 Docker 镜像的地方。了解 Docker Registry 以前先来了解几个相关的知识吧。docker

  1. 镜像和仓库和 GitHub 同样,能够被收藏和被 “star”。
  2. 和 GitHub 同样,能够在仓库上面留评论以便和维护人员进行交流。
  3. 和 Github 相似私人仓库不能被搜索到,只有拥有合做者、拥有者权限的用户才能访问。
  4. 推送成功以后能够配置 webhook

Docker Registry 由三个部分组成:Index、Registry、Registry Client。数据库

能够把 Index 认为是负责登陆、负责认证、负责存储镜像信息和负责对外显示的外部实现,而 Registry 则是负责存储镜像的内部实现,而 Registry Client 则是 Docker 客户端。安全

Docker Hub 架构

Docker Index

Docker Index 使用如下工具来维护用户信息、校验镜像、以及维护公共 namespace:网络

  1. 网页界面
  2. 元数据存储
  3. 认证服务
  4. 令牌化

同时 Docker Index 也用来分解 URL,方便用户认证和用户使用。架构

Registry

Registry 用来存储镜像和统计数据。然而它不会提供数据库服务,即它不会提供用户认证服务,由 S三、云文件和本地文件系统提供数据库支持。另外,由 Index 经过 Token 进行用户认证。有多种不一样的 Registry,下面是其中几个的例子:负载均衡

  1. Sponsor Registry 第三方 Registry,为客户和 Docker 社区提供服务。
  2. Mirror Registry 第三方 Registry,只为客户提供服务。
  3. Vendor Registry 由发布 Docker 镜像的供应商提供的 Registry。
  4. Private Registry 经过多重安全检查进行认证的私有 Registry。

Registry Client

用于进行 pull 和 push 的操做,同时用于 docker push 时的登陆认证。工具

为了更好地理解 Registry Client 的工做流程,下面将详细描述一下五个案例中的 Docker Registry 工做流程。学习

情景 A:从官方仓库 Pull 镜像

  1. 用户对 Index 发出下载请求
  2. Index 返回如下三个部分的信息:

    • 镜像所在的 Registry。
    • 镜像全部的层的校验
    • 认证以后的 Token
  3. 用户使用 Token 和 Registry 进行通讯,Registry 负责存储镜像和叠加在镜像上面的改动层。
  4. Registry 确认是不是 Index 所发出的的 Token。
  5. Index 返回确认值,由此判断用户是否能够下载镜像。
    >只有在请求的 header 里有 X-Docker-Token 时才会返回 Token。私有仓库须要认证,而公有仓库不须要认证。

clipboard.png

情景 B:Push 镜像到 Registry

  1. 用户向 Index 发送凭证,并要求分配 repository 名称。
  2. 认证 namespace 的可用性后,分配 repository 名称,同时 Index 返回一个临时 Token。
  3. 向 Registry 发送 Token 和镜像。
  4. Registry 向 Index 确认 Token,确认完毕以后读取推送流。
  5. Index 更新相关的镜像信息。

clipboard.png

情景 C:从 Index 和 Registry 删除一个镜像

  1. Index 收到 delete 某个 repository 的请求。
  2. 进行 repository 认证和用户认证,成功后 Index 给客户端返回一个临时 Token。
  3. Registry 收到删除信号和 Token。
  4. Registry 向 Index 验证 Token,而后删除对应的镜像文件。
  5. Registry 通知 Index 已经删除,Index 删除数据库中的全部相关的 repository 记录。

clipboard.png

情景 D:在没有 Index 的状况下使用 Registry

没有 Index 的 Registry 是彻底受 Docker Clinet 控制的。这种模式最适合在私有网络中存储镜像文件。Registry 运行在一个和 Index 没有通讯的环境中,全部的认证问题和安全问题都须要用户本身解决。ui

情景 E:在有 Index 的独立模式中使用 Registry

在这种状况下,用户须要本身架设一个 Index 去解决存储和认证问题。固然,这种状况下可能会出现和官方 Index 时间不一样步的问题。Docker 官方也提供了一个很是有意思的东西叫作 chaining registries,主要是为了解决负载均衡和为具体请求指定具体的 Registry。
固然,咱们能够参考 本身搭建本地 Docker Hub 服务 来搭建本地的 Docker Hub。。

接下来的文章中将会继续介绍如何在以上每一个场景中使用 Docker Registry API,而且也会深刻了解 Docker 安全。

相关文章
相关标签/搜索