Docker Registry 删除镜像并清理

目录

  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后的效果图

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

任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX : 18565453898

img

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作&#xff1a; 所有路由不能全部都在myDjango下的urls.py路由文件中&#xff0c;一个app创建一个路由分发文件urls.py&#xff0c; 在myDjango下的urls.py路由文件中只对每…

阿里《Java手册》做一个有技术情怀的人

导读最近重温了阿里的《码出高效Java开发手册》&#xff0c;感觉最后一页“聊聊成长”这一小块的内容写的很棒&#xff0c;特意把它复制出来&#xff0c;送给每一个技术人&#xff0c;愿你做一个有技术情怀的人。正文成长并没有直线式的捷径&#xff0c;“不走弯路就是捷径”这…

安卓应用在各大应用市场上架方法整理

安卓应用在各大应用市场上架方法整理 正在上传…重新上传取消​ ASO优化师-酱紫 酱紫ASO、ASA推广运营研究 ​关注她 1 人赞同了该文章 想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意&#xff1a;首次…

Linux Shell编程之脚本执行方式

1.新建bash脚本文件 打开命令终端 touch hello.sh vim hello.sh2.编辑bash文件 #!/bin/bash # this is a test programerecho "hello word"3.脚本执行 赋予执行权限&#xff0c;直接运行 chmod 755 hello.sh ./hello.sh输出结果&#xff1a;

经典面试题|讲一讲JVM的组成

JVM&#xff08;Java 虚拟机&#xff09;算是面试必问的问题的了&#xff0c;而但凡问 JVM 一定会问的第一个问题就是&#xff1a;讲一讲 JVM 的组成&#xff1f;那本文就注重讲一下 JVM 的组成。 首先来说 JVM 的组成分为&#xff0c;整体组成部分和运行时数据区组成部分&…

ST-GCN训练自建数据集

参考了许多博文&#xff0c;慢慢地也就把st-gcn跑出来了&#xff0c;参考的文章一会附在文章里面&#xff0c;实测有用。 1.安装st-gcn 复现STGCN CPU版 &#xff08;ubuntu16.04pytorch0.4.0openposecaffe&#xff09;_Significance的博客-程序员秘密​​​​​​复现旧版STG…

[翻译] Haneke(处理图片缓存问题)

Haneke https://github.com/hpique/Haneke A lightweight zero-config image cache for iOS. 轻量级0配置图片缓存。 Haneke resizes images and caches the result on memory and disk. Everything is done in background, allowing for fast, responsive scrolling. Asking H…

面试题:为什么Java中的字符串对象是不可变的

阅读本文大概需要 4分钟。所谓不可变对象&#xff0c;是指一个对象在创建后&#xff0c;它的内部状态不会被改变的对象。这意味着当我们将一个不可变对象的引用赋值给某个变量后&#xff0c;我们就不能改变该对象的内部状态。 James Gosling也说过——Java开发者应该尽量使用不…

复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)

前提&#xff1a;ubuntu下将python3.5.2设为默认&#xff08;百度&#xff09; 一.下载stgcn &#xff08;gitbub上fork后导入到gitee快些&#xff09;: st-gcn: Spatial Temporal Graph Convolutional Networks (ST-GCN) for Skeleton-Based Action Recognition in PyTorch…

Linux Shell编程之输入输出重定向

一、.输出重定向&#xff1a; 1.以覆盖方式把正确输入和错误输入都保存在同一个文件中 命令 &> 文件 2.以追加方式把正确输入和错误输入都保存在同一个文件中 命令 &>> 文件 3.以追加方式把正确输入保存在文件1中&#xff0c;把错误输入保存在文件2中 命令 …

不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%

大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象&#xff0c;这个由于在扩容的时候put时产生了死链&#xff0c;由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象&am…

关于发布DIPS的MVC项目的IIS 7.0环境配置的方法

本人技术笨拙&#xff0c;今天在发布DIPS的MVC4.0项目&#xff0c;并部署到IIS上&#xff0c;遇到各种问题。在查询相关资料后&#xff0c;最终得以解决&#xff0c;所以想把这个过程记录下来。 注&#xff1a;DIPS为一种非关系型数据库 首先&#xff0c;需要安装和注册DIPS。注…

Veket PuppyLinux系统装在U盘中

在碎片化或移动式办公的需求前&#xff0c;怎样才能做到只借助别人的硬件&#xff0c;而使用的是自己的操作系统以及保存数据呢&#xff1f;此时你可能会想到将某个Linux的桌面版本推送并存放在U盘中&#xff0c;便于按需进行启动与使用。 Veket是基于Puppy的一个Linux简体中文…

Java调优:Mybaitis的缓存优化

作者&#xff1a;肥朝&#xff0c;来自肥朝&#xff08;ID&#xff1a;feichao_java&#xff09;我们先来看代码这段代码中, Mybatis一共发了两条SQL,这就好像说, Mybatis中没有缓存,然后我们打开Mybatis的文档一看,顿时震惊这难道是骗人的,说好的默认开启缓存呢…..其实不是的…

Shell编程之多命令顺序执行和管道符

1.多命令顺序执行&#xff1a; 打开!命令终端&#xff1a; 2.管道符 打开命令终端&#xff1a;

阿里一面 缓存穿透、缓存击穿、缓存雪崩和热点数据失效问题的解决方案

作者&#xff1a;乔二爷&#xff0c;来自&#xff1a;乔二爷&#xff08;ID&#xff1a;hellozhouq&#xff09;1 前言昨天晚上接到阿里的电面电话&#xff0c;过程中就问到了关于缓存相关的问题。虽然以前接触过&#xff0c;多多少少了解了一些。但是之前自己并没有好好记录这…

Fix chrome 下flash crash的问题

2019独角兽企业重金招聘Python工程师标准>>> 本来好好的&#xff0c;结果不知道为什么&#xff0c;在MAC下使用chrome不断出现flash插件的错误&#xff0c;网上搜了一下&#xff0c;看这里&#xff0c;要把chrome自带的flash插件注释掉。重启chrome好象是没什么问题…

为什么阿里巴巴建议集合初始化时,指定集合容量大小?

集合是Java开发日常开发中经常会使用到的。在之前的一些文章中&#xff0c;我们介绍过一些关于使用集合类应该注意的事项&#xff0c;如《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》。关于集合类&#xff0c;《阿里巴巴Java开发手册》中其实还有另外一个…

十五、Python操作mysql数据库

利用Navicat Premium 15软件连接mysql数据库&#xff0c;新建testdb数据库&#xff0c;并添加2个表usertest和userinfo。 main.py #!/usr/bin/python3 # -*- coding: utf-8 -*- import reimport pymysql # 导入模块myConn pymysql.connect(host127.0.0.1, # 主机模块port33…