最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker占用的巨大磁盤空間的清理方法

 更新時間:2025年09月29日 08:51:13   作者:孽小倩  
我相信很多人在使用 Docker 一段時間后,都會遇到一個常見問題:磁盤空間被迅速吃光,尤其是在進行頻繁的鏡像構建、測試和運行容器時,這種情況并不少見,本文會介紹 Docker 為什么會占用這么多空間,以及如何一步步地清理,需要的朋友可以參考下

我相信很多人在使用 Docker 一段時間后,都會遇到一個常見問題:磁盤空間被迅速吃光,尤其是在進行頻繁的鏡像構建、測試和運行容器時。以我自己為例,在 Ubuntu 24.04設備上,docker system df -v 一看,Docker 已經(jīng)占用了 700G+,如下圖。其中光是 build cache 就達到了 552G。這種情況并不少見。本文會介紹 Docker 為什么會占用這么多空間,以及如何一步步地清理。

一、為什么 Docker 會占用這么多空間

Docker 的設計原理決定了它會不斷產(chǎn)生緩存和中間數(shù)據(jù)。主要來源有以下幾類:

  • 鏡像層
    每次 docker build 都會把 Dockerfile 的指令拆分成一層一層的鏡像。如果你頻繁修改 Dockerfile 或者構建不同版本的鏡像,就會產(chǎn)生很多舊層。
  • 構建緩存(Build Cache)
    Docker 默認會緩存中間步驟,以加快下一次構建。例如第一次 apt-get update 的結果會被緩存,第二次構建就直接復用。但隨著時間推移,這些緩存越來越多,磁盤就被“吃掉”。
  • 容器
    容器刪除不及時會保留磁盤空間,尤其是已停止的容器。
  • 卷(Volumes)
    數(shù)據(jù)卷用于持久化數(shù)據(jù)庫、日志等內(nèi)容。如果你經(jīng)常測試數(shù)據(jù)庫鏡像(比如 MySQL、Postgres),卷很容易膨脹到幾十個 G。
  • 網(wǎng)絡
    Docker 會為容器分配網(wǎng)絡,雖然占用空間不大,但如果創(chuàng)建過多也會留下無用配置。

二、先看看空間到底去哪了

第一步是確認哪些部分占用最大。

docker system df -v 

它的結構是這樣的:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          120       5         80.5GB    70GB (87%)
Containers      15        2         5.3GB     4GB (75%)
Local Volumes   30        10        62GB      40GB (64%)
Build Cache     300                 552.7GB   552.7GB

但實際上我們每個項可能都非常多,比如我的光Image這項就一頁看不到頭。

可以看到項目非常多,我們大致往下劃一下,看到,build cache 是最大的“罪魁禍首”。

當然每個人情況可能不一樣,但是cache通常都是罪魁禍首,找打了原因,如何清理呢?

三、如何清理

1. 清理構建緩存

構建緩存往往占用空間最多。

# 刪除未使用的構建緩存
docker builder prune
 
# 更徹底,刪除所有緩存,包括可能還會用到的
docker builder prune --all

舉個例子:如果你構建了 100 個不同版本的鏡像,每次 Dockerfile 都有 apt-get update,這些中間結果會一直留在緩存里。執(zhí)行 docker builder prune --all 后,這些緩存會被清理掉,立刻釋放出上百 G。缺點是下次構建會變慢,因為緩存沒了。

2. 清理沒用的容器

已停止的容器(狀態(tài) Exited)通常沒有意義,可以直接刪掉。

docker container prune 

如果你想更謹慎,可以先查看:

docker ps -a 

例如:

CONTAINER ID   IMAGE        STATUS
abcd1234       ubuntu       Exited (0) 2 weeks ago
efgh5678       nginx        Exited (137) 3 days ago

這些容器通常就是“殘骸”。

3. 清理懸空鏡像

所謂懸空鏡像,是指 tag 為 <none> 的鏡像,它們是被新鏡像替換后的舊版本。
查看:

docker images -f dangling=true 

清理:

docker image prune 

例如你頻繁用 docker build .,每次都會產(chǎn)生一個新鏡像,舊的就變成 <none>

4. 清理沒用的卷

卷是最容易“暗中膨脹”的地方,特別是數(shù)據(jù)庫。
查看:

docker volume ls -f dangling=true 

清理:

docker volume prune 

比如你測試過幾次 MySQL,每次都掛載了一個 volume,哪怕容器刪了,數(shù)據(jù)卷也可能還在,幾十 G 的數(shù)據(jù)就這么堆積下來。

5. 清理沒用的網(wǎng)絡

查看:

docker network ls 

清理:

docker network prune 

雖然網(wǎng)絡占用空間不大,但保持干凈是好習慣。

四、一鍵清理

如果你只是做實驗,對數(shù)據(jù)不敏感,可以直接:

docker system prune -a --volumes 

這會刪除所有:

  • 已停止的容器
  • 沒有 tag 的鏡像
  • 沒用的卷
  • 沒用的網(wǎng)絡
  • 構建緩存

空間釋放得最快,但要注意數(shù)據(jù)卷和緩存一旦清理,就無法恢復。

五、更深入的檢查

有時候你清理完,空間還是很大,可以直接查看 /var/lib/docker 下哪些目錄占用:

sudo du -h --max-depth=1 /var/lib/docker | sort -h 

