docker鏡像清理

隨著容器概念的普及,越來越多的系統(tǒng)以容器的形式部署升級,但隨著時(shí)間的推移,我們會(huì)發(fā)現(xiàn)主機(jī)中的鏡像文件越來越多,其中有很多舊版本的鏡像,占用了大量的存儲空間,此時(shí)就需要定期清理那些沒有價(jià)值的鏡像。

本文會(huì)根據(jù)筆者所負(fù)責(zé)的節(jié)點(diǎn)進(jìn)行介紹。

一、介紹

節(jié)點(diǎn)特點(diǎn):

  1. 節(jié)點(diǎn)中部署著多個(gè)指定版本的應(yīng)用系統(tǒng)。
  2. 節(jié)點(diǎn)中存在應(yīng)用系統(tǒng)歷史版本的docker鏡像文件。

清理目標(biāo):

  1. 清理非當(dāng)前使用版本的鏡像文件。
  2. 后續(xù)更新時(shí)不必花大量的時(shí)間重新拉取中間鏡像層。

二、 分析現(xiàn)狀

a. 主機(jī)鏡像文件現(xiàn)狀

b. 主機(jī)容器運(yùn)行現(xiàn)狀

c. 制作鏡像的Dockerfile

d. 存儲空間大小

分析:從上面的圖中可知,主機(jī)中有如下幾種鏡像:

  1. 使用中的鏡像:32.1.0.84/test/athena:develop_1749
  2. 歷史版本鏡像:32.1.0.84/test/athena:develop_1747
  3. 基礎(chǔ)鏡像:java:8
  4. dangling鏡像:ID為1a9f88c0c230的鏡像。(是由于使用同一個(gè)tag多次構(gòu)建內(nèi)容不同的鏡像,導(dǎo)致較早的鏡像變?yōu)閐angling鏡像)

dangling鏡像和歷史版本鏡像是不再需要的鏡像文件,白白占用了一定的存儲空間,需要清理。使用中的鏡像很明顯不應(yīng)該被清理。為了避免后續(xù)更新時(shí)花大量的時(shí)間重新拉取,所以基礎(chǔ)鏡像不應(yīng)該被清理。

三、 分別處理各種鏡像

3.1 dangling鏡像

dangling是一種特殊的,不會(huì)再被使用到的鏡像,docker有專門清理dangling鏡像的命令。

docker image prune -f

從圖中可以看出部分docker鏡像已經(jīng)被清理,并且提示釋放了39.45MB的空間。

檢查一下剩余的鏡像,可以看見dangling鏡像已經(jīng)不存在了,符合預(yù)期。

檢查當(dāng)前的存儲空間大小,可以發(fā)現(xiàn)釋放了40MB的空間,也是符合預(yù)期的。

3.2 歷史版本鏡像

直接使用docker刪除鏡像的命令即可。

docker rmi [image]

從圖中可以看出歷史版本的鏡像已經(jīng)被清理。

檢查一下剩余的鏡像,可以看見歷史版本鏡像已經(jīng)不存在了。

檢查當(dāng)前的存儲空間大小,可以發(fā)現(xiàn)又釋放了40MB的空間,也是符合預(yù)期的。

3.3 使用中的鏡像

筆者需要在批量刪除無用鏡像的時(shí)候,保留使用中的鏡像。幸運(yùn)的是,docker的刪除命令無法直接刪除正在被容器使用的鏡像。測試一下讓自己放心。

3.4 基礎(chǔ)鏡像

為了后續(xù)更新的效率,筆者需要在批量刪除無用鏡像的時(shí)候,保留基礎(chǔ)鏡像。
由于基礎(chǔ)鏡像沒有被容器直接使用,所以刪除命令可以執(zhí)行。測試如下:

剛開始看見命令被成功執(zhí)行時(shí),筆者心中是崩潰的,但是仔細(xì)看了一下顯示的刪除過程,發(fā)現(xiàn)只有“Untagged”而沒有“Deleted”,心中竊喜,猜測是不是只刪除了tag,鏡像層并沒有被刪除。趕緊檢查一下,果然發(fā)現(xiàn)和筆者猜想的一樣,由于基礎(chǔ)鏡像中的鏡像層目前正被容器使用著,所以并未被刪除。

為了證實(shí)更新應(yīng)用鏡像時(shí)不會(huì)消耗大量時(shí)間去拉取基礎(chǔ)鏡像,筆者再次構(gòu)建應(yīng)用的鏡像進(jìn)行檢查從而得以驗(yàn)證。

四、結(jié)論

  1. dangling鏡像通過命令 docker image prune -f 清理。
  2. 通過命令 docker images | awk 'NR!=1{print $1":"$2}' | xargs docker rmi 可以批量清除無用的鏡像,且不會(huì)影響使用中的鏡像和基礎(chǔ)鏡像,滿足筆者的需求。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容