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