Docker磁盤空間清理的方法實(shí)現(xiàn)
Docker磁盤空間清理
使用docker system命令清除*
docker system df命令,類似于Linux上的df命令,用于查看Docker的磁盤使用情況:
[root@k8s-m1 ~]# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 14 12 3.072GB 744.8MB (24%) Containers 28 13 621.1MB 621.1MB (99%) Local Volumes 4 0 747.7MB 747.7MB (100%) Build Cache 0 0 0B 0B
可以看到,Docker鏡像占用了3.07GB磁盤,Docker容器占用了621.1MB磁盤,Docker數(shù)據(jù)卷占用了 747.7MB磁盤。
- docker system prune命令可以用于清理磁盤,刪除關(guān)閉的容器、無(wú)用的數(shù)據(jù)卷和網(wǎng)絡(luò),以及dangling鏡像(即懸空鏡像tag為none)。
- docker system prune -a命令清理得更加徹底,可以將沒(méi)有容器使用Docker鏡像都刪掉。注意,這兩個(gè)命令會(huì)把你暫時(shí)關(guān)閉的容器,以及暫時(shí)沒(méi)有用到的Docker鏡像都刪掉了…所以使用之前一定要確認(rèn)清楚
執(zhí)行docker system prune -a命令之后,Docker占用的磁盤空間減少了很多:
[root@k8s-m1 ~]# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 8 8 750MB 3.552MB (0%) Containers 13 13 11.62kB 0B (0%) Local Volumes 4 0 747.7MB 747.7MB (100%) Build Cache 0 0 0B 0B
手動(dòng)清理Docker鏡像/容器/數(shù)據(jù)卷
對(duì)于舊版的Docker(版本1.13之前),是沒(méi)有docker system命令的,因此需要進(jìn)行手動(dòng)清理。這里給出幾個(gè)常用的命令,
# 刪除所有關(guān)閉的容器
docker ps -a | grep Exit | cut -d ‘’ -f 1 | xargs docker rm
# 刪除所有dangling鏡像(即無(wú)tag的鏡像):
docker images | grep “” | awk “{print $3}”
# 刪除所有dangling數(shù)據(jù)卷(即無(wú)用的volume):
docker volume rm $(docker volume ls -qf dangling=true)
占用大空間的容器查找
有時(shí)候,當(dāng)使用了上面提到的方法清理磁盤之后,發(fā)現(xiàn)磁盤空間并沒(méi)有清理出來(lái)多少,需要進(jìn)行進(jìn)一步分析
在centos上,Docker的所有相關(guān)文件,包括鏡像、容器等都保存在/var/lib/docker/目錄中,但是一般都是容器會(huì)造成磁盤占用的空間特別大,這個(gè)時(shí)候就需要通過(guò)docker overlay2 目錄名查找對(duì)應(yīng)容器名:
1、觀察到是 /var/lib/docker/overlay2目錄占用空間大,進(jìn)入到 /var/lib/docker/overlay2 目錄下,查看誰(shuí)占用的較多
[root@k8s-m1 ~]# du -sh /var/lib/docker/* 16K /var/lib/docker/builder 88K /var/lib/docker/buildkit 95M /var/lib/docker/containers 7.7M /var/lib/docker/image 128K /var/lib/docker/network 1.6G /var/lib/docker/overlay2 100K /var/lib/docker/volumes [root@k8s-m1 ~]# cd /var/lib/docker/overlay2/ [root@k8s-m1 ~]# du -s /var/lib/docker/overlay2/* | sort -rn | more 191492 /var/lib/docker/overlay2/a3e0d664d7b493bae51c87f8bcb2e5dfecd7b1ef14b8f6e73ed0e5cd246df8a3 147888 /var/lib/docker/overlay2/a40859c088c98e9eee27b81a71bf340dc444a2c172c042b2f890f9afd41dae8c
如上所示,占用空間最大的目錄為/var/lib/docker/overlay2/a3e0d664d7b493bae51c87f8bcb2e5dfecd7b1ef14b8f6e73ed0e5cd246df8a3
2、再通過(guò)目錄名查找容器名
[root@k8s-m1 ~]# docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep a3e0d664d7b493bae51c87f8bcb2e5dfecd7b1ef14b8f6e73ed0e5cd246df8a3 16210, 5ea65cf847e0fbd65e7fe8a0d730b6d4e29f1a5facbf33b4b1bbada23d2b2e3b, /k8s_calico-node_calico-node-cgffm_kube-system_06eac25d-01f7-4b1b-ad3f-e9b15b761fb5_4, /var/lib/docker/overlay2/a3e0d664d7b493bae51c87f8bcb2e5dfecd7b1ef14b8f6e73ed0e5cd246df8a3/work
輸出依次為,進(jìn)程pid、容器ID、容器名、存儲(chǔ)work路徑,即可確定是哪個(gè)容器。此方法也常用于查找某個(gè)容器在宿主機(jī)上的工作目錄。
檢查是否對(duì)應(yīng):
[root@k8s-m1 ~]# docker ps -a|grep 5ea 5ea65cf847e0 ee86d6374c0e "start_runit" 6 days ago Up 6 days k8s_calico-node_calico-node-cgffm_kube-system_06eac25d-01f7-4b1b-ad3f-e9b15b761fb5_4
結(jié)論:存儲(chǔ)的數(shù)據(jù)目錄ID和容器的ID是不一樣的,要注意區(qū)分。
進(jìn)而可以到具體容器進(jìn)行排查是什么原因造成了磁盤空間占用過(guò)多。如果可以手動(dòng)清理(如日志)可以先手動(dòng)清理,清理不了允許重啟的話可以重啟(重建)容器試試。
如果是nginx的容器,并且是日志文件造成磁盤空間過(guò)大可以使用
使用truncate命令,可以將nginx容器的日志文件“清零”:
truncate -s 0 /var/lib/docker/containers/c84f63acd6b88a7a217c511bf1eba4f8c12c735a7c0436d18ac49cf566d4fd6b/*-json.log
當(dāng)然,這個(gè)命令只是臨時(shí)有作用,日志文件遲早又會(huì)漲回來(lái)。要從根本上解決問(wèn)題,就需要限制nginx容器的日志文件大小。這個(gè)可以通過(guò)配置日志的max-size來(lái)實(shí)現(xiàn)。
重啟Docker
還有時(shí)候,當(dāng)清理了鏡像、容器以及數(shù)據(jù)卷之后,發(fā)現(xiàn)磁盤空間并沒(méi)有減少,這個(gè)時(shí)間可以嘗試重啟docker服務(wù)。
到此這篇關(guān)于Docker磁盤空間清理的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker磁盤空間清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker創(chuàng)建mongodb容器存儲(chǔ)數(shù)據(jù)步驟詳解
這篇文章主要為大家介紹了docker創(chuàng)建mongodb容器存儲(chǔ)數(shù)據(jù)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10三分鐘完成 ubuntu16.04初始化,Java,maven,docker環(huán)境的部署問(wèn)題
這篇文章主要介紹了三分鐘完成 ubuntu16.04初始化,Java,maven,docker環(huán)境的部署問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11使用phpstorm對(duì)docker中的腳本進(jìn)行debug的方法
這篇文章主要介紹了使用phpstorm對(duì)docker中的腳本進(jìn)行debug的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08使用dockercompose搭建springboot-mysql-nginx應(yīng)用
這篇文章主要介紹了使用dockercompose搭建springboot-mysql-nginx應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03手動(dòng)構(gòu)建自己的docker容器鏡像實(shí)戰(zhàn)
這篇文章主要介紹了如何手動(dòng)構(gòu)建自己的鏡像并上傳到鏡像倉(cāng)庫(kù)中,文中有詳細(xì)的代碼實(shí)例,需要的朋友可以參考閱讀2023-04-04docker搭建redis三主三從集群的實(shí)現(xiàn)步驟
本文主要介紹了docker搭建redis三主三從集群,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題
這篇文章主要介紹了詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01