Docker:私有镜像仓库 registry


参考链接:
官方API的地址: Registry API 使用手册: Docker Registry

一、Docker Registry 部署


  • step1 启动一个 registry

    docker run -d -p 5000:5000  \
    --name registry --restart=always \
    -v /registry:/var/lib/registry \
    registry
    

    推送试试:

    [root@jumper k8s-deploy]# docker tag registry 192.168.56.10:5000/registry
    [root@jumper k8s-deploy]# docker push 192.168.56.10:5000/registry
    The push refers to repository [192.168.56.10:5000/registry]
    Get https://192.168.56.10:5000/v2/: http: server gave HTTP response to HTTPS client
    

    报错原因:
    client 通过 https 协议 push 镜像,但是 server 端使用的是 http 协议,并没有配置 https 协议。
    解决方案:
    把私有镜像仓库加到信任的仓库列表中,具体配置如下:

  • step2 client 指定仓库通过 http 传输数据

    vim /etc/docker/daemon.json
    {
      "insecure-registries": ["192.168.56.10:5000"]
    }
    
  • step3 日常使用

    # 打标签
    docker tag registry 192.168.56.10:5000/registry
    # 上传
    docker push 192.168.56.10:5000/registry
    # 拉取
    docker pull 192.168.56.10:5000/registry
    
  • step4 美化化 tag

    # 部署 registry 时端口配置为80端口,或做个nginx反代到端口5000(这里不演示)
    docker run -d -p 80:5000  \
    --name registry --restart=always \
    -v /registry:/var/lib/registry \
    registry
    # 配置hosts
    echo 'registry.local' >> /etc/hosts
    # 配置仓库走http协议
    vim /etc/docker/daemon.json
    {
    "insecure-registries": ["http://registry.local"]
    }
    # 重启docker生效配置
    systemctl restart docker
    # 效果展示
    docker tag registry registry.local/registry
    docker push registry.local/registry
    

二、Registry API 使用


  • 查看API是否可用,返回200 OK代表可用
    curl -I -X GET localhost:5000/v2/
    
  • 查看所有镜像
    curl -X GET localhost:5000/v2/_catalog
    
  • 获取一个镜像的 manifest
    curl -I -X GET localhost:5000/v2/<name>/manifests/<reference>
    
    代表镜像名,reference可以使用 tag 或 digest
  • 查看一个镜像是否存在
    curl -I -X HEAD localhost:5000/v2/<name>/manifests/<reference>
    
    存在:HTTP/1.1 200 OK 不存在:HTTP/1.1 404 Not Found
  • 下载单个镜像层
    curl -X GET localhost:5000/v2/<name>/blobs/<digest>
    
  • 删除一个镜像
    curl -I -X DELETE localhost:5000/v2/<name>/manifests/<reference>
    
    不过删除一个镜像需要加一个header,如下:
    curl -I --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE localhost:5000/v2/<name>/manifests/<reference>
    
    同时还需要在配置中许可删除操作,修改配置文件,在storage下添加delete的许可:
    storage:
    	delete:
    		enabled: tru	
    

三、Registry 存储细节


在这里插入图片描述
目录分为两层:blobs 和 repositories:

  • blobs:镜像所有内容的实际存储,包括了镜像层和镜像元信息manifest。
  • repositories:镜像元信息存储的地方,name代表仓库名称

每个仓库下面又分为_layers、_manifests两个部分:

  • _layers负责记录该仓库引用了哪些镜像层文件
  • _manifests负责记录镜像的元信息

每个 manifests 又分为revisions、tags两个部分:

  • revisions包含了仓库下曾经上传过的所有版本的镜像元信息
  • tags包含了仓库中的所有标签

每个tags又分为 current、index 两个部分

  • current 记录了当前标签指向的镜像
  • index 目录则记录了标签指向的历史镜像

四、补充扩展


4.1 查看镜像列表

[root@jumper repositories]# curl -X GET localhost:5000/v2/_catalog
{"repositories":["nginx","registry"]}

或者

[root@jumper repositories]# ls /registry/docker/registry/v2/repositories
nginx  registry

或者
在这里插入图片描述

4.2 查看镜像tag

[root@jumper repositories]# curl -X GET localhost:5000/v2/nginx/tags/list
{"name":"nginx","tags":["latest","v3.1"]}

或者

[root@jumper tags]# ls /registry/docker/registry/v2/repositories/nginx/_manifests/tags
latest  v3.1

或者
在这里插入图片描述

4.3 删除镜像

  • step1 进入docker registry的容器中
    docker exec -it registry /bin/sh
    
  • step2 删除repo
    rm -rf /var/lib/registry/docker/registry/v2/repositories/nginx
    
  • step3 清除掉blob(垃圾回收,有效层会被标记,无效层会被清理)
    registry garbage-collect /etc/docker/registry/config.yml
    

五、registry 认证


5.1 添加认证(服务端)

  • 部署认证功能
    # 准备 registry 密码文件的存放目录,后续挂载到 registry 容器里面
    mkdir -p /opt/registry-var/auth/
    # 通过 htpasswd 生成加密后的密码文件
    yum -y install httpd-tools
    htpasswd -Bbn userA 123456 >> /opt/registry-var/auth/htpasswd
    
    # 启动容器
    docker run -d -p 5000:5000 \
    -v /opt/registry-var/auth/:/auth/ \			# 载入密码文件
    -v /opt/myregistry:/var/lib/registry \		# 载入原先已上传的images
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    registry
    
  • 效果展示
    在这里插入图片描述

5.2 添加认证(客户端)

在这里插入图片描述

5.3 删除认证(客户端)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值