docker-registry相关知识

私有仓库docker-registry

一、关于registry:

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。

二、Docker Registry角色

Docker Registry有三个角色,分别是index、registry和registry client。

角色 1 – Index

index 负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。它使用以下组件维护这些信息:
Web UI
元数据存储
认证服务
符号化
这也分解了较长的URL,以方便使用和验证用户存储库。

角色 2 --Registry

registry是镜像和图表的仓库。然而,它没有一个本地数据库,也不提供用户的身份认证,由S3、云文件和本地文件系统提供数据库支持。此外,通过Index Auth service的Token方式进行身份认证。Registries可以有不同的类型。现在让我们来分析其中的几种类型:
Sponsor Registry:第三方的registry,供客户和Docker社区使用。

Mirror Registry:第三方的registry,只让客户使用。

Vendor Registry:由发布Docker镜像的供应商提供的registry。

Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry。

角色 3 --Registry Client

Docker充当registry客户端来负责维护推送和拉取的任务,以及客户端的授权

三、优点:

    1、节约带宽
	2、可以自己定制系统
	3、更加安全

四、搭建方式:

1、利用官方提供的工具docker-registry来配置私库
官方提供的镜像,注意这个工具是个镜像,直接下载并使用registry镜像启动docker实例就可以了

2、利用Harbor-Registry,来搭建私库
Harbor是一个用于存储Docker镜像的企业级Registry服务

通过官方docker-registry来配置私库

1、运行下面命令获取registry镜像

    docker pull registry
    下载到的版本默认为 docker.io/registry  latest 

2、将registry镜像运行并生成一个容器

   docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
     Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机
     的/opt/registry目录了。

3、运行docker ps看一下容器运行情况

    docker ps -a

4、registry容器启动后,打开浏览器输入http://ip_add:5000/v2/,看到下面情况说明registry运行正常
在这里插入图片描述

5、通过将镜像push到registry来验证,首先将主机的registry镜像命名为符合仓库要求

 registry_url:port/ImageName:tag的格式,如图

在这里插入图片描述

6、通过docker tag命令来实现命名

  docker tag 名称:版本 192.168.179.128:5000/jdk_8u191:版本

7、通过docker image查看本地镜像,重新创建了一个镜像

    docker image

8、上传jdk镜像到Registry仓库

    docker push 192.168.179.128:5000/jdk_8u191:版本

注意可能会出现无法push镜像到私有仓库的问题
这是因为我们启动的registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,
添加下面的内容(registry服务地址):

	{
	"registry-mirrors": [ "],"insecure-registries": ["192.168.179.128:5000"]
	}

#“registry-mirrors”: ["] 是阿里云代理的Registry Hub仓库的地址,可以加快国内访问Registry Hub仓库的速度。

修改好之后需要重启Docker服务才能生效
systemctl restart docker
再push即可,push成功之后,查看本地/opt/registry目录下已经有了刚推送上来的registry镜像,
也可以在浏览器中输入http://ip_add:5000/v2/_catalog

五、Docker Registry工作流程详解(分三个情景)

A 用户要获取并下载镜像。所涉及的步骤如下:

	​1、用户发送请求到index来下载镜像。
	2、index 发出响应,返回三个相关部分信息:
	    该镜像所处的registry、该镜像包括所有层的校验、以授权为目的的Token
	3、用户通过响应后返回的Token和registry沟通,registry全权负责镜像,它用来存储基本的镜像和继承的层。
	4、registry现在要与index证实该token是被授权的。
	5、index会发送“true”或者“false”给registry,由此判定是否允许用户下载所需要的镜像。

B 用户想要将镜像推送到registry中。其中涉及的步骤如下:

	1、用户发送附带证书的请求到index要求分配库名。
	2、在认证成功,命名空间可用之后,库名也被分配。index发出响应返回临时的token。
	3、镜像连带token,一起被推送到registry中。
	4、registry与index证实token被授权,然后在index验证之后开始读取推送流。
	5、该index由Docker校验的镜像更新。

C 用户想要从index或registry中删除镜像:

	1、index接收来自Docker一个删除库的信号。
	2、如果index对库验证成功,它将删除该库,并返回一个临时的token。
	3、registry现在接收到带有该token的删除信号。
	4、registry与index核实该token,然后删除库以及所有与其相关的信息。
	5、Docker现在通知有关删除的index,然后index移除库的所有记录。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值