赢咖2主管97916

用友云开发者中心是基于Docker容器进行微服务架构应用的落地与管理。相信各位同学在使用的过程中,会发现随着Docker镜像的增多,占用磁盘空间也约来越多。这时我们需要清理私有镜像仓库中不需要的镜像。但在实际操作时,才会发现这本以为很简单的任务中却暗藏玄机,遇到了不少的麻烦。在这里我们分享一下清理镜像仓库时遇到的坑点。想要直接寻求解决方案的同学可以直接看第二部分。
一、那些年,我们在清理镜像仓库时走过的坑
坑点1:官方提供的接口并不能真正的删除镜像
这着实是最大的坑点。很多同学查资料发现,官方已经提供了删除镜像仓库的API,所以可能相当然的以为直接使用就好,殊不知掉入了官方埋下的最大的坑点,也是本文要着手解决的核心问题:官方提供的删除镜像仓库中镜像的接口,仅仅是把manifest删除了,真正的镜像文件还存在!官方并没有提供删除镜像层的接口!这也就是说,当我们调用删除镜像的接口之后,仅仅是查看镜像的列表时看不到原镜像了,然而原有镜像仍然在磁盘中,占用着宝贵的文件存储空间。
  坑点2:直接调用官方的删除镜像API,会返回405的错误码
直接调用删除镜像的接口,可能会遇到以下错误提示:
Docker镜像仓库清理的探索之路
405,意味着方法不被允许。实际上,官方可能是处于安全性的考虑,在默认的情况下禁止了直接删除镜像的功能。若要开启删除镜像功能,需要修改镜像仓库的配置文件。具体操作为修改/etc/docker/registry/config.yml文件,在storage下添加delete的许可之后,重启镜像仓库服务。
  坑点3:使用官方提供的garbage-collect工具,会有无用的文件残留
官方为registry提供了garbage-collect(gc)工具清理镜像的物理存储,将没有引用的layer删除。
gc的清理过程分为两部分:
1)mark:扫描所有的manifest,列出引用的layer;
2)sweep:扫描所有的layer,不在mark里的layer将被清理删除。
gc可以在dry-run的模式下运行(添加参数-d),只输出gc信息,不进行实际操作。我们可以通过这种方式来确认哪些镜像会被清除。
使用gc工具清理镜像的一个问题就是文件清理得不够干净,无法清理已经没有tag的镜像目录,并且还残存少部分文件,从十KB到几十KB不等。久而久之,垃圾文件和目录的数量会越来越多。
坑点4:garbage-collect不是事务操作,清理镜像时可能会产生误操作
gc不是事务操作,当gc过程中刚好有push操作时,则可能会误删数据。一个可行的解决办法是手动更改镜像仓库的配置,暂时禁止镜像的push操作。
在镜像仓库的配置文件中可以配置read-only模式。当启用read-only之后,再push镜像时会得到405的错误。gc完成后取消read-only模式,再push镜像即可。
坑点5:使用garbage-collect工具后,必须重启镜像仓库才能正常使用
如果不重启镜像仓库,则再次push该镜像时可能会得到layer already exists错误:
Docker镜像仓库清理的探索之路
其可能的原因是镜像被删除后,仓库的缓存中还存有已经删除的镜像信息,所以再次push会报层存在的错误。
二、两种清理镜像仓库的方案
方案一:使用官方API + GC
使用官方提供的方法可以较为简便的清理镜像仓库。整个清理过程可能需要几百毫秒到几秒的时间。此操作有一定的危险性,因此清理镜像不宜过于频繁。官方在git上也有类似描述。点击查看:https://github.com/docker/docker-registry/issues/988
具体操作过程如下:
1、准备工作
在配置中许可删除操作。修改镜像仓库的配置文件,一般在如下路径:
/etc/docker/registry/config.yml
在storage下添加delete的许可之后,重启镜像仓库。
Docker镜像仓库清理的探索之路
用docker方式启动的镜像仓库也可以添加环境变量:
REGISTRY_STORAGE_DELETE_ENABLED=true
2、获取待删镜像的digest
获取镜像digest的API为:
GET /v2/<name>/manifests/<reference>
其中,name是仓库名,reference是标签,此时需要注意,调用时需要加上header内容:
Accept: application/vnd.docker.distribution.manifest.v2+json
其中Docker-Content-Digest的值就是镜像的digest
3、调用官方的HTTP API V2删除镜像
删除镜像的API为:
DELETE /v2/<name>/manifests/<reference>
其中,name是仓库名称,reference是包含“sha256:”的digest。
4、调用GC清理镜像文件
使用gc工具的方式为:
bin/registry garbage-collect /etc/docker/registry/config.yml
gc清理需要时间,如果在gc过程中刚好有push操作,可能会产生未知的问题,建议设置read-only模式之后再进行gc,然后再改回来。
5、重启docker registry
注意,如果不重启会导致push相同镜像时产生layer already exists错误。
方案二:使用第三方脚本
在清理镜像仓库这件事上,业内已经有很多人进行过各种各样的尝试。本文挑选一种比较好的方式推荐使用。
1、宿主机安装delete-docker-registry-image
可参考此命令的安装和使用方式。参考链接:https://github.com/burnettk/delete-docker-registry-image
2、执行delete-docker-registry-image命令可以删除某个仓库(sb)
Docker镜像仓库清理的探索之路
或者某个具体的镜像(如alpine:3.2)
Docker镜像仓库清理的探索之路
如果删除某镜像后该仓库为空,可以用删除仓库的方式删除此空仓。
Docker镜像仓库清理的探索之路
该工具也提供了dry-run的方式,只输出待删除的信息不执行删除操作。在命令后加上——dry-run即可。
3、重启docker registry
跟gc方式一样,删除镜像之后要重启docker registry,不然还是会出现相同镜像push不成功的问题。
以上就是本文推荐的两种清理镜像仓库的两种方案。第一种方案更多的使用了官方提供的工具,使用时相对更加安全,且无需额外安装其他内容。第二种方案使用了第三方工具或脚本,使用时更加灵活且简便,且清理的更加彻底。具体操作时可根据自己的需求选择方案。

