目前生產(chǎn)環(huán)境使用的
docker
+微服務(wù)
的環(huán)境低零,配合自動化編譯部署
環(huán)境,大大減少了拯杠,項目測試或上線的復(fù)雜度掏婶,讓運(yùn)維變得了快樂起來,可是在服務(wù)運(yùn)行的一段時間后潭陪,某些主機(jī)磁盤空間被占滿了(項目本身對磁盤要求不高雄妥,因此默認(rèn)使用的是40G磁盤空間的云服務(wù)器),于是又進(jìn)入了漫長的踩坑之路
首先查看磁盤占用
df -h
結(jié)果顯示多條如下數(shù)據(jù)
overlay 40G 40G 0G 100% /var/lib/docker/overlay2/{id}/merged
百度到了清理docker空間的方法依溯,可用于清理一些無用的docker數(shù)據(jù)
docker system prune -a
執(zhí)行之后老厌,發(fā)現(xiàn)雖然清理了2個多G的數(shù)據(jù),但是依舊無法明白為何幾個微服務(wù)會占用那么多的磁盤空間黎炉,于是嘗試查找系統(tǒng)中的大文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr # 查找"/"目錄下所有大于100M的所有文件
發(fā)現(xiàn)/var/lib/docker/containers/{container_id}/
下存在數(shù)據(jù)較大的*-json.log
日志文件枝秤,百度發(fā)現(xiàn)這是docker容器運(yùn)行的標(biāo)準(zhǔn)輸入日志
,遂刪除之慷嗜。項目中已使用-v
的方式掛載項目輸出日志文件淀弹,因此對容器運(yùn)行日志沒有了需求,研究后發(fā)現(xiàn)在構(gòu)建參數(shù)的時候可以對標(biāo)準(zhǔn)輸入日志大小
與數(shù)量
進(jìn)行限制庆械,以減少日志文件對存儲空間的占用薇溃,以下配置分別為日志文件最大容量、最大日志文件數(shù)缭乘。
docker run ...... --log-opt max-size=10m --log-opt max-file=1
也可以在docker的配置文件中進(jìn)行全局修改:新建或修改/etc/docker/daemon.json沐序,添加log-dirver和log-opts參數(shù)(daemon.json參數(shù)說明:https://www.cnblogs.com/pzk7788/p/10180197.html)
{
"log-driver":"json-file",
"log-opts": {"max-size":"10m", "max-file":"1"}
}
另外,在查找大文件的掃描結(jié)果中堕绩,可能有通過-v
進(jìn)行了掛載數(shù)據(jù)目錄的薄啥,里面的數(shù)據(jù)可根據(jù)相應(yīng)的掛載目錄
找到對應(yīng)的容器進(jìn)行清理或設(shè)置;也可能有出現(xiàn)許多容器產(chǎn)生的未通過-v
掛載的目錄/var/lib/docker/overlay2/{id}/merged
逛尚,即文章開頭通過df -h
找到的文件(如果一個宿主機(jī)存在多個容器,多個容器的數(shù)據(jù)都位于宿主機(jī)的overlay(Filesystem)
,而且大小一致)刁愿,可通過docker inspect {container}
中GraphDriver
找到}/var/lib/docker/overlay2/{id}
中的{id}
绰寞,進(jìn)而確定容器進(jìn)行清理或設(shè)置