我們?cè)谑褂胐ocker的過(guò)程中發(fā)現(xiàn)基于swarm使用Storage Driver: overlay的方式進(jìn)行存儲(chǔ).但是發(fā)現(xiàn)這個(gè)特別占用存儲(chǔ)空間.
清理所有停止的容器
docker container prune
清理所有不用數(shù)據(jù)(停止的容器,不使用的volume,不使用的networks,懸掛的鏡像)
docker system prune -a
overlay存儲(chǔ)
我們通過(guò)上面的操作清除了一些無(wú)用的數(shù)據(jù),但是,overlay還是特別大.我們先了解下overlay存儲(chǔ).
overlayfs
集成進(jìn)了linux 3.18內(nèi)核.
overlay存儲(chǔ)驅(qū)動(dòng)主要使用的是overlayfs技術(shù).中文名是疊合式文件系統(tǒng).多個(gè)文件系統(tǒng)可以mount之后進(jìn)行合并.
docker 鏡像層 lowerdir
docker 容器層 upperdir
docker 容器掛載點(diǎn) merged
這個(gè)三個(gè)層對(duì)應(yīng)了 overlayFs的結(jié)構(gòu). 我們通過(guò)docker inspect 可以查看到如下結(jié)構(gòu)
"GraphDriver": { "Name": "overlay", "Data": { "LowerDir": "/mnt/docker/overlay/5eb97eb91bed89a9c879142900419ad118215af05c291989282c130d031d7019/root", "MergedDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/merged", "UpperDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/upper", "WorkDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/work" } }
鏡像在 /root
掛載點(diǎn)在 /merged
容器在 /upper
工作目錄 /work
overlayfs數(shù)據(jù)清理
我們做了一個(gè)實(shí)驗(yàn),我們啟動(dòng)一個(gè)容器(版本不同),之后
docker stop conatiner docker rm container
通過(guò)對(duì)數(shù)據(jù)大小的監(jiān)控,我們發(fā)現(xiàn) overlay會(huì)隨著新鏡像的產(chǎn)生而產(chǎn)生一些數(shù)據(jù),隨著容器的關(guān)閉刪除,這個(gè)文件并沒(méi)有縮小體積.如何解決呢 看來(lái)我們忽視了一個(gè)問(wèn)題.我們使用 docker system prune以為可以不需要的數(shù)據(jù)都清理了,但是關(guān)于images中是這樣描述的" dangling images" 懸掛的鏡像 .關(guān)于這個(gè)詞匯我還沒(méi)有理解.不過(guò)通過(guò)測(cè)試,即使我把容器停止也無(wú)法清理鏡像,所以,我無(wú)法理解 懸掛是怎樣的狀態(tài).
docker rmi images
最后我們通過(guò)手動(dòng)刪除鏡像,則之前產(chǎn)生的overlay數(shù)據(jù)就隨之減少了.
tips:
查看overlay 大小 du –max-depth=1 -h
查看數(shù)量 ls|wc -w
整理
鏡像有新版本產(chǎn)生的話(huà),我們可以按照這樣的流程操作
docker stop container docker rm container docker rmi image docker pull image docker run ...
這樣就避免了系統(tǒng)磁盤(pán)一眨眼的時(shí)間就滿(mǎn)了.
其他
docker 時(shí)間同步
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
docker 存儲(chǔ)地方修改
ExecStart=/usr/bin/dockerd --graph="/mnt/data/images"