場景描述
事情是這樣的,前兩天客戶的伺服器突然斷電了,導緻用docker部署的服務也挂了。昨天去現場,重新開機了docker,同時準備更新一下服務。結果發現有一台節點硬碟滿了…
還是覺得有些奇怪的,畢竟docker的安裝盤有800多個G的空間,之前也隻用了100左右,覺得有點奇怪,就開始了排錯。
排錯過程
本身機器隻有我們一家在用,是以不存在被占用的情況。于是使用下面指令檢視是不是硬碟真被占滿了:
df -h
結果真的是占滿了😂
再用下面指令檢視哪個檔案夾太大:
du -sh *
發現是 /var/lib/docker/overlay 占滿了
網上查一下這個目錄的作用,說是 overlay/overlay2表示Docker的存儲驅動,可以參考一下這篇文章:https://blog.csdn.net/styshoo/article/details/60715942
也就是說容器/鏡像等都會存在這個目錄下,當量大的時候就會占滿硬碟。
也可以參考官網(https://docs.docker.com/storage/storagedriver/overlayfs-driver/)
繼續在網上搜資料,說可以看看是不是死掉容器過多的原因,使用 docker ps -a看了下,果然是。于是清理了一下無用的容器,硬碟就恢複正常了……
簡單辦法
多看了一下資料,發現可以使用 docker system prune來自動清理空間,參考下面:
- 該指令預設會清除所有如下資源:
- 已停止的容器(container)
- 未被任何容器所使用的卷(volume)
- 未被任何容器所關聯的網絡(network)
- 所有懸空鏡像(image)。
- 該指令預設隻會清除懸空鏡像,未被使用的鏡像不會被删除。
- 添加
參數後,可以一并清除所有未使用的鏡像和懸空鏡像。-a 或 --all
- 可以添加
參數用以忽略相關告警确認資訊。-f 或 --force
- 指令結尾處會顯示總計清理釋放的空間大小。
(https://yq.aliyun.com/articles/272173 )
另外,使用下面指令可以檢視docker所占的硬碟大小,如:
➜ 20190417 docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 104 5 77.78GB 71.39GB (91%)
Containers 8 0 139MB 139MB (100%)
Local Volumes 30 1 3.276kB 3.183kB (97%)
Build Cache 0B 0B
其實docker挺簡單的,把官方文檔的入門教程看完,就能用了。
再自己打個包試試,基本上就OK了。後面 遇到問題再深入,都可以。
當然,如果想買本書,那麼我推薦這一本
深入淺出Docker 可以點選直達京東
基本上就是官方文檔的中文譯本,是以流程上和官網文檔也是一緻的,适合英文不好的朋友看