Docker Registry

什么是Docker Registry

Docker Registry的意思是镜像仓库,它的功能就是负责存储,管理和分发镜像,提供了登录认证的能力,建立了仓库的索引

在镜像仓库中会管理很多个Registry,Registry会通过命名来区分,每一个Registry都会包含一个或者多个镜像,镜像会通过镜像名称和标签来进行区分

整体的示意图如下所示:

在这里插入图片描述
Registry

Registry的意思要从哪一个镜像仓库中进行拉取镜像,通常通过dns和ip地址来确定一个镜像仓库,一个Registry中可以存在多个Repository

Repository

Repository可以分为是顶层仓库和用户从库,用户仓库的格式是用户名/仓库名,而每个仓库又可以包含多个标签,每个标签对应一个镜像

在这里插入图片描述

  1. Repository就是由某个特定的Docker镜像的所有迭代版本组成的镜像仓库
  2. 镜像名称就是name+tag
  3. 认证能力就是提供用户登录注册的功能
  4. 索引就是提供镜像的索引信息,方便进行检索

一个容器镜像可以包含有两个部分,一个是元数据,其实就是由dockerfile构建出来的描述文件,这个描述文件会说出这个容器镜像有多少层,每一层里面有什么内容,它的checksum的这些信息都会记录下来,还有最终的可执行文件是在哪个存储数据里面,就是一个一个的blob

镜像仓库工作机制

使用流程

  1. 通过docker login登录仓库
  2. docker pull拉取需要的镜像
  3. 通过dockerfile或者是commit的方式制作镜像,再通过docker push上传到仓库

实际使用方法

Docker Registry中的镜像通常是由开发人员进行制作,而后推送到公共或者私有的Registry上进行保存,供其他人员使用

在这里插入图片描述

仓库的拉取机制

在启动容器时,docker daemon会试图从本地获取相关的镜像,如果本地镜像不存在,就会从Registry中下载该镜像并保存到本地

常用的镜像仓库—DockerHub

什么是DockerHub

DockerHub是Docker提供的托管存储库服务,来进行查找容器镜像等功能,它具备的功能通常有:

  1. 注册私有仓库,发布镜像
  2. 提供镜像检索能力
  3. 提供其他的镜像
  4. 从github和bitbucket中自动构建容器镜像并推送到DockerHub终会
  5. 只是webhook,也就是一种基于Http的回调函数

私有仓库

下面是私有仓库的概念:

私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker镜像存储、分发的镜像仓库。在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中,CI/CD 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的

镜像仓库命令

常用的镜像仓库命令其实不多,这里全部列举出来

  1. docker login:用来登录仓库
  2. docker pull:也叫做docker image pull,用来拉取镜像
  3. docker push:也叫做docker image push,用来推送镜像
  4. docker search:用来查找镜像
  5. docker logout:用来登出仓库

docker login

基本功能就是登录到一个docker的镜像仓库,如果没有指明地址,默认使用官方的DockerHub

它这个登录有点像MySQL,需要指明用户名和密码,比如:

docker login -u xxx -p xxx
test@VM-24-7-ubuntu:~$ docker login -uzhaobohan
Password: 
WARNING! Your password will be stored unencrypted in /home/test/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

docker pull

基本功能是从镜像仓库拉取或者更新指定的镜像

基本语法是

docker pull [options] name [:tag|@digset]

选项有 -a,表示拉取所有tagged镜像,–disable-content-trust,表示忽略镜像的校验,默认是开启状态

比如说,使用实例如下:

docker pull nginx:1.23.3

docker push

将本地的镜像上传到镜像仓库,和pull用法基本一样

docker push myapache:v1

docker search

从DockerHub中查找镜像,基本语法选项中包含有:

–no-trunc:显示完整的镜像描述

-f<过滤条件>:列出收藏数不小于指定值的镜像

比如说,可以有下面的语句:

docker search -f stars=10 nginx
test@VM-24-7-ubuntu:~$ sudo docker search -f stars=10 nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL
nginx                              Official build of Nginx.                        19899     [OK]
unit                               Official build of NGINX Unit: Universal Web …   31        [OK]
nginx/nginx-ingress                NGINX and  NGINX Plus Ingress Controllers fo…   92        
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  152       
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter for NGINX and NGIN…   41        
nginx/unit                         This repository is retired, use the Docker o…   63        
nginxproxy/nginx-proxy             Automated nginx proxy for Docker containers …   137       
nginxproxy/acme-companion          Automated ACME SSL certificate generation fo…   134       
bitnami/nginx                      Bitnami container image for NGINX               188       
bitnami/nginx-ingress-controller   Bitnami container image for NGINX Ingress Co…   34        
nginxproxy/docker-gen              Generate files from docker container meta-da…   17        
ubuntu/nginx                       Nginx, a high-performance reverse proxy & we…   113       
rancher/nginx-ingress-controller                                                   13  

上述的语句表示的意思是,从DockerHub中查找所有镜像包含NGINX,并且star数大于10的镜像

docker logout

登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认是官方的Docker Hub

指令很简单:

docker logout
test@VM-24-7-ubuntu:~$ docker logout
Removing login credentials for https://index.docker.io/v1/
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