爲什麼Docker鏡像大小與倉庫中不一致?

爲什麼Docker鏡像大小與倉庫中不一致?

開始之前

如果仔細觀察你會發現,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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章