開始之前
如果仔細觀察你會發現,Docker宿主機中某個鏡像所佔用的磁盤空間和在 Docker Hub(倉庫)上看到的鏡像大小是不同的,例如 golang:1.9
在 Docker Hub (倉庫)顯示的是 272MB
,而鏡像下載後docker image ls
命令給出的卻是 733MB
。
這是因爲 Docker Hub (倉庫)中顯示的大小是壓縮後的體積,在鏡像下載和上傳過程中鏡像是保持壓縮狀態的,以保證能夠更快速的下載或上傳鏡像,而 docker image ls
命令是鏡像下載到本地展開後的各層所佔空間的總和。
Unino FS
Docker 鏡像是多層存儲結構,並且可以繼承、複用,因此不同鏡像可能會因爲使用相同的基礎鏡像,從而擁有共同的層。docker image ls
命令列出的鏡像體積總和並非是所有鏡像實際消耗硬盤空間,因爲基於 Union FS
技術(聯合文件系統),相同的層只需要保存一份即可,所以實際鏡像硬盤使用空間可能要比這個小的多。
可以通過以下命令來查看鏡像、容器、數據卷所佔用的空間。
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 52 0 9.846GB 9.846GB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
命令幫助
docker system --help
Usage: docker system COMMAND
Manage Docker
Options:
--help Print usage
Commands:
`df` Show docker disk usage
events Get real time events from the server
info Display system-wide information
prune Remove unused data
# 省略...
注意,docker 1.13.1(含) 後版本支持 system 子命令。
小結
最後來總結下文章中的知識點
- Docker倉庫側重點是網絡,鏡像下載和上傳過程中始終保持壓縮狀態。
- 由於
Union FS
的特性,不同docker鏡像可能會使用相同的基礎鏡像,doker images
命令列出的鏡像體積總和並不能代表實際使用的磁盤空間,需要使用docker system df
命令來代替。
doker&k8s Qun [703906133]