Docker磁盤(pán)占用排查與遷移的完整復(fù)盤(pán)過(guò)程
本文記錄了一次 Docker 磁盤(pán)占用排查與遷移的完整復(fù)盤(pán)。
一、問(wèn)題背景
服務(wù)器磁盤(pán)分布大致如下:
- 系統(tǒng)盤(pán):
/dev/vda1,40G,掛載/ - 數(shù)據(jù)盤(pán):
/dev/vdb1,493G,掛載/data
初始現(xiàn)象是:
/分區(qū)使用率偏高/var/lib/docker/overlay2顯示掛載在根分區(qū)- 懷疑 Docker 鏡像或容器占用了大量系統(tǒng)盤(pán)空間
二、Docker 磁盤(pán)占用的正確查看方式
1. 系統(tǒng)層面(df)
df -h
如果看到類似:
overlay 40G 20G 18G 54% /var/lib/docker/overlay2/.../merged
不要誤判:
這并不是 Docker 獨(dú)占 40G,而是 overlayfs 映射了宿主機(jī)根分區(qū)。
2. Docker 視角(關(guān)鍵命令)
基礎(chǔ)統(tǒng)計(jì)
docker system df
詳細(xì)拆分(強(qiáng)烈推薦)
docker system df -v
你可以精確看到:
每個(gè)鏡像的:
- SIZE
- SHARED SIZE
- UNIQUE SIZE
- 是否被容器使用
構(gòu)建緩存(Build Cache)的真實(shí)占用
容器自身的寫(xiě)層大小
三、為什么會(huì)看到大量<none>鏡像?
示例:
<none> <none> 554MB <none> <none> 554MB ...
這些并不是“異常鏡像”,而是懸空鏡像(dangling images)。
產(chǎn)生原因總結(jié)
- 多次
docker build,舊鏡像標(biāo)簽被新鏡像覆蓋 - 構(gòu)建中間層未被任何鏡像引用
- CI / 自動(dòng)構(gòu)建未做清理策略
本質(zhì)上:
Docker 很保守,不會(huì)自動(dòng)刪除歷史構(gòu)建產(chǎn)物
四、Docker 構(gòu)建緩存(Build Cache)才是“隱形大戶”
在一次排查中發(fā)現(xiàn):
Build cache usage: 11.56GB
而鏡像 + 容器加起來(lái)不到 1GB。
這類緩存來(lái)自:
docker build- BuildKit
- 多階段構(gòu)建的中間層
清理方式
docker builder prune
如果你想徹底清:
docker system prune -a
?? 注意:
這會(huì)刪除所有未被容器使用的鏡像。
五、Docker 數(shù)據(jù)目錄遷移的正確姿勢(shì)(簡(jiǎn)版)
以下步驟在 Docker 已停止 的前提下進(jìn)行
1. 停止 Docker
systemctl stop docker
2. 拷貝數(shù)據(jù)(推薦 rsync)
rsync -a /var/lib/docker/ /data/docker/
3. 修改配置
vim /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
4. 啟動(dòng) Docker
systemctl start docker
5. 驗(yàn)證
docker info | grep "Docker Root Dir"
參考資料:
1.Docker 官方文檔 · 磁盤(pán)使用分析(docker system df)
- Docker 官方對(duì)鏡像、容器、卷、構(gòu)建緩存磁盤(pán)占用的說(shuō)明。
- https://docs.docker.com/engine/reference/commandline/system_df/
2.Docker 官方文檔 · 清理未使用資源(prune)
- 詳細(xì)說(shuō)明
docker image prune、docker builder prune、docker system prune的行為差異與風(fēng)險(xiǎn)。 - https://docs.docker.com/engine/reference/commandline/system_prune/
3.Docker 官方文檔 · BuildKit 與構(gòu)建緩存
解釋 Build Cache 的來(lái)源、生命周期以及為何會(huì)大量占用磁盤(pán)。
https://docs.docker.com/build/cache/
4.Docker 官方文檔 · daemon.json 配置項(xiàng)說(shuō)明
包含 data-root(Docker 數(shù)據(jù)目錄遷移)的官方定義與示例。
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-fil
六、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker Registry 私有倉(cāng)庫(kù)搭建詳細(xì)步驟
這篇文章主要介紹了Docker Registry 私有倉(cāng)庫(kù)搭建的相關(guān)資料,需要的朋友可以參考下2016-10-10
Docker獲取容器mac地址和手動(dòng)設(shè)置容器mac地址
獲取容器的 MAC 地址 可以使用 docker inspect 命令來(lái)查看容器的詳細(xì)信息,包括 MAC 地址。 示例: 這條命令會(huì)輸出容器 my_container 的 MAC 地址。 手動(dòng)設(shè)置容器2026-02-02
docker?pull出現(xiàn)錯(cuò)誤或速度慢具體解決辦法
docker pull的時(shí)候速度特別慢,急死我了,相信看到文章的你跟我是一個(gè)心情,下面這篇文章主要給大家介紹了關(guān)于docker?pull出現(xiàn)錯(cuò)誤或速度慢的具體解決辦法,需要的朋友可以參考下2024-05-05
使用docker-compose創(chuàng)建網(wǎng)橋過(guò)程
文章介紹了通過(guò)docker-compose創(chuàng)建網(wǎng)橋(使用hello-world鏡像),容器退出后網(wǎng)橋仍存在;刪除網(wǎng)橋時(shí)使用docker-composedown,網(wǎng)橋消失但其他容器可能仍依賴其網(wǎng)絡(luò)2025-08-08
docker安裝Wordpress速度過(guò)慢的問(wèn)題解決方法
Docker是一種開(kāi)源的容器化平臺(tái),可以幫助開(kāi)發(fā)者將應(yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的容器,,WordPress是一個(gè)流行的開(kāi)源內(nèi)容管理系統(tǒng)(CMS),用于創(chuàng)建和管理網(wǎng)站,本文給大家介紹了docker安裝Wordpress速度過(guò)慢的問(wèn)題解決方法,需要的朋友可以參考下2024-05-05

