目录

  1. 修改Docker Registry配置
  2. 使用Registry V2 RestfulAPI 删除镜像
  3. Docker Registry GC回收空间
  4. 使用UI管理Docker Registry

修改Docker Registry配置

配置开启删除功能:config.yml

version: 0.1
log:fields:service: registry
storage:delete:enabled: truecache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registry
http:addr: :5000headers:X-Content-Type-Options: [nosniff]
health:storagedriver:enabled: trueinterval: 10sthreshold: 3

主要在storage下增加delete开启状态 enabled:true

具体配置参考官方配置详情:distribution/configuration.md at main · distribution/distribution · GitHub

使用Registry V2 RestfulAPI 删除镜像

镜像删除之前需要获取镜像的digest值

  • 获取镜像digest值
curl --cacert /etc/docker/certs.d/192.168.0.34\:5000/ca.crt -H "Accept:application/vnd.docker.distribution.manifest.v2+json" https://192.168.0.34:5000/v2/messer/manifests/1.0

注意:

我们配置了证书,所以必须要添加证书 –cacert使用crt证书

在获取镜像digest值时必须要指定Header “Accept:application/vnd.docker.distribution.manifest.v2+json” 否则无法获取

RESTful API格式:

/v2/<镜像名称>/manifests/<tag>

具体Docker registry V2 RESTful API查看:HTTP API V2 | Docker Documentation

  • 通过上面获取到的具体返回信息
{"schemaVersion": 2,"mediaType": "application/vnd.docker.distribution.manifest.v2+json","config": {"mediaType": "application/octet-stream","size": 4191,"digest": "sha256:c8043677c5d750e0904298c29825d1da8389a1ea2e2564e076ed54a023ece056"},"layers": [{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 51363125,"digest": "sha256:75a822cd7888e394c49828b951061402d31745f596b1f502758570f2d0ee79e2"},{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 20179224,"digest": "sha256:0aefb9dc4a57d3de6a9cfa2e87e4502dfa8ce3876264bb20783b1610f8e44806"},{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 193,"digest": "sha256:046e44ee6057f1264d00b0c54adcff2f2c44d30a29b50dfef928776f7aa45cc8"},{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 596,"digest": "sha256:614a7b3525a1442775b9d1b52413024dc750b6a9169fcae8d4ef9cf98bda7f0f"},{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 1083978,"digest": "sha256:5fe57df972ae5e10f02783cb372841e6feab67a296e2abc16f9a868e4322c33d"}]
}

我们要的就是"digest": "sha256:c8043677c5d750e0904298c29825d1da8389a1ea2e2564e076ed54a023ece056"这个值

  • 通过delete接口删除镜像
curl --cacert /etc/docker/certs.d/192.168.0.34\:5000/ca.crt -X DELETE https://192.168.0.34:5000/v2/messer/manifests/sha256:c8043677c5d750e0904298c29825d1da8389a1ea2e2564e076ed54a023ece056

返回不是404 就是删除了

具体Docker registry V2 RESTful API查看:HTTP API V2 | Docker Documentation

Docker Registry GC回收空间

但是实际上并没有删除,只是删除了 Registry 的索引。实际文件并没有删除。

最后还需要执行镜像的垃圾回收:

registry garbage-collect /etc/docker/registry/config.yml

上面需要进入到registry容器里面去执行,/etc/docker/registry/config.yml为配置文件路径

gc完后会看到被gc的信息例如:

root@83d6f5acc9f5:/# /bin/registry garbage-collect /etc/docker/registry/config.yml
INFO[0013] Deleting blob: /docker/registry/v2/blobs/sha256/c0/c0c9ad6136b5e7b142c48c7167eede3d15af54c538f7f3177c50693006cca242  go.version=go1.6.2 instance.id=73c88c92-c196-413e-9cdf-413760de2a62
INFO[0013] Deleting blob: /docker/registry/v2/blobs/sha256/0c/0c1f3512513001c7e37c0dff11064a5c76ad9098507ee74189d6a810742173d7  go.version=go1.6.2 instance.id=73c88c92-c196-413e-9cdf-413760de2a62

如果没有任何输出证明没有回收到任何东西。

使用UI管理Docker Registry

上面是通过Docker registry V2 RESTful API的方式删除,也可以通过UI工具删除,目前Docker registry UI工具也比较多这里介绍两个, docker-registry-frontend和hyper/docker-registry-web。

docker-registry-frontend

我们使用的是 docker-registry-frontend但是他的功能比较弱没有删除的操作,只能浏览,虽然他的说明里面有说明添加了删除功能但是发布的版本中并没有合并删除功能的代码:

官方hub信息:Docker Hub

正在上传…重新上传取消

这个MODE_BROWSE_ONLY=false这个配置是完全没有效果的,今天可以查看docker-registry-frontend的github issue:only support browsing repositories? · Issue #106 · kwk/docker-registry-frontend · GitHub

