Docker中的仓库的简述及工作原理
1、Docker仓库简述
Docker仓库的概念很好理解,就像是一个装载了许多镜像的仓库。Docker仓库有由Docker官方提供的公共仓库(Dokcer Hub),也有私有仓库。需要镜像时,如果这个镜像不存在,则可以去仓库中拉取(pull)镜像,默认是去公有仓库拉取。
公有和私有也很好理解,谁都可以来拿的就是公有仓库,只有得到私人允许才能拿的就是私有仓库。
2、仓库的工作原理
先来学习一下Docker仓库的工作原理,打好理论基础对于实际操作的理解会更深刻。
<1>Docker仓库使用时涉及的三个角色
Docker仓库使用时会涉及到三个角色,分别是:Registry Client(仓库客户端)、Docker Index(Index服务)与Registry(Docker仓库)。
这三个角色各有各的职责,互相协助来完成Docker仓库的使用。下面我绘制了一张图来简单说明三个角色各自的职责。
注意:虽然Registry不提供用户认证的功能,但可以通过Index对用户身份进行验证,验证方式是Index服务的Token的方式(Token就相当于Index认证用户身份后给用户发的合法凭证,个人觉得就像是官方认证后给个人办理的身份证一样。)
<2>拉取(pull)一个镜像的过程发生了什么
当镜像不在本地时,客户端想要从仓库下载一个镜像,需要经过以下过程,分为了大致6个步骤,我在图中写出了说明。
<3>推送(push)一个镜像的过程发生了什么
了解了拉取镜像,推送一定能很好的理解,因为无论是推送还是拉取,其实原理都是差不多的,只是操作内容有少许变化,下面也将推送的步骤在图中标出了:
<4>删除(delete)一个镜像的过程发生了什么
删除镜像时的过程与推送镜像非常类似,下面也绘制了一张图以示说明:
<5>客户端各操作总结
看过拉取、推送和删除的过程后,相信大家都发现原理十分类似。
这几种操作也可以用是否改变了仓库内容来分为两种:
- 拉取(pull):没有改变仓库的内容。当仓库内容没有发生改变时,不需要有步骤7,无需同步Index和Registry中的镜像状态信息,只需要申请—>得到认证许可—>验证许可—>获得权限—>执行操作即可。
-
推送(push)、删除(delete):改变了仓库的内容(添加或删除内容)。需要有一个步骤7,用于同步各端的镜像状态信息,需要申请—>得到认证许可—>验证许可—>获得权限—>执行操作—>同步状态即可。
注:也就是说改变了仓库内容,多了一步同步各端信息的操作。