分析 Docker 磁盤占用

以下是分析 Docker 磁盤占用的詳細步驟和工具指南,幫助開發者快速定位和清理冗余數據:

1. 查看 Docker 磁盤使用概覽

docker system df

輸出說明

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        10        5.2GB     1.1GB (21%)
Containers      12        5         1.3GB     800MB (61%)
Local Volumes   7         3         2.5GB     1.8GB (72%)
Build Cache     45        0         3.7GB     3.7GB (100%)

各部分含義解析

1)Images(鏡像)

  • TOTAL:系統中存在的鏡像總數(包括中間層鏡像)。
  • ACTIVE:當前被容器使用的鏡像數量。
  • SIZE:所有鏡像占用的總磁盤空間。
  • RECLAIMABLE:可回收的鏡像空間(未被任何容器使用的鏡像)。示例:1.234GB(52%)表示可以通過?docker image prune?釋放 1.234GB,占總鏡像空間的 52%。

2)Containers(容器)

  • TOTAL:系統中存在的容器總數(包括已停止的容器)。
  • ACTIVE:當前正在運行的容器數量。
  • SIZE:所有容器的可寫層占用的總空間(容器內文件的變更)。
  • RECLAIMABLE:已停止容器的可寫層空間。示例:100.2MB(81%)表示可以通過?docker container prune?釋放 100.2MB。

3)Local Volumes(本地卷)

  • TOTAL:系統中存在的本地卷總數。
  • ACTIVE:當前被容器掛載的卷數量。
  • SIZE:所有卷占用的總磁盤空間。
  • RECLAIMABLE:未被任何容器使用的卷空間。示例:456.7MB(80%)表示可以通過?docker volume prune?釋放 456.7MB。

4)Build Cache(構建緩存)

  • TOTAL:Docker 構建過程中創建的緩存層總數。
  • ACTIVE:當前被新構建復用的緩存層數量。
  • SIZE:所有構建緩存占用的總空間。
  • RECLAIMABLE:未被使用的緩存空間(默認全部可回收)。示例:3.456GB(100%)表示可以通過?docker builder prune?釋放全部緩存。

2. 定位具體占用項

(1) 鏡像占用分析
# 列出所有鏡像(按大小排序)
docker images --format "{{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k 4 -h -r# 查看懸空鏡像(未被任何容器引用的中間層)
docker images --filter "dangling=true"
(2) 容器占用分析
# 列出所有容器(包括已停止的,顯示磁盤占用)
docker ps -a --size

輸出關鍵列

  • SIZE: 容器可寫層大小(增量修改)。

  • VIRTUAL SIZE: 容器關聯鏡像的總大小。

