您现在的位置是:首页 >技术教程 >【云原生Docker】11-Docker镜像仓库网站首页技术教程

【云原生Docker】11-Docker镜像仓库

小肖同学.. 2023-05-26 04:00:02
简介【云原生Docker】11-Docker镜像仓库

【云原生|Docker】11-Docker Registry(官方仓库)

前言

​ 前面我们所有的docker操作,使用的镜像都是在docker官方的镜像仓库下载,当然这并不是什么问题。然后再实际工作中我们更加倾向于使用自建的docker仓库,主要是因为方便管控,也能储存自定义的不可公开的镜像。docker官方就给我们提供了私有仓库解决方案。本将主要介绍:docker官方registry

docker registry

简介

  • Docker Registry是一个官方开源的Docker镜像仓库,用于存储和分发Docker镜像。它允许用户将自己的Docker镜像上传到一个中心仓库,以便其他人可以方便地下载和使用这些镜像。
  • Docker Registry有两个主要组件:Registry和Registry API。Registry是一个HTTP服务器,用于存储和检索Docker镜像。Registry API是一个RESTful API,用于与Registry进行交互。
  • Docker Registry作为一个官方开源的Docker镜像仓库,本身并没有提供图形界面。这也是生产中使用不多的原因,一般就会使用基于官方的二开产品,例如:Harbor

操作示例

  1. 直接运行registry,该镜像需要监听5000端口
[root@clinet ~]# docker run -d -p 5000:5000 registry 
a12a139819175b14e708ea4d2cdec569a979075a2f9f5a67d4c5317584b0449f
[root@clinet ~]# 
[root@clinet ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
a12a13981917   registry   "/entrypoint.sh /etc…"   3 seconds ago   Up 2 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   laughing_chandrasekhar
[root@clinet ~]# 
  1. 查看本地端口已监听;
[root@clinet ~]# netstat -ntpl |grep 5000
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      3081/docker-proxy   
tcp6       0      0 :::5000                 :::*                    LISTEN      3086/docker-proxy   
[root@clinet ~]#
  1. 在机器2上给要上传的镜像打tag
[root@lvs-1 ~]# docker tag nginx:latest  192.168.194.128:5000/livrary/nginx:v1 
[root@lvs-1 ~]# docker images 
REPOSITORY                           TAG       IMAGE ID       CREATED         SIZE
busybox                              latest    beae173ccac6   15 months ago   1.24MB
192.168.194.128:5000/livrary/nginx   v1        605c77e624dd   15 months ago   141MB
nginx                                latest    605c77e624dd   15 months ago   141MB
[root@lvs-1 ~]# 
  • 192.168.194.128:5000 :表示registry的地址;
  • library : 表示registry中的项目名称,默认仓库会有一个公共项目,名称叫library,在图形化的regustry中我们可以自定义仓库项目;
  • nginx : 表示上传的镜像名称。
  1. push至镜像仓库
[root@lvs-1 ~]# docker push 192.168.194.128:5000/livrary/nginx:v1
The push refers to repository [192.168.194.128:5000/livrary/nginx]
d874fd2bc83b: Pushed 
32ce5f6a5106: Pushed 
f1db227348d0: Pushed 
b8d6e692a25e: Pushed 
e379e8aedd4d: Pushed 
2edcec3590a4: Pushed 
v1: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
[root@lvs-1 ~]# 

错误分析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogkqTJoW-1681221166688)(D:学习学习笔记图片63.png)]

这个错误的原因是:Docker客户端会使用HTTPS协议去访问Docker Registry,因为HTTPS可以提供更好的安全性和加密保护。为了解决这个问题,我们需要在docker的配置文件中添加insecure-registry

[root@lvs-1 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://mqkiky4e.mirror.aliyuncs.com"],
  "insecure-registries": ["http://192.168.194.128:5000"]
}
[root@lvs-1 ~]#
  1. 在机器a上下载验证。
[root@clinet ~]# docker pull 192.168.194.128:5000/livrary/nginx:v1
v1: Pulling from livrary/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
Status: Downloaded newer image for 192.168.194.128:5000/livrary/nginx:v1
192.168.194.128:5000/livrary/nginx:v1
[root@clinet ~]# 

总结:

  • 官方registry不提供图形化,因此我们在上传进行后也无法直观查看;
  • docker search查找镜像也无法查找指定的私有仓库,这是因为docker官方把search命令封装死了,直接查找的就是官方hub。

hyper/docker-registry-web

hyper/docker-registry-web是github上的一个超级简单的registry图形界面工具,上面提供了基础的镜像内容,github地址:https://hub.docker.com/r/hyper/docker-registry-web

  1. 搭建web界面
[root@clinet ~]# docker run -d -p 5000:5000 --name registry-srv registry:2
[root@clinet ~]# docker run -it -p 8080:8080 --name registry-web --link registry-srv -e  REGISTRY_URL=http://registry-srv:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web 

  1. 上传busybox镜像
[root@clinet ~]# docker tag busybox:latest 192.168.194.128:5000/livrary/busybox:v1 
[root@clinet ~]# 
[root@clinet ~]# docker push 192.168.194.128:5000/livrary/busybox:v1
The push refers to repository [192.168.194.128:5000/livrary/busybox]
01fd6df81c8e: Pushed 
v1: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527
[root@clinet ~]# 


​ 本章带我们简单了解了什么是docker-registry,当然官方的registry太过简单,因此这不是我们学习的重点,下一章节我们将重点介绍第三方的仓库:Docker Harbor

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。