docker system prune 命令主要用于清理 docker 中未被使用的資源,包括所有停止?fàn)顟B(tài)的容器、無名鏡像、未被使用的網(wǎng)絡(luò)和構(gòu)建緩存,默認(rèn)不會影響正在運(yùn)行的容器、數(shù)據(jù)卷或已有標(biāo)簽的鏡像;1. 默認(rèn)清理內(nèi)容:停止的容器、dangling 鏡像、未用網(wǎng)絡(luò)、構(gòu)建緩存;2. 加 –all 或 -a 可清理所有未被引用的鏡像;3. 清理時(shí)可加 -f 強(qiáng)制執(zhí)行;4. 配合 docker volume prune、docker image prune -a、docker rm -f 等命令可更徹底釋放空間;5. 定期使用 docker system df 查看磁盤占用情況,有助于及時(shí)清理。
Docker用久了,系統(tǒng)盤空間很容易被撐爆。特別是開發(fā)測試環(huán)境,鏡像、容器、卷這些內(nèi)容積累起來非常快。system prune 是一個(gè)快速清理 Docker 占用空間的命令,但它的作用范圍和使用方式你得搞清楚,不然容易誤刪。
一、docker system prune 能清理什么?
簡單來說,docker system prune 的作用是清理“未被使用的”資源。默認(rèn)情況下,它會清理以下內(nèi)容:
- 所有停止?fàn)顟B(tài)的容器
- 構(gòu)建過程中產(chǎn)生的無名(dangling)鏡像
- 沒有被任何容器使用的網(wǎng)絡(luò)
- 構(gòu)建緩存
執(zhí)行命令很簡單:
docker system prune
運(yùn)行后會讓你確認(rèn)是否繼續(xù),輸入 y 就開始清理。
注意:這個(gè)操作不會影響正在運(yùn)行的容器、已有數(shù)據(jù)卷或已打標(biāo)簽的鏡像。
如果你不希望每次都要確認(rèn),可以加上 -f 參數(shù)強(qiáng)制執(zhí)行:
docker system prune -f
二、想清得更徹底?加個(gè) –all
上面說的只是默認(rèn)清理范圍。如果你想連那些沒有在用的鏡像也一起刪掉,可以用 –all 或簡寫 -a 參數(shù):
docker system prune -a
這時(shí)候所有沒被容器引用的鏡像都會被清除,包括你很久以前拉下來的那些“備用”鏡像。這個(gè)操作更狠,也更容易誤刪,建議提前確認(rèn)哪些鏡像是可以舍棄的。
三、清理磁盤不只是靠 system prune
雖然 system prune 很方便,但它并不能解決所有磁盤占用問題。比如:
- 數(shù)據(jù)卷(volumes):不會被自動清理,即使容器已經(jīng)刪了,卷還在。
- 日志文件:Docker 容器的日志可能會非常大,尤其是長時(shí)間運(yùn)行的服務(wù)。
- 舊版本鏡像殘留:有時(shí)候同一個(gè)鏡像 tag 被覆蓋了,舊層可能還留著。
所以你可以結(jié)合幾個(gè)其他命令一起使用:
查看磁盤使用情況:
docker system df
這個(gè)命令能讓你看清當(dāng)前 Docker 各類資源占用了多少空間。
清理無主卷:
docker volume prune
清理所有未使用鏡像:
docker image prune -a
刪除所有容器(慎用):
docker rm -f $(docker ps -aq)
這些命令配合使用,才能真正把空間騰出來。
基本上就這些。平時(shí)記得定期清理,尤其是一些臨時(shí)構(gòu)建的環(huán)境,別等到磁盤滿了才想起這事。