(3) 數據卷占用分析
# 列出所有數據卷
docker volume ls# 查看數據卷詳情(包括掛載點和占用空間)
docker system df -v
(4) 構建緩存分析
# 查看構建緩存(包括未使用的中間層)
docker builder prune --dry-run
(5) 日志文件分析
# 查看容器日志文件占用(默認路徑)
sudo du -sh /var/lib/docker/containers/*/*-json.log# 查看單個容器的日志大小
docker logs <容器名> --since 1h | wc -c  # 統計最近1小時的日志大小

3. 清理策略

(1) 清理未使用的鏡像
# 刪除懸空鏡像
docker image prune# 刪除未被容器引用的所有鏡像
docker image prune -a
(2) 清理停止的容器
# 刪除所有已停止的容器
docker container prune# 刪除指定條件的容器(如退出狀態為0的)
docker rm $(docker ps -aq --filter "status=exited")
(3) 清理數據卷
# 刪除未使用的數據卷
docker volume prune
(4) 清理構建緩存
# 刪除所有構建緩存
docker builder prune --all
(5) 清理日志文件
  • 手動清理

    # 清空日志文件(不刪除文件)
    truncate -s 0 /var/lib/docker/containers/<容器ID>/*-json.log
  • 自動輪轉
    在容器啟動時限制日志大小(docker run?或?docker-compose.yml):

    logging:driver: "json-file"options:max-size: "10m"   # 單個日志文件最大10MBmax-file: "3"      # 最多保留3個日志文件

4. 深度分析工具

(1) 可視化工具 -?dive

分析鏡像層內容,定位大文件:

# 安裝 dive
curl -sS https://webinstall.dev/dive | bash# 分析鏡像
dive <鏡像名>
(2) 目錄分析工具 -?ncdu

掃描 Docker 存儲目錄:

# 安裝 ncdu
sudo apt install ncdu# 分析 Docker 數據目錄
sudo ncdu /var/lib/docker

5. 預防磁盤占滿

(1) 配置 Docker 存儲驅動

編輯?/etc/docker/daemon.json,限制存儲大小(適用于?devicemapper?或?overlay2):

{"storage-driver": "overlay2","storage-opts": ["overlay2.size=20G"  # 限制存儲池大小]
}
(2) 監控告警
  • 使用?cAdvisor?+?Prometheus?+?Grafana?監控 Docker 資源。

  • 設置磁盤空間閾值告警(如超過 80% 觸發清理腳本)。

6. 常見問題

問題 1:/var/lib/docker?占用過大

原因:鏡像層、日志或未清理的容器堆積。

解決

# 清理所有未使用的 Docker 資源
docker system prune --all --volumes
問題 2:容器日志持續增長

原因:未配置日志輪轉或應用日志輸出過多。

解決:配置?max-size?和?max-file?參數,或改用非阻塞日志驅動(如?journald)。

7. 注意事項

謹慎使用?-a?標志prune -a?會刪除所有未使用的資源(如鏡像、緩存),可能導致后續構建或部署變慢。

監控關鍵資源:重點關注?Build Cache?的大小,尤其是頻繁進行 Docker 構建的環境。

生產環境慎用:在生產環境清理資源前,建議先備份重要數據,避免意外刪除。

總結

資源類型占用位置清理命令
鏡像/var/lib/docker/imagedocker image prune -a
容器/var/lib/docker/containersdocker container prune
數據卷/var/lib/docker/volumesdocker volume prune
日志容器日志文件配置日志輪轉

通過定期檢查(如每周執行?docker system prune)和合理配置,可有效控制 Docker 磁盤占用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82123.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊一聊接口測試中的參數化測試

目錄 一、核心概念 二、適用場景 三、參數化測試的核心目的 四、實現參數化測試的關鍵步驟 4.1 定義測試數據 4.2 使用測試框架參數化功能 4.3 執行測試與結果分析 五、最佳實踐與注意事項 六、工具推薦 那參數化測試的目的是什么&#xff1f;應該是為了提高測試覆蓋率…

Go語言——string、數組、切片以及map

一、string、數組、切片代碼 package mainimport "fmt"// 定義結構體 type student struct {id intname stringage intscore float32 }func main() {// 使用var聲明切片var slice1 []intslice1 append(slice1, 1)slice1 append(slice1, 2)slice1 append(sl…

Android 開發中JDK 的使用和配置詳解

前些天發現了一個蠻有意思的人工智能學習網站,8個字形容一下"通俗易懂,風趣幽默",感覺非常有意思,忍不住分享一下給大家。 ??點擊跳轉到教程 在安卓開發中, 我們會使用到Java的JDK, JDK全程為(Java Development Kit)意思是:Java開發工具包。那么JDK 與我們的…

MPay碼支付系統第四方聚合收款碼多款支付插件個人免簽支付源碼TP8框架全開源

一、源碼描述 這是一套碼支付源碼&#xff08;MPay&#xff09;&#xff0c;基于TP8框架&#xff0c;前端layui2.9后端PearAdmin&#xff0c;專注于個人免簽收款&#xff0c;通過個人的普通收款碼&#xff0c;即可實現收款通知自動回調&#xff0c;支持絕大多數商城系統&#…

國產數據庫鑄就數字基建新基石,助力農業產業轉型升級

中國科技企業以自主創新突破技術壁壘&#xff0c;為全球產業鏈重構注入新動能。廣東辰宜信息科技有限公司&#xff08;以下簡稱“辰宜科技”&#xff09;憑借自主研發的“博流分布式多模數據庫”等核心技術&#xff0c;作為支持數據流通的關鍵技術支撐&#xff0c;實現中國基礎…

《人工智能:如何重塑教育模式與學習圖景》

《人工智能&#xff1a;如何重塑教育模式與學習圖景》 引言 人工智能&#xff0c;特別是大型語言模型&#xff08;如GPT-4/ChatGPT&#xff09;&#xff0c;正以前所未有的速度影響教育領域。從基礎教育到高等教育&#xff0c;再到職業教育&#xff0c;傳統教學模式正在被重新審…

硬件工程師面試常見問題(14)

第六十六問&#xff1a;運放--輸入偏置電流和輸入失調電流 輸入偏置電流lb&#xff1a;是由于運放兩個輸入極都有漏電流的存在。實際的運放,會有電流流入運放的輸入端的。那么輸入偏置電流就定義這兩個電流的平均值。 輸入失調電流 Ios&#xff1a;定義為兩個差分輸入端偏置電…

Docker+Kubernetes落地指南:從單機到集群的平滑遷移

一、為何必須升級到Kubernetes&#xff1f; 1.1 單機Docker的瓶頸 單機環境痛點&#xff1a; ├─ 資源利用率不均衡&#xff08;CPU飆高 vs 內存閑置&#xff09; ├─ 服務擴容需手動操作 ├─ 零宕機更新難以實現 └─ 網絡配置復雜&#xff08;跨主機通信困難&am…

HttpPrinter 是一款功能強大的跨平臺 Web 打印解決方案

HttpPrinter 是一款功能強大的跨平臺 Web 打印解決方案&#xff0c;支持多種編程語言和打印場景&#xff0c;適用于企業級報表打印、靜默打印、遠程打印等需求。以下是其核心功能、技術特點及使用方法的綜合分析&#xff1a; 一、核心功能與特點 跨平臺與多語言支持 支持 Java…

Selenium Web自動化測試學習筆記(一)

自動化測試 技術手段模擬人工&#xff0c;執行重復性任務&#xff0c;準確率100%&#xff0c;高于人工 selenium 可通過瀏覽器驅動控制瀏覽器&#xff0c;通過元素定位模擬人工&#xff0c;實現web自動化&#xff0c;沒有焦點&#xff08;把瀏覽器放在最小化依然可以&#x…

TikTok 矩陣運營新手實操保姆級教程 2.0 版本

在當下這個全球化的數字浪潮中&#xff0c;TikTok 這片充滿機遇的流量藍海&#xff0c;正吸引著無數創業者和品牌方爭相角逐。而要想在這激烈的競爭中脫穎而出&#xff0c;TikTok 矩陣運營無疑是至關重要的制勝法寶。今天&#xff0c;就給大家送上這份超實用的新手實操教程&…

使用DeepSeek協助恢復歷史數據

最近&#xff0c;工作中遇到比較老的數據庫備份文件數據恢復的問題。過程中使用DeepSeek分析&#xff0c;很快的解決了從除備份文件本身其他信息一概不知的條件下&#xff0c;數據庫選型問題和環境搭建問題。下面把實施過程分享出來&#xff0c;給其他遇到相同問題的小伙伴提供…

【特殊場景應對6】頻繁跳槽:行業特性與穩定性危機的解釋邊界

寫在最前 作為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offe…

企業智能化第一步:用「Deepseek+自動化」打造企業資源管理的智能中樞

隨著Deepseek乃至AI人工智能技術在企業中得到了廣泛的關注和使用&#xff0c;多數企業開始了AI探索之旅&#xff0c;迅易科技也不例外&#xff0c;且在不斷地實踐中強化了AI智能應用創新的強大能力。 為解決企業知識管理碎片化、提高內部工作效率等問題&#xff0c;迅易將目光放…

大連理工大學選修課——圖形學:第三四章 基本圖形生成算法

第三四章 基本圖形生成算法 圖形生成 概念&#xff1a;如何在指定的輸出設備上&#xff0c;根據坐標描述&#xff0c;構造基本二維幾何圖形 基本二維幾何圖形&#xff1a;點、直線、圓、多邊形域、字符串及相關屬性等。 圖形生成的概念 是在指定的輸出設備上&#xff0c;根…

怎樣避免住宅IP被平臺識別

要有效避免住宅IP被平臺識別&#xff0c;需從IP質量選擇、環境參數偽裝、行為模式模擬、技術細節處理等多維度構建防御體系。以下是基于行業實踐的綜合性解決方案&#xff1a; 一、確保住宅IP的高純凈度 選擇真實家庭網絡IP 驗證IP是否歸屬真實家庭寬帶&#xff08;非機房IP偽裝…

WPF 觸發器 Trigger

觸發器 Trigger 觸發器&#xff08;Trigger&#xff09;是 WPF 中的一種機制&#xff1a; 當某個條件滿足時&#xff0c;自動改變控件的某些屬性&#xff0c;比如顏色、大小、透明度等。 換句話說&#xff0c;就是"如果……那么就……" 的一種規則。 常見觸發器類…

NLP核心技術解析:大模型與分詞工具的協同工作原理

文章目錄 一、核心關系概述二、分詞工具的核心作用三、未登錄詞&#xff08;OOV&#xff09;問題3.1 問題本質分析3.2 解決方案3.2.1 預對齊詞匯表&#xff08;最優解&#xff09;3.2.2 子詞回退策略3.2.3 詞匯表擴展&#xff08;適合專業領域&#xff09; 3.3 技術選型建議3.4…

vscode預覽模式(點擊文件時默認覆蓋當前標簽,標簽名稱顯示為斜體,可通過雙擊該標簽取消)覆蓋標簽、新窗打開

文章目錄 VS Code 預覽模式如何取消預覽模式&#xff08;即“固定”標簽頁&#xff09;&#xff1f;預覽模式有什么用&#xff1f; VS Code 預覽模式 在 VS Code 中&#xff0c;當你單擊文件瀏覽器&#xff08;例如&#xff0c;資源管理器側邊欄&#xff09;中的某個文件時&am…

MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么?

接上文 MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎樣練成的&#xff1f; user/_sleep 是什么&#xff1f; book-riscv-rev3.pdf 3.8節有對Xv6 binary文件的格式描述 Xv6 binaries are formatted in the widely-used ELF format, defined in (kernel/elf.h). An …