大家好,欢迎来到IT知识分享网。
一、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 619be: Pull complete ae87dc: Pull complete 74e12953df95: Pull complete 6f0ce73649a0: Pull complete ef4f267ce8ed: Pull complete Digest: sha256:4fac7a8257b1d7afcc181dfbdf9c8f57e337db763ac94b0e67c6cfb5 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 431e29fd62a1b8824a08867eaba4cbf5c671ad72cd89f72ef19069b8d9
该命令中各参数的意义如下:
#创建一个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 d5: Pull complete Digest: sha256:04baccd2fc5cc0eacddebabd5ca375ff28dfd5a9710e3 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端拉取私有仓库镜像成功。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153111.html