檢查磁盤空間和各容器佔用空間
檢查磁盤空間情況
首先檢查磁盤空間確認overlay2佔用空間
df -h
可以看到以下結果
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 2.1M 1.6G 1% /run
/dev/sda1 197G 59G 131G 32% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 124M 12M 113M 10% /boot/efi
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/3ea43957615f592f2a7b28512fd7f344ac762bfc80a4a964ac467b17f562203e/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/bd8702eb9dcc24aff1a54387374f6609b431aabb1c7131359296867986dc84a0/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/b6b66bb24dc1186c12f18ddb3487a3b81ef40767993a722b08359808635461bd/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/0bf724bd62f24f7411c573b03fef2816c0b14a696ce04e8b78c4616b704b1b86/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/d7caeb11110a19f032d90855ae491c9cb35c5cbbd57daf266e5b12c3494ba21e/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/e4ec25032cb6814980100348c68e937bb4b9e48c098dbf99c5a543428f73e8b7/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/53277c320141d4efa122ad91fe38fe9e7362d29d2cdabb5c3d8c2a1bdea12120/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/b5b65a3ebe16e33091590dbdbea7c51b6ffc8ab894358d9cb7d95934a14a8579/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/864d8e14ba8c74bc627a35847aff844e45acc43686abc7d81c471969fe2b8386/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/5d0d903a3ccd4b5b2cd6741d4eb9654b10667fd5707c13d3d51f2678b5c4d7a2/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/4c2bf66ffcd7f2a8bb03dcee3f5d445c4be9c56b899aaea319689a92193fbaf4/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/3a9e03fd9038307f133da2800527610a6334e458d42d8a406ea30e108dd8ec58/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/4c509ec79872340afca9c9a763782005fa043f5e4c988acc9f24f371d7c79b5c/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/d9bad19c0ce3f9ff18364ee882e52bb9fef3db1c5a99bdbfb97fe4dbbea6f985/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/492549dc47bc8b55a73c945ad3eb699fe34c5e563d22cf4b16383048420fbffe/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/31a7a2393fa100d485b852cda049e4efe7e2d57240a638bde911901a9878e6bd/merged
overlay 197G 59G 131G 32% /var/lib/docker/overlay2/c56e33e03da1a8e849eb8d02a660cfdbf1b21774a99adb8bb1435e072ead0eaf/merged
tmpfs 1.6G 0 1.6G 0% /run/user/0
如果看到overlay Use%這一欄佔用百分比過高説明確實是overlay目錄佔用過高導致服務器磁盤空間過小的問題
檢查容器的佔用情況
首先檢查docker模塊中的佔用情況
docker system df
結果顯示
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 20 18 8.739GB 684.5MB (7%)
Containers 18 17 11.12MB 6.23kB (0%)
Local Volumes 7 6 348.8MB 72.39MB (20%)
Build Cache 754 0 40.38GB 40.38GB
- Images: 鏡像的數量及佔用大小
- Containers: 容器的數量及佔用大小
- Local Volumes: 本地卷數量及佔用大小
- Build Cache: 打包構建時的緩存大小
我們主要是清理Images、Containers和Build Cache中的文件
執行清理操作
清理無用的Images
首先先查看一下目前存在的鏡像
docker images
結果
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> defd79220cd6 2 months ago 239MB
可以看到有很多到<none>字樣的鏡像。這裏我只截取一個作為參考。發現數量和佔用大小都挺多的。
none鏡像被官方稱為dangling鏡像。代表沒有標籤且沒有被使用過的鏡像,可以安全放心的清理。
清理方法也很簡單,執行下面命令
docker image prune
這條命令會自動幫我們清除帶有<none>的無效鏡像。命令執行完畢會提示釋放了多少個空間。然後我們再來執行docker images命令會發現帶有<none>的鏡像全部被清理乾淨了磁盤空間也得到了釋放!
清理Containers容器中的日誌
Containers容器佔用最多的基本上就是日誌文件
Docker 日誌(也就是 docker logs 輸出的東西) 默認存放在:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
這個日誌文件可能會越積越大,需要定期清理。
方法1:
先找到日誌文件路徑:
docker inspect <容器名或ID> --format='{{.LogPath}}'
然後清空它
truncate -s 0 "$(docker inspect <容器名或ID> --format='{{.LogPath}}')"
方法2: 還有另一種方式可以一次性清理所有容器
find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;
不刪除文件、不重啓服務,不影響任何容器運行。
從根源限制Docker日誌大小(一勞永逸的方法 推薦)
我們可以設置限制日誌大小從而不用每次都來手動刪除日誌
輸入
vim /etc/docker/daemon.json
然後再文件中寫入
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
這樣每個容器最多隻會佔用30MB的日誌空間。
寫入完成後並不會立刻生效,需要重啓運行中的容器。
如果有條件的情況下重啓docker會對所有容器都生效
systemctl restart docker
清理Build Cache構建緩存
Build Cache主要是構建時的緩存,清理它們下次打包構建時速度可能會慢點,對於系統沒有任何影響。如果磁盤佔用過高需要及時清理。清理方法也特別簡單就一行命令
docker builder prune
執行完成後可以發現服務器的內存又釋放了一大截。
總結
通過先查看磁盤佔用、再清理無用鏡像與日誌、最後刪除構建緩存,可以快速釋放overlay2佔用的磁盤空間。如果希望長期穩定,建議同時配置日誌大小限制,並定期用docker system df和df -h複查空間,避免再次爆滿。
好了,本期教程到此結束。如果有任何疑問可以在下方留言 更多精彩內容可以關注我的博客 haydenbi.com