registry介绍和搭建使用

一、Registry私有镜像仓库

(一)Registry简介

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

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

(二)Registry功能

镜像存储:

镜像数据存储在Registry后端,与本地镜像存储方式类似,它也分隔成了多个镜像层,放置在各自的目录中,保存成tar包格式。除了镜像数据,Registry还保存了清单文件(manifest)和镜像签名文件(signature)等。

镜像创建、分发和更新:

本地用户和Registry之间通过Registry API传输镜像。Registry API即一系列HTTP/HTTPS请求,用来发送用户请求到Registry,并接收Registry的响应。在请求和响应中则包含了镜像数据交互。

(三)Registry特点

Registry镜像仓库是一个非常简单易用的私有镜像仓库服务,其主要的特点如下所示:

·快速上传和下载镜像;

·部署方便;

·后端支持多种分布式云存储方案(如s3、azure)和本地文件系统等,接口以插件方式存在,易于配置;

·拥有完善镜像缓存机制,镜像下载更加快捷。

·以Webhook方式实现的通知系统;

·实现了本地TLS,支持HTTPS安全访问;

·有可配置的认证模块;

·有健康检查模块;

·正在努力让用于管理镜像的清单和摘要文件格式更加清晰,以及更清楚地为镜像打标签;

·设计方案新颖且高性能;

·清单文件(Manifest)作为元数据完整地记录镜像信息;

·提供了自动清理不再使用的镜像层的功能,帮助节省存储空间;

·Docker Registry 项目是开源的,有一个活跃的开发者社区为其贡献代码并提供支持,这意味着不断有新特性的加入和技术问题的解决。

1、Registry的安装与使用

一、规划节点

节点规划见表2-1-1。

表2-1-1 规划节点

IP地址

主机名

节点

192.168.200.40

master

容器master节点

192.168.200.50

node

容器worker节点

二、基础准备

使用OpenStack云计算平台,创建两台云主机,镜像使用CentOS7.9(云主机配置自定义,推荐配置4vCPU/12G内存/100G硬盘),使用这两台云主机作为实验基础环境。

任务实施

一、Registry安装

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

登录到master节点,该节点已安装Docker服务,使用docker pull命令拉取Registry镜像,具体命令如下:

[root@k8s-master-node1 ~]# docker pull registry

Using default tag: latest

latest: Pulling from library/registry

619be1103602: Pull complete

862815ae87dc: Pull complete

74e12953df95: Pull complete

6f0ce73649a0: Pull complete

ef4f267ce8ed: Pull complete

Digest: sha256:4fac7a8257b1d7a86599043fcc181dfbdf9c8f57e337db763ac94b0e67c6cfb5

Status: Downloaded newer image for registry:latest

docker.io/library/registry:latest

[root@k8s-master-node1 ~]# docker image ls

REPOSITORY              TAG        IMAGE ID       CREATED     SIZE

registry               latest     d6b2c32a0f14   7 months ago   25.4MB

可以看到Registry镜像已经被拉取下来,因为在pull的时候没有指定镜像的版本。所以默认拉取的版本是最新(latest)版本。使用如下命令部署私有仓库:

[root@k8s-master-node1 ~]# docker run -d -p 5000:5000 --restart=always --name registry registry:latest

431e29fd62a1b8824a08867ea569690ba4cbf5c671ad72cd89f72ef19069b8d9

该命令中各参数的意义如下:

#创建一个Registry容器来运行Registry服务;

#-p:端口映射(前面是宿主机端口:后面是容器暴露的端口);

#--restart=always:随docker服务的启动而启动;

#--name=registry:指定容器名为registry!

使用docker ps -a命令查看容器列表:

[root@k8s-master-node1 ~]# docker ps -a

CONTAINER ID     IMAGE                  COMMAND         CREATED        STATUS     

431e29fd62a1 registry:latest "/entrypoint.sh /etc…" 2 minutes ago  Up 2 minutes 

PORTS                                 NAMES

0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

Registry容器启动后,打开浏览器输入http://ip_addr:5000/v2/。 

二、测试镜像上传

通过将镜像push到registry来验证,首先将提供的nginx_latest.tar镜像上传至master节点的/root目录下,然后使用docker load命令加载至本地,命令如下:

[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2318d6c47ec: Pull complete
095d327c79ae: Pull complete
bbfaa25db775: Pull complete
7bb6fb0cfb2b: Pull complete
0723edc10c17: Pull complete
24b3fdc4d1e3: Pull complete
3122471704d5: Pull complete
Digest: sha256:04ba374043ccd2fc5c593885c0eacddebabd5ca375f9323666f28dfd5a9710e3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@docker ~]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED       SIZE
nginx                           latest    39286ab8a5e1   6 weeks ago   188MB

将想要上传到镜像仓库的镜像命名为符合仓库要求registry_url:port/ImageName:tag的格式,通过docker tag命令来实现命令,具体命令如下所示:

[root@k8s-master-node1 ~]# docker tag 39286ab8a5e1 192.168.200.40:5000/nginx:latest
[root@k8s-master-node1 ~]# docker image ls
REPOSITORY             TAG        IMAGE ID       CREATED        SIZE
registry                           latest     d6b2c32a0f14   7 months ago   25.4MB
192.168.200.40:5000/nginx           latest    39286ab8a5e1   6 weeks ago    188MB

上传nginx镜像到Registry镜像仓库,具体命令如下所示:

[root@k8s-master-node1 ~]#  docker push 192.168.200.40:5000/nginx:latest

The push refers to repository [192.168.200.40:5000/nginx]

An image does not exist locally with the tag: 192.168.200.40:5000/nginx

在上传的过程中遇到了报错,这是因为我们启动的Registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json(若该文件不存在则创建一个),修改成如下:

[root@k8s-master-node1 ~]#  docker push 192.168.200.40:5000/nginx:latest

The push refers to repository [192.168.200.40:5000/nginx]

An image does not exist locally with the tag: 192.168.200.40:5000/nginx

修改完毕后,重启docker服务并上传镜像至仓库,命令如下:

[root@k8s-master-node1 ~]#  docker push 192.168.200.40:5000/nginx:latest

The push refers to repository [192.168.200.40:5000/nginx]

An image does not exist locally with the tag: 192.168.200.40:5000/nginx

push成功之后,可以在浏览器中输入http://ip_add:5000/v2/_catalog查看镜像是否被推送到镜像仓库。

或者使用以下命令查看:

[root@k8s-master-node1 ~]#  docker push 192.168.200.40:5000/nginx:latest

The push refers to repository [192.168.200.40:5000/nginx]

An image does not exist locally with the tag: 192.168.200.40:5000/nginx

至此,Registry私有仓库搭建完成,接下来使用一个客户端节点进行私有仓库中镜像的拉取。

三、客户端拉取镜像

使用远程连接工具连接到client节点,client节点已经安装了docker服务并启动。

首先需要修改node节点docker服务的配置文件/etc/docker/daemon.json(若该文件不存在则创建一个),修改成如下所示:

[root@k8s-master-node1 ~]#  docker push 192.168.200.40:5000/nginx:latest

The push refers to repository [192.168.200.40:5000/nginx]

An image does not exist locally with the tag: 192.168.200.40:5000/nginx

该配置文件内容的意思为指定registry私有仓库服务器的IP地址及端口,修改完配置文件后,重启docker服务,并查看私有仓库中的镜像及版本,最后拉取镜像,具体命令如下:

[root@k8s-worker-node1 ~]# systemctl restart docker

[root@k8s-worker-node1 ~]# curl 192.168.200.40:5000/v2/_catalog

{"repositories":["nginx"]}

[root@k8s-worker-node1 ~]# curl 192.168.200.40:5000/v2/nginx/tags/list

{"name":"nginx","tags":["latest"]}

[root@k8s-worker-node1 ~]# docker pull 192.168.200.40:5000/nginx:latest

latest: Pulling from nginx

b8f262c62ec6: Pull complete

e9218e8f93b1: Pull complete

7acba7289aa3: Pull complete

Digest: sha256:066edc156bcada86155fd80ae03667cf3811c499df73815a2b76e43755ebbc76

Status: Downloaded newer image for 192.168.200.40:5000/nginx:latest

192.168.200.40:5000/nginx:latest

[root@k8s-worker-node1 ~]# docker images

REPOSITORY           TAG        IMAGE ID       CREATED        SIZE

192.168.200.40:5000/nginx     latest     f949e7d76d63   4 years ago    126MB

验证client端拉取私有仓库镜像成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值