清除docker主機上的垃圾
如果你在本機上有docker build,或者你的CI有用到docker build的時侯 每過一段時間就會發現佔用的空間會大得很誇張 原因是docker build的時侯會下載各種的base image,更甚者會建立各樣的fs layer 而且建立了的image/fs layer是不會主動去刪掉的 所以就需要設立一些cronjob 去定期把沒用/舊的東西刪掉去騰出更多的空間
Linux
linux的話只需要在crontab中設定docker system prune就可以了
這個指令會移除
- 所有沒有被其他image引用的image (dangling images)
- 所有已停止的container
- 所有未被最少一個運行中的container使用的network
- 所有build cache
如果想徹底一點的話可以使用docker system prune -a
這個指令會把所有未用的image都刪掉
所以如果一些image 有引用到其他image時,當你再build的時侯就需要重新下載了
0 0 * * * /usr/bin/docker system prune -f
這樣每天零晨零時(UTC,詳細請檢查服務器設定)就會運行system prune了 但因為這個動作第一次運行時會需時很久,所以千萬請挑選服務器空閒的時間才執行
執行system prune時當機
有時侯運行image prune 時會導致docker 整個掛掉,需要重啟一下docker才能再次執行ps/info等命令 所以可以利用其他命令先把image的數量減少一下
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
https://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images