电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Docker 徹底刪除私有庫鏡像的操作

瀏覽:4日期:2024-10-30 08:24:39
首先看看網上一般的做法

私有庫默認是不支持刪除鏡像的,需要修改config.yml配置文件,在storage節點下加入 delete: enabled: true ,然后重啟私有庫。

Docker 徹底刪除私有庫鏡像的操作

docker 提供的鏡像刪除api為:

DELETE ip:端口/v2/<repository>/manifests/<reference>

repository 為鏡像的repository

reference 為鏡像push成功后生成的 digest:sha256 值

獲取 digest :

curl --header 'Accept: application/vnd.docker.distribution.manifest.v2+json' -I -XGET <私有庫ip>:端口號/v2/<鏡像repository>/manifests/<鏡像tag>

注意:

--header 'Accept: application/vnd.docker.distribution.manifest.v2+json' 這個header 是必須要加的,不加的話Content-Type 是v1+prettyjws,獲取的digest是錯誤的!!

例:

curl --header 'Accept: application/vnd.docker.distribution.manifest.v2+json' -I -XGET 192.168.120.107:5000/v2/my-registry/manifests/1.0

Docker 徹底刪除私有庫鏡像的操作

刪除鏡像:

例:

curl -I -X DELETE http://192.168.120.107:5000/v2/my-repository/manifests/sha256:4d523adb3c653bab7dfd0326081860b3cba24dc393f69d6731daa513c435ec0c

刪除后我們查看下私有庫

curl 192.168.120.107:5000/ v2/my-repository/tags/list

就會發現剛刪除的那個tag不見了。但是如果在執行命令的前后車庫內私有庫鏡像存儲目錄的文件大小,會發現并沒有多大的變化

顯然數據并沒有被真的刪除,我們還需要運行docker提供的垃圾回收命令。

垃圾回收

我們需要登錄 私有庫所在的服務器,然后執行命令:

docker exec -it <私有庫的容器ID或者容器名> sh -c ’ registry garbage-collect /etc/docker/registry/config.yml’

當然,也可以進入到私有庫的容器中,再執行:

docker exec -it <私有庫的容器ID或者容器名> shregistry garbage-collect /etc/docker/registry/config.yml

這種方法特別麻煩,只能刪tag,不會刪repository,刪除之后會在blobs目錄下留下很多空文件夾,而且如果一個repository下有多個tag,而這些tag的數據相同的話,刪除其中一個tag會同時把所有tag都刪了

雖然網上有刪除私有庫鏡像的python腳本,但是我感覺并不好用。

我是不會滿足于此的,于是我自己寫了個sh腳本,先來看看效果。

Docker 徹底刪除私有庫鏡像的操作

Docker 徹底刪除私有庫鏡像的操作

Docker 徹底刪除私有庫鏡像的操作

腳本還有一些人性化的提示,而且sh腳本通俗易懂,容易擴展,腳本我也上傳到gitHub上了,有興趣的可以下載試試。

gitHub地址:https://github.com/hushuai86/docker-delete

下載運行:

#先下載腳本到/usr/local/bin/目錄下 curl https://raw.githubusercontent.com/hushuai86/docker-delete/master/docker-delete-2.0.sh | sudo tee /usr/local/bin/docker-delete >/dev/null#賦予可執行權限 chmod a+x /usr/local/bin/docker-delete#私有庫鏡像存儲目錄路徑全局環境變量(該路徑就是運行私有庫容器時,用-v 命令將私有庫容器內 /var/lib/registry目錄掛載到本機的路徑) #例: /opt/data/registry是我運行容器時私有庫鏡像存儲目錄掛載到本地的目錄 echo 'export DOCKER_REGISTRY_DIR=/opt/data/registry' >>/etc/profile#運行私有庫容器ID全局環境變量設置(正在運行的私有庫容器的 ID) #例: 89b9b3c9054ay是我的私有庫庫容器的id echo 'export DOCKER_REGISTRY_CONTAINER_ID=89b9b3c9054a' >>/etc/profile#使配置生效 source /etc/profile

然后就可以使用docker-delete命令了,如果你覺得腳本有哪些用著不舒服的地方,可以編輯腳本自己改改

原理解析:

(在以下的截圖中 /opt/data/registry是我運行容器時私有庫鏡像存儲目錄掛載到本地的目錄)

私有庫鏡像存儲目錄下有兩個文件夾 blobs和 repositories

Docker 徹底刪除私有庫鏡像的操作

其中repositories目錄下是以鏡像repository命名的幾個文件

也就是說想要知道私有庫有哪些鏡像,直接看這個文件夾有哪些子文件夾就知道了

而在每個鏡像repository文件夾/_manifests/tags目錄下可以 看到該鏡像有哪些tag

Docker 徹底刪除私有庫鏡像的操作

但是鏡像的真實數據并不在repositories目錄下,而是以數據塊的方式存儲在blobs目錄下,一個鏡像被分成多個數據塊,也就是執行垃圾回收命令時輸出的 ‘marking blob …‘那樣的關聯關系,而鏡像和數據塊之間的關聯關系就是在 repositories/鏡像repository/_manifests/revisions/sha256/ 目錄下的sha256值。

Docker 徹底刪除私有庫鏡像的操作

在以sha256值命名的目錄下有個link的文件,內容就是這個sha256值

經過我測試發現,只要這個link文件被刪除,然后在私有庫容器內執行垃圾回收命令‘ registry garbage-collect /etc/docker/registry/config.yml’,那么這個sha256值關聯的blobs就會被徹底刪除

但是,一個鏡像可能有很多個tag,那么這個sha256值關聯的 blobs數據 到底屬于哪個 tag呢?

我們進到鏡像的某個tag/index/sha256/ 目錄,會發現 有個 sha256值命名的文件夾,而且這個sha256值 在之前的revisions/sha256/ 下存在。在這個文件夾下也有個link文件,保存了該sha256值。

Docker 徹底刪除私有庫鏡像的操作

所以根據我的理解,當我們調用docker提供的API 刪除一個tag時,會在這個鏡像的tag/index/sha256/<sha256值>/link文件中獲取sha256值,然后看是不是還有其他tag也關聯了這個sha256值,如果有的話,只刪除這個tag文件夾,如果沒有的話,那么在刪除這個tag的文件的同時還會刪掉 revisions/sha256/ 目錄下的 改sha256對應的link文件,這樣的話,當在容器內執行垃圾回收的命令時,就會徹底刪除該sha256值關聯的blobs數據。

特別注意:

在徹底刪除一個鏡像的數據后,需要重啟下私有庫容器,如果不重啟的話,你再push該鏡像到私有庫時,總是會輸出 Layer already exists ,似乎是push上去了,但是如果你刪除本地的該鏡像,然后再pull ,就會報錯。

當然,我寫的腳本里是有這個步驟的

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Docker
相關文章:
主站蜘蛛池模板: 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 圈酒招商网【jiushuitv.com】_酒水招商_代理_加盟平台 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 中细软知识产权_专业知识产权解决方案提供商 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 剪刃_纵剪机刀片_分条机刀片-南京雷德机械有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 上海道勤塑化有限公司 |