常見大戶:

  • overlay2/:鏡像和容器的文件系統(tǒng)
  • volumes/:卷的數(shù)據(jù)
  • buildkit/:構建緩存

如果 buildkit 特別大,就說明問題出在構建緩存。

六、后續(xù)優(yōu)化建議

  1. 定期清理
    可以加一個定時任務,每個月執(zhí)行一次 docker builder prune --alldocker volume prune。
  2. 精簡 Dockerfile
    減少無意義的構建層,比如把多個 RUN 合并,減少緩存堆積。
  3. 單獨掛載 /var/lib/docker
    如果 Docker 用得多,可以把 /var/lib/docker 放到一個大磁盤分區(qū),避免根分區(qū)被塞滿。

七、總結

Docker 占用空間大的原因,往往是 build cache、卷和鏡像殘留。清理的核心命令就是:

  • docker builder prune --all 清理構建緩存
  • docker container prune 清理沒用的容器
  • docker image prune 清理懸空鏡像
  • docker volume prune 清理沒用的卷
  • docker network prune 清理沒用的網(wǎng)絡
  • docker system prune -a --volumes 一鍵清理

清理完成之后,占用空間明顯減少:

以上就是Docker占用的巨大磁盤空間的清理方法的詳細內(nèi)容,更多關于Docker占用磁盤空間清理的資料請關注腳本之家其它相關文章!

相關文章

  • Docker安裝Jenkins的實現(xiàn)步驟

    Docker安裝Jenkins的實現(xiàn)步驟

    版本與jdk版本以及各類插件有對應關系,所以普通安裝較為麻煩,本文主要介紹了Docker安裝Jenkins的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • docker容器內(nèi)運行jupyter映射到本地方式

    docker容器內(nèi)運行jupyter映射到本地方式

    通過在容器內(nèi)指定Jupyter的IP為0.0.0.0,并使用--no-browser參數(shù),可以正確將Jupyter端口映射到本地,具體步驟包括在本地機器運行Docker容器,指定端口映射;在容器內(nèi)運行Jupyter Notebook,設置--ip和--no-browser參數(shù)(一般還需--allow-root)
    2024-11-11
  • Docker如何批量刪除images

    Docker如何批量刪除images

    這篇文章主要介紹了Docker如何批量刪除images問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker配置文件daemon.json配置國內(nèi)源的實現(xiàn)

    Docker配置文件daemon.json配置國內(nèi)源的實現(xiàn)

    本文主要介紹了Docker配置文件daemon.json配置國內(nèi)源的實現(xiàn),通過編輯daemon.json文件添加鏡像地址、重啟服務及驗證步驟,提升鏡像拉取效率,感興趣的可以了解一下
    2025-08-08
  • docker設置了端口映射,不能訪問的解決方案

    docker設置了端口映射,不能訪問的解決方案

    這篇文章主要介紹了docker設置了端口映射,不能訪問的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 關于docker的15個小tip(技巧)

    關于docker的15個小tip(技巧)

    本篇文章主要介紹了docker的15個小tip(技巧),具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • Docker跨平臺和環(huán)境部署的過程詳解

    Docker跨平臺和環(huán)境部署的過程詳解

    Docker是一個開放源代碼的容器化平臺,它能夠?qū)崿F(xiàn)應用及其依賴的打包,從而實現(xiàn)跨平臺和環(huán)境的快速部署,本文介紹了Docker的基本概念、優(yōu)勢和基本使用方法,包括安裝、啟動、構建鏡像和部署應用等步驟
    2024-11-11
  • docker部署可執(zhí)行jar包的思路與完整步驟

    docker部署可執(zhí)行jar包的思路與完整步驟

    對于springboot項目運行,直接是java -jar的方式運行,如果想要放到docker中運行,可以參考本文,下面這篇文章主要給大家介紹了關于docker部署可執(zhí)行jar包的思路與完整步驟,需要的朋友可以參考下
    2022-07-07
  • 批量刪除docker過期停止的容器的四種方法

    批量刪除docker過期停止的容器的四種方法

    過期的容器也是占用一部分的內(nèi)存空間,這時候如果對應一個個刪除容器id,有些麻煩,有沒有方法對應將其批量刪除呢,本文給大家介紹了批量刪除docker過期停止的容器的四種方法,需要的朋友可以參考下
    2024-02-02
  • docker獲取Let''s Encrypt永久免費SSL證書的方法

    docker獲取Let''s Encrypt永久免費SSL證書的方法

    在本篇文章里小編給大家分享了一篇關于docker獲取Let's Encrypt永久免費SSL證書的方法,以后需要的朋友們可以參考下。
    2021-01-01

最新評論

封开县| 馆陶县| 龙游县| 汝州市| 无锡市| 瑞昌市| 宜黄县| 霍林郭勒市| 全椒县| 莱州市| 永吉县| 万载县| 望城县| 绥阳县| 沁阳市| 迭部县| 汤原县| 图木舒克市| 陵水| 宁陵县| 达拉特旗| 五华县| 封开县| 永川市| 重庆市| 米易县| 新化县| 陕西省| 洱源县| 会理县| 成武县| 永嘉县| 蚌埠市| 宁德市| 仪陇县| 安化县| 延庆县| 牙克石市| 林甸县| 鄂托克前旗| 建始县|