Docker?磁盤占用分析和清理方法示例小結(jié)
本地或測試環(huán)境使用 Docker 時,常出現(xiàn) Docker 占用磁盤空間大,導(dǎo)致系統(tǒng)磁盤資源不足等問題。基于此,總結(jié)了 Docker 磁盤占用分析及清理方法。
一、分析方法
1. 使用 docker system 分析占用整體分布
[root@linux7 data]# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 181 81 182.2GB 131.9GB (72%) Containers 349 23 565GB 156.7GB (27%) Local Volumes 91 37 4.706GB 2.67MB (0%) Build Cache 11 0 199.7MB 199.7MB [root@linux7 data]# docker system df -v # -v 輸出分布明細
(1)TYPE:表示 Docker 資源類型,包括 Images(鏡像文件)、Containers(容器)、Local Volumes(本地數(shù)據(jù)卷)和 Build Cache(構(gòu)建緩存)。
(2)TOTAL:表示該類型資源的總數(shù)量。
(3)ACTIVE:表示當(dāng)前正在使用的資源數(shù)量。
(4)SIZE:表示該類型資源占用的磁盤空間總量。
(5)RECLAIMABLE:表示未占用可以回收的磁盤空間大小及百分比。
2. 分析各類資源具體占用
(1)查看鏡像占用并其排序
[root@linux7 data]# docker images --format "{{.Repository}}:{{.Tag}}\t{{.Size}}" | sort -k 2 -h -r(2)查看容器占用并其排序
[root@linux7 data]# docker ps -a --format "{{.ID}}\t{{.Names}}\t{{.Size}}" | sort -k 3 -h -r (3)查看卷占用
[root@linux7 data]# docker volume ls # 查看卷占用 [root@linux7 data]# docker volume inspect <VOLUME_NAME> # 查看具體卷詳情 [root@linux7 data]# du -sh <MOUNT_POINT> #查看卷真實占用磁盤大小
二、清理方法
1. 清理未運行的容器
(1) 列出所有容器
[root@linux7 data]# docker ps CONTAINER ID IMAGE COMMAND STATUS NAMES a1b2c3d4e5f6 nginx:latest "nginx -g" Exited my-nginx [root@linux7 data]# docker ps -a # -a 輸出所有容器,含已停止
(2) 清理指定容器
[root@linux7 data]# docker rm <CONTAINER_ID> # 清理已停止的容器 [root@linux7 data]# docker rm -f <CONTAINER_ID> # 強制清理(運行中的容器也會被停止并清理)
(3) 清理所有已停止的容器
[root@linux7 data]# docker container prune # 清理所有處于停止?fàn)顟B(tài)的容器 [root@linux7 data]# docker container prune -f # 強制清理所有處于停止?fàn)顟B(tài)的容器,跳過確認(rèn) [root@linux7 data]# docker container prune --filter "until=24h" # 僅清理 24 小時前停止的容器
2. 清理未使用的鏡像
(1) 列出所有鏡像
[root@linux7 data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest abc123456 2 weeks ago 133MB ubuntu 20.04 def789012 1 month ago 72.8MB
(2) 清理指定鏡像
[root@linux7 data]# docker rmi <IMAGE_ID> # 按 ID 清理 [root@linux7 data]# docker rmi -f <IMAGE_ID> # 強制清理(即使被容器引用) [root@linux7 data]# docker rmi nginx:latest # 按名稱清理
(3) 清理所有未使用的鏡像
命令格式:docker image prune [OPTIONS],默認(rèn)情況下會清理所有未被容器引用的懸空鏡像(dangling images)。
常用選項:
-a, --all:清理所有未被使用的鏡像,含懸空鏡像。
-f, --force:不提示確認(rèn),直接清理。
--filter:支持條件過濾需清理的鏡像。
--dry-run:僅顯示將要清理的鏡像,不實際執(zhí)行清理。
使用示例:
[root@linux7 data]# docker image prune # 清理懸空鏡像 [root@linux7 data]# docker image prune -a # 清理所有未被使用的鏡像,含懸空鏡像 [root@linux7 data]# docker image prune -af # 強制清理不提示確認(rèn) [root@linux7 data]# docker image prune --filter "until=24h" # 使用過濾器清理 [root@linux7 data]# docker image prune --dry-run # 僅顯示將要清理的鏡像,不實際執(zhí)行清理,清理操作不可逆,【建議】先使用`--dry-run`查看將要清理的鏡像
3. 清理未使用的網(wǎng)絡(luò)
(1) 列出所有網(wǎng)絡(luò)
[root@linux7 data]# docker network ls NETWORK ID NAME DRIVER SCOPE 9e14a4176c29 bridge bridge local 65b36b928672 host host local 99c1c095900c none null local [root@linux7 data]# docker network inspect host # 查看
(2) 清理指定網(wǎng)絡(luò)
[root@linux7 data]# docker network rm <NETWORK_ID | NAME> <NETWORK_ID | NAME> # 清理已停止的網(wǎng)絡(luò)
(3) 清理所有已停止的網(wǎng)絡(luò)
[root@linux7 data]# docker network prune
4. 清理 Docker 所有未使用的資源
docker system prune 是 Docker 提供的系統(tǒng)級清理命令,主要用于清理不再使用的 Docker 對象(懸空資源)。
清理范圍:
(1)停止的容器
(2)未被任何容器引用的網(wǎng)絡(luò)
(3)懸空的鏡像(未被標(biāo)記且未被任何容器引用的鏡像層)
(4)懸空的構(gòu)建緩存
參數(shù)詳解:
(1)--all / -a:清理所有未使用的鏡像(而不僅僅是懸空鏡像)
(2)--force / -f:跳過確認(rèn)提示直接執(zhí)行清理
(3)--volumes:清理未被容器使用的卷,務(wù)必謹(jǐn)慎
(4)--filter:按條件過濾要刪除的對象
示例:
[root@linux7 data]# docker system prune # 標(biāo)準(zhǔn)清理 [root@linux7 data]# docker system prune -a -f # 強制清理所有未使用資源 [root@linux7 data]# docker system prune --volumes # 清理未被容器使用的卷,務(wù)必謹(jǐn)慎 [root@linux7 data]# docker system prune --filter "until=48h" # 清理超過 48 小時未被使用的資源。
三、相關(guān)知識點
1. 懸空鏡像(Dangling Images)
(1)定義:指沒有標(biāo)簽且沒有被任何容器引用的鏡像層。
(2)特征:通常顯示為<none>:<none>的鏡像。
(3)查看方法:
[root@linux7 data]# docker images -f "dangling=true"
(4)產(chǎn)生場景:
多階段構(gòu)建時的中間鏡像:當(dāng)使用 Dockerfile 進行多階段構(gòu)建時,每個FROM語句都會產(chǎn)生一個中間鏡像。構(gòu)建完成后,這些中間鏡像會變成懸空狀態(tài)。
構(gòu)建失敗殘留:構(gòu)建過程中如果失敗,可能會留下未完成的鏡像層,這些也會成為懸空鏡像。
重新構(gòu)建同名鏡像:當(dāng)構(gòu)建一個與現(xiàn)有鏡像同名但不同內(nèi)容的新鏡像時,舊鏡像會失去標(biāo)簽變成懸空鏡像。
鏡像標(biāo)簽變更:使用docker tag命令修改鏡像標(biāo)簽后,原鏡像如果沒有其他標(biāo)簽引用,就會變成懸空鏡像。
使用docker commit創(chuàng)建新鏡像:基于容器創(chuàng)建新鏡像后,原基礎(chǔ)鏡像如果沒有其他引用,可能變成懸空狀態(tài)。
2. 未使用鏡像(Unused Images)
(1)定義:指當(dāng)前沒有被任何容器使用的鏡像(無論是否有標(biāo)簽),所以所有懸空鏡像都屬于未使用鏡像。
(2)特征:可能有明確的鏡像標(biāo)簽;但沒有任何運行或停止的容器基于該鏡像。
到此這篇關(guān)于Docker 磁盤占用分析和清理方法的文章就介紹到這了,更多相關(guān)Docker 磁盤占用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker compose idea CreateProcess error=2 系統(tǒng)找不到指定的文件的問題
這篇文章主要介紹了docker compose idea CreateProcess error=2 系統(tǒng)找不到指定的文件的問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
dockerfile健康檢查HEALTHCHECK的命令學(xué)習(xí)
HEALTHCHECK 指令告訴 Docker 如何測試一個容器,以檢查它是否仍在工作,本文主要介紹了dockerfile健康檢查HEALTHCHECK的命令學(xué)習(xí),感興趣的可以了解一下2024-01-01
Docker+Nginx單副本零停機發(fā)布實現(xiàn)并解決文件訪問 404
本文提供了解決Docker容器文件隔離問題的方法,核心是Nginx和業(yè)務(wù)容器掛載相同的宿主機文件目錄,通過Nginx重寫規(guī)則去掉/api前綴匹配業(yè)務(wù)服務(wù)路徑,同時發(fā)布時流量同步切換到臨時副本,避免404和中斷問題2026-04-04
Docker Machine創(chuàng)建Azure虛擬主機
這篇文章主要為大家詳細介紹了Docker Machine創(chuàng)建Azure虛擬主機的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
docker compose方式如何安裝ClickHouse數(shù)據(jù)庫
這篇文章主要介紹了docker compose方式如何安裝ClickHouse數(shù)據(jù)庫問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04

