docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2
前段時(shí)間有客戶反映我們部署服務(wù)的服務(wù)器磁盤快滿了,聯(lián)系我們說(shuō)看看清理一下
于是就開(kāi)始看服務(wù)器
我們所有的服務(wù)都是使用docker部署的,經(jīng)過(guò)檢查,這次占滿了磁盤的都是在/var/lib/docker/overlay2目錄下的文件夾,這個(gè)路徑一看就是docker的存儲(chǔ)目錄,但是為什么docker跑得好好的他的占用會(huì)變高呢?

圖中可見(jiàn),/var/lib/docker/overlay2目錄的占用大的離譜
那我們進(jìn)來(lái)看看這個(gè)目錄下是什么占用了這么大的空間

上圖可見(jiàn),/var/lib/docker/overlay2目錄下的文件夾名基本都是這種md5編碼,并且其中有一個(gè)a875e開(kāi)頭的文件夾的占用達(dá)到了518G,相當(dāng)恐怖
那/var/lib/docker/overlay2目錄存 的到底是什么呢?為什么能有這么大的占用?我們又需要如何去進(jìn)行清理呢? 我查閱了一些博客文章了解到,overlay2是docker使用的文件存儲(chǔ)驅(qū)動(dòng),也就是說(shuō),在/var/lib/docker/overlay2目錄下的文件都是docker使用的存儲(chǔ)【廢話】
overlay2是分層存儲(chǔ),每一層通過(guò)本層的md5作為文件夾名來(lái)命名,如果要存儲(chǔ)的兩個(gè)東西【比如兩個(gè)鏡像】的底層幾層的內(nèi)容是一樣的,那他們的md5就也是一樣的,通過(guò)md5核驗(yàn),確認(rèn)他們這幾層是一樣的之后,在overlay2中實(shí)際存儲(chǔ)的時(shí)候,這幾層就可以只存儲(chǔ)一份,然后由這兩個(gè)東西共用,來(lái)達(dá)到節(jié)省空間的目的。

所以我們?cè)?code>/var/lib/docker/overlay2目錄下看到的這茫茫多的md5,就是一層一層的數(shù)據(jù) ?
那為什么我們客戶服務(wù)器上的a875e開(kāi)頭的文件夾占用會(huì)達(dá)到518G呢?究竟是什么東西占用了這么多? 我們進(jìn)這個(gè)文件夾里看一眼

可以看到,在這個(gè)a875e的文件夾中,有一個(gè)diff文件夾占用259G,一個(gè)merged文件夾占用259G,直覺(jué)告訴我這兩個(gè)文件夾中存儲(chǔ)的應(yīng)該是基本一致的東西 ?
所以是什么東西呢??? ?
經(jīng)過(guò)排查,我們發(fā)現(xiàn)是我們一個(gè)服務(wù)會(huì)將一些運(yùn)行文件存儲(chǔ)在本地文件路徑中,但是,這個(gè)服務(wù)在啟動(dòng)的時(shí)候因?yàn)橐恍┦韬?,沒(méi)有將他要存儲(chǔ)文件的路徑掛載到宿主機(jī)中,導(dǎo)致這個(gè)服務(wù)一直在往容器內(nèi)的某個(gè)路徑寫文件,這個(gè)服務(wù)在運(yùn)行了一年多之后寫入容器內(nèi)本地的文件終于到了……259G,但雖然在容器內(nèi)占用是259G,但是在宿主機(jī)上,變成了diff文件夾占用259G,merged文件夾占用259G,合共518G,磁盤空間就這么被吃掉了。 ?
為了測(cè)試我們的推斷,我們進(jìn)入容器內(nèi)刪除了那些本地文件,然后再在宿主機(jī)上查看宿主機(jī)的磁盤占用,果然,我們?cè)谌萜鲀?nèi)刪除的文件大小是259G,但是宿主機(jī)上空出了518G的空間,故我們可以確定,我們?cè)赼875e的文件夾中看到的diff文件夾和merged文件夾,其中實(shí)際占用巨量空間的東西就是我們?cè)谌萜鲀?nèi)存儲(chǔ)的本地文件,換言之,/var/lib/docker/overlay2目錄會(huì)存儲(chǔ)我們起的容器中的文件【應(yīng)該還包括我們的鏡像本身,docker鏡像也是分層存儲(chǔ)在這里的,畢竟容器跑起來(lái)以后系統(tǒng)相關(guān)的一些文件是和鏡像一樣的】
所以回到標(biāo)題
docker的overlay2中存的都是什么?
存的是我們的鏡像文件和容器內(nèi)的文件
如何清理/var/lib/docker/overlay2?
- 刪除不用的鏡像
- 檢查是否有容器內(nèi)的服務(wù)會(huì)往容器內(nèi)的本地寫文件
- 檢查各容器的磁盤占用,如果有發(fā)現(xiàn)磁盤占用過(guò)高的情況則對(duì)應(yīng)處理【原則上如果容器內(nèi)服務(wù)有寫文件行為,則寫文件的目錄應(yīng)當(dāng)掛載到宿主機(jī)上,而不是直接往容器的本地寫
- 需要應(yīng)急處理的話可以先進(jìn)入容器內(nèi)直接刪除容器內(nèi)可以刪除的文件
總結(jié)
到此這篇關(guān)于docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2的文章就介紹到這了,更多相關(guān)docker overlay2中存的是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Deepin使用docker安裝mysql數(shù)據(jù)庫(kù)過(guò)程詳解
這篇文章主要介紹了Deepin使用docker安裝mysql數(shù)據(jù)庫(kù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Docker運(yùn)維一鍵排查Shell腳本,6大功能搞定容器90%線上故障
本文介紹了一款自研的Docker一鍵排查Shell腳本,該腳本主要用于Docker容器運(yùn)維,包括容器重啟、端口占用、磁盤使用、網(wǎng)絡(luò)故障、鏡像臃腫、安全權(quán)限等常見(jiàn)問(wèn)題的排查,感興趣的朋友一起看看吧2024-10-10
在docker容器中調(diào)用和執(zhí)行宿主機(jī)的docker操作
這篇文章主要介紹了在docker容器中調(diào)用和執(zhí)行宿主機(jī)的docker操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
docker修改運(yùn)行容器環(huán)境變量的操作步驟
在現(xiàn)代應(yīng)用開(kāi)發(fā)中,Docker 提供了一種有效的容器化解決方案,使得應(yīng)用的部署、擴(kuò)展和管理變得更加靈活,環(huán)境變量在容器化應(yīng)用中起著重要作用,它們可以幫助配置應(yīng)用的運(yùn)行環(huán)境,本文小編給大家介紹了docker如何修改運(yùn)行容器環(huán)境變量,需要的朋友可以參考下2025-03-03
一文教你輕松搞定Docker無(wú)法拉取鏡像問(wèn)題
這篇文章主要介紹了當(dāng)Docker無(wú)法成功拉取鏡像時(shí)可能遇到的問(wèn)題以及解決方法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)遇到這個(gè)問(wèn)題的同學(xué)們具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-02-02
Docker運(yùn)行Web服務(wù)實(shí)戰(zhàn)之Tomcat的詳細(xì)過(guò)程
Tomcat是由Apache軟件基金會(huì)下屬的Jakarta項(xiàng)目開(kāi)發(fā)的一個(gè)Servlet容器,按照Sun Microsystems提供的技術(shù)規(guī)范,實(shí)現(xiàn)了對(duì)Servlet和Java Server Page(JSP)的支持,這篇文章主要介紹了Docker運(yùn)行Web服務(wù)實(shí)戰(zhàn)之Tomcat的詳細(xì)過(guò)程,需要的朋友可以參考下2022-08-08
Docker私服倉(cāng)庫(kù)Harbor安裝的步驟詳解
這篇文章主要介紹了Docker私服倉(cāng)庫(kù)Harbor安裝的步驟詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
淺談docker學(xué)習(xí)之docker數(shù)據(jù)卷(volume)
這篇文章主要介紹了淺談docker學(xué)習(xí)之docker數(shù)據(jù)卷(volume),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