原文地址:http://blog.51cto.com/14204961/2351090

时间: 2024-07-31 16:41:07

赢咖2主管97916的相关文章

赢咖2招商97916

为实现持久化,docker引入了挂载数据卷的方法,以实现数据的可持久化.具体是以下三种:一.通过docker run命令命令:docker run -dit --name gerrit -p 9001:8080 -p 29419:29418 -v /home/docker/test.txt:/var/spool/cron/crontabs/root openfrontier/gerrit:2.15.3此时将宿主机的/data/mysql1挂载到容器的/var/lib/mysql下,这里需要注意的

无极荣耀主管97916

写一个shell脚本,通过curl -I 返回的状态码来判定所访问的网站是否正常. 比如,当状态码为200时,才算正常. #!/bin/[email protected][email protected][email protected]br/>br/>br/>url="http://www.baidu.com"[email protected]code=curl -I $url 2>/tmp/curl.err |head -1|awk '{$2}'if [ -

赢咖二招商主管753731之开源,基础软件最好的商业模式

虽然已经 2019 年,但还是有不少人(甚至是大部分人),一提到“开源”,想到的就是“免费”与“个人开发的业余(低水平)软件”.然而事实恰恰相反,今天“开源”正是基础软件最好的生长模式.“开源”能对基础软件公司提供三方面的助力:技术/品牌推广,用户/开发者拓展,人才吸引. 是不是言过其实?让我们一起细细探究什么是“开源”. “开源”简史 “开源”( Open Source )这个口号源于 1998 年的一次软件黑客峰会.当时,自由软件运动已经进行了 15 个年头. 软件自由 1969 年, Un

新宝6主管97916