hyper/docker-registry-web

这个UI虽然不是很好看,但是有删除功能

官方hub信息:Docker Hub

创建步骤根据官方hub上面的说明信息一步一步做就ok了,但是这个东西做的不太好速度有点慢。

界面预览:

正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消 正在上传…重新上传取消

不管是通过RESTful API还是UI删除镜像,都需要去再registry里去gc一下才能真正释放空间,如下时候gc后的效果图

正在上传…重新上传取消 正在上传…重新上传取消

Docker Registry 删除镜像并清理相关推荐

  1. Docker Registry部署镜像私有仓库及鉴权认证

    文章目录 一.Docker Registry是什么? 二.Docker Registry部署私有仓库 2.1.Docker Registry安装 2.2.Docker Registry配置 2.3.启 ...

  2. Docker Registry 私有镜像仓库批量清理镜像

    Docker 私有镜像仓库批量清理镜像 前言 在频繁长期使用镜像仓库后,由于镜像仓库清理镜像比较费劲,业内也没有一个比较好的清理方案,官方提供的镜像仓库清理也比较费劲,导致 Docker 镜像仓库越积 ...

  3. docker registry存储镜像文件的组织结构

    ​ docker registry是一个用来存储符合OCI标准的镜像的仓库,源代码见github上的distribution项目.镜像仓库也可以看作是一个应用,docker也提供了该应用的镜像,名字就 ...

  4. docker 批量删除 镜像或容器 删除所有容器

    docker 本身并没有提供批量删除的功能,当有大量的镜像或者容器需要删除的时候,手动的一个一个删就比较麻烦了. 1. 直接删除所有镜像或容器 # 直接删除所有镜像 docker rmi `docke ...

  5. Docker Desktop删除镜像后磁盘空间未减少

    感谢:windows docker磁盘占用问题,删除镜像但还是占用着磁盘空间的解决方案_weixin_43271225的博客-CSDN博客_docker删除镜像磁盘未释放 因为 windows 中的 ...

  6. Docker下删除镜像报错 (cannot be forced) - image has dependent child images

    记录一次docker删除镜像报错: docker rmi 镜像Id 报错: Error response from daemon: conflict: unable to delete ae9561a ...

  7. 报错集-------docker中删除镜像时报错

    报错现象:在Docker中使用镜像ID删除镜像时会出现镜像删除不了的错误,如下图所示 解决方案:排查后发现是因为之前使用tag命令改过标签,导致同一ID具有两个不同名称的镜像.后来通过镜像名称成功地将 ...

  8. Docker强制删除镜像

    场景 在服务器上使用Docker打包成容器来跑服务时,应为磁盘原因要删除不要或者异常的镜像. 删除 查看所以的镜像 docker images -a REPOSITORY TAG IMAGE ID C ...

  9. docker 批量删除镜像

    查询镜像 > docker images 批量删除满足条件的镜像 查询满足条件的镜像,并输出镜像id docker images |grep '<none>'|awk '{ prin ...

最新文章

  1. 项目的简单总结一 -- 关于对贝塞尔和shapelayer结合使用的动画特效
  2. 请求体的方式传参_Angularjs中$http以post请求通过消息体传递参数的实现方法
  3. python知识:几个排序算法的python实现
  4. Hibernate快速入门
  5. JavaEE5 Jax-ws 学习(Soap webservice)
  6. python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...
  7. php去除每行的重复文本,php删除文本文件中重复行的方法
  8. 35岁北大博士拟升市长
  9. vSAN其实很简单-vSAN盘他之重新部署vCenter
  10. 【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解-破解软件论坛-ZOL中关村在线...
  11. word怎么删除参考文献的横线_Word2010利用尾注做参考文献时如何删除尾注中的横线...
  12. 艾永亮:2平米的Manner如何战胜200平米的星巴克
  13. ⅴs2010控件名称及用方法_VS2010 用户自定义工具箱控件的制作方法
  14. 爬取B站20万+条弹幕,我学会了如何成为B站老司机
  15. 网站访问慢的排查思路
  16. 计算机网络的有线接入,电脑怎么连接有线网络
  17. Unity的gamma矫正、颜色空间及其转换的问题
  18. Android SystemUI 架构详解
  19. 锁相环的组成和原理及应用
  20. 基于SpringBoot2的房屋租赁系统的设计与实现-计算机、软件工程、网络工程等专业毕设

热门文章

  1. 蓝牙基础知识进阶——Physical channel
  2. Commonjs规范及Node模块实现
  3. Django1.9开发博客06- 模板继承
  4. eclispe快捷键
  5. linux --常用命令
  6. 从几个版本的memcpy的测速过程学习一点底层的东西
  7. 外挂:一个很杯具的关键字
  8. /bin/bash^M: bad interpreter: No such file or directory
  9. Hadoop SequenceFile
  10. form表单用js提前执行函数若不成功则不提交_面试必会的重复提交 8 种解决方案!...