docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2
前段時(shí)間有客戶反映我們部署服務(wù)的服務(wù)器磁盤快滿了,聯(lián)系我們說看看清理一下
于是就開始看服務(wù)器
我們所有的服務(wù)都是使用docker部署的,經(jīng)過檢查,這次占滿了磁盤的都是在/var/lib/docker/overlay2
目錄下的文件夾,這個(gè)路徑一看就是docker的存儲(chǔ)目錄,但是為什么docker跑得好好的他的占用會(huì)變高呢?
圖中可見,/var/lib/docker/overlay2目錄的占用大的離譜
那我們進(jìn)來看看這個(gè)目錄下是什么占用了這么大的空間
上圖可見,/var/lib/docker/overlay2
目錄下的文件夾名基本都是這種md5編碼,并且其中有一個(gè)a875e開頭的文件夾的占用達(dá)到了518G,相當(dāng)恐怖
那/var/lib/docker/overlay2
目錄存 的到底是什么呢?為什么能有這么大的占用?我們又需要如何去進(jìn)行清理呢? 我查閱了一些博客文章了解到,overlay2是docker使用的文件存儲(chǔ)驅(qū)動(dòng),也就是說,在/var/lib/docker/overlay2
目錄下的文件都是docker使用的存儲(chǔ)【廢話】
overlay2是分層存儲(chǔ),每一層通過本層的md5作為文件夾名來命名,如果要存儲(chǔ)的兩個(gè)東西【比如兩個(gè)鏡像】的底層幾層的內(nèi)容是一樣的,那他們的md5就也是一樣的,通過md5核驗(yàn),確認(rèn)他們這幾層是一樣的之后,在overlay2中實(shí)際存儲(chǔ)的時(shí)候,這幾層就可以只存儲(chǔ)一份,然后由這兩個(gè)東西共用,來達(dá)到節(jié)省空間的目的。
所以我們?cè)?code>/var/lib/docker/overlay2目錄下看到的這茫茫多的md5,就是一層一層的數(shù)據(jù) ?
那為什么我們客戶服務(wù)器上的a875e開頭的文件夾占用會(huì)達(dá)到518G呢?究竟是什么東西占用了這么多? 我們進(jìn)這個(gè)文件夾里看一眼
可以看到,在這個(gè)a875e的文件夾中,有一個(gè)diff
文件夾占用259G,一個(gè)merged
文件夾占用259G,直覺告訴我這兩個(gè)文件夾中存儲(chǔ)的應(yīng)該是基本一致的東西 ?
所以是什么東西呢??? ?
經(jīng)過排查,我們發(fā)現(xiàn)是我們一個(gè)服務(wù)會(huì)將一些運(yùn)行文件存儲(chǔ)在本地文件路徑中,但是,這個(gè)服務(wù)在啟動(dòng)的時(shí)候因?yàn)橐恍┦韬?,沒有將他要存儲(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ǔ)在這里的,畢竟容器跑起來以后系統(tǒng)相關(guān)的一些文件是和鏡像一樣的】
所以回到標(biāo)題
docker的overlay2中存的都是什么?
存的是我們的鏡像文件和容器內(nèi)的文件
如何清理/var/lib/docker/overlay2
?
- 刪除不用的鏡像
- 檢查是否有容器內(nèi)的服務(wù)會(huì)往容器內(nèi)的本地寫文件
- 檢查各容器的磁盤占用,如果有發(fā)現(xiàn)磁盤占用過高的情況則對(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)文章
Docker快速部署gitlab+gitlab-runner實(shí)例
這篇文章主要介紹了Docker快速部署gitlab+gitlab-runner實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Docker創(chuàng)建tomcat容器實(shí)例后無法訪問(HTTP狀態(tài)404)
本文主要介紹了Docker創(chuàng)建tomcat容器實(shí)例后無法訪問,HTTP狀態(tài)顯示404,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Docker鏡像的導(dǎo)入導(dǎo)出代碼實(shí)例
這篇文章主要介紹了Docker鏡像的導(dǎo)入導(dǎo)出代碼實(shí)例,本文實(shí)例講解的很透徹很明了,有需要的同學(xué)可以參考下2021-03-03使用Docker安裝Nginx并配置端口轉(zhuǎn)發(fā)問題及解決方法
這篇文章主要介紹了使用Docker安裝Nginx并配置端口轉(zhuǎn)發(fā),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01親手教你Docker Compose安裝DOClever的詳細(xì)過程
DOClever是一個(gè)可視化免費(fèi)開源的接口管理工具,DOClever前后端全部采用了javascript來作為我們的開發(fā)語言。這篇文章主要介紹了Docker Compose安裝DOClever的詳細(xì)過程,需要的朋友可以參考下2021-09-09