游戏怎么招代理如何吸引别人加我好友卖货快我是做推广的,请问有什么引流吸粉的办法吗?目前用引流较快的微信引流?互联网这么大一个鱼塘,如果我们用软饵,采用吸引的, 让鱼儿自动上钩何乐而不为?让有需求和购买的人来找你......也就是被动加人的!就像朋友圈老在刷屏的"你正好需要,我正好,仅次而 已"然后你告诉自我. 我个人也做过不少的产品,但真正能赚到钱的却很少.大家都知道这个市场竞争太多,各式各样的产品也层出不穷!为什么别人客源不断,而你 却还在为了没有客源发愁?别人数米的时候你还在观望?

小组赛赢局,和局不赢,有何区别?

现在比较想买喜欢的是高斯和那样的太棒了进攻上路高地真的有毒,那地方翻车好几次了吧 那个发帖说欠公道的弱智呢?为啥删我帖子....有国外的,能爬墙的朋友,赶快去站上传韩文.英文,台湾版本的总决赛四场解说,老子晚上通宵了,就这下尴尬了 想看湾湾解说们解说最后的比赛今天发挥不错,但不能骄傲,需多练几套阵容小时候玩街机拳皇,我总是在赢对手三四把的时候让对手一把,不然老是赢,就没人敢接币了,一个人玩恭喜恭喜恭喜同样为加油,最后心疼扣肉和破篓子下棋,越下越臭,整个赛区互相拖后腿,现在已经和湾湾五五开了,再过

徐正老师《赢在中层 ——中层经理核心管理技能训练》

赢在中层 ——中层经理核心管理技能训练 课程背景: 为什么从上往下看:高层很孤独,中层很盲目,基层很麻木! 为什么从下往上看:高层很无理,中层很无助,基层很无辜! 许多中层干部并不是学管理出身,而是因工作出色,由业务骨干提拔到管理岗位上来,因此常常沿袭做员工时的思维模式和处事方法.对于管理,他们依靠的是零散的经验和本能的直觉,没有掌握科学的方法和技能,更没有进行系统化地思考和梳理..... 课程目的: 1.如何决策决断?如何凝聚人心?如何激励团队? 2.如何权变和矛盾冲突处理? 3.如何带领团队

苹果零售业务主管Angela Ahrendts的薪水是库克的8倍

Apple insider报道,根据苹果提交给 SEC 的公告,公司 CEO 蒂姆?库克在上一财年的薪酬总额为 922 万美元,同比翻番.与此同时,苹果负责零售业务主管 Angela Ahrendts 让库克的薪酬相形见拙,因为前者的薪酬总额达到了惊人的 7340 万美元. Angela Ahrendts 去年才加入苹果,之前她是奢侈品牌巴宝莉的 CEO.在已结束的 2014 财年,苹果在大屏 iPhone 的推助下业绩全线飙红,净利润达到 395 亿美元,高于上一财年的 370 亿美元.市值也

联迪-M36-移动支付终端-骁派金服-信咖特助

故障现象 故障详细分类 可能的原因 解决办法一.电源开关机问题 联迪-M36-移动支付终端-骁派金服-信咖特助开机无显示 联迪-M36-移动支付终端-骁派金服-信咖特助电池没电了或是交流电源没插好 请接上联迪-M36-移动支付终端-骁派金服-信咖特助交流电源,或检查联迪-M36-移动支付终端-骁派金服-信咖特助交流电源是否已经插好联迪-M36-移动支付终端-骁派金服-信咖特助终端自动关机现象 当没有外接电源时,为了省电程序联迪-M36-移动支付终端-骁派金服-信咖特助默认设置成在一定时间不按键就

Unity大中华区技术经理成亮:我们一直在和开发者共建一个开放共赢的平台

2018中国杭州云创大会将以"开放·生态·赋能"为主题,汇聚行业领袖.技术大咖及产业链从业者,探讨数字化浪潮下云计算.大数据的发展方向和应用趋势,分享教育.游戏.制造.金融等行业精英的前沿实践,重点解析工业智能互联网和数字化产业园区的升级之路. 此次大会还将基于开放技术和创新模式与大家一起探索打造联合生态圈,推动产业智能化升级,引领互联网+企业数字化转型:以知识共享促进云计算.大数据普惠化的道路,形成数字经济共同体,成为未来中国经济增长的新引擎. 为了帮助大家进一步了解这场全球前言技术