[Docker] Docker 的 data file 佔據了非常大的磁碟空間?

[Docker] Docker 的 data file 佔據了非常大的磁碟空間?

今天 CentOS 7 上跳出了一個訊息,說我的根目錄 / 快要滿了…

感覺怪怪的,用 df -h 看一下,果真 50GB 的空間幾乎被用光光:

root@localhost / # df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   50G   20K 100% /

 

用 du 掃一下根目錄下的第一層子目錄,找找看哪個比較大~

我這邊用比較笨的方式,用 grep 找出佔據空間超過 1GB 以上的,

發現有 /usr 和 /var,而 /var 佔了 22G 特別可疑:

root@localhost / # du --exclude=/proc --exclude=/mnt --exclude=/home -h -s /* | egrep G
7.3G  /usr
22G   /var

 

繼續用 du 往 /var 的下一層子目錄追進去看看,是 /var/lib 吃掉了空間:

root@localhost / # du -hs /var/* | egrep G
1.7G  /var/cache
26G   /var/lib

 

用 du 的方式持續往下追,最後發現有一個檔案就佔掉了 20GB,

是 /var/lib/docker/devicemapper/devicemapper/data:

root@localhost / # du -hs /var/lib/docker/devicemapper/devicemapper/* | egrep G
20G /var/lib/docker/devicemapper/devicemapper/data

 

看來是 docker 的檔案…

用 docker info 看一下,這是 docker data file:

root@localhost / # docker info
Containers: 114
Running: 3
Paused: 0
Stopped: 111
Images: 310
Storage Driver: devicemapper
Data Space Used: 26.16 GB
Data Space Total: 107.4 GB
Data Space Available: 20.48 kB
Data loop file: /var/lib/docker/devicemapper/devicemapper/data

 

從 docker info 看到 container 有 114 個,

其中沒有在執行的有 111 個,數量有點多…

用 docker ps -a 看一下,有一堆 container 都已經是好幾個月前執行後,就沒再用了:

root@localhost / # docker ps -a
CONTAINER ID  IMAGE         COMMAND      CREATED       STATUS                     PORTS  NAMES
96ef976501f8  8674f6250ec5  "/bin/bash"  4 months ago  Exited (137) 4 months ago         angry_hopper
5e91a871518b  8674f6250ec5  "/bin/bash"  4 months ago  Exited (137) 4 months ago         serene_mahavira
672d989adcf8  e684f555b341  "/bin/bash"  4 months ago  Exited (137) 4 months ago         reverent_easley
......

 

猜想是我使用 docker container 的用法,常常是 docker run,沒有加上 –rm 參數,

所以 container 結束後會留在那裡…

先用 docker rm 把所有的 container 都砍掉:

docker rm $(docker ps -a -q)

 

現在沒有 container 了,而 data file 使用的空間從 26.16G 降到 20.59G:

root@localhost / # docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 310
Storage Driver: devicemapper
Data Space Used: 20.59 GB
Data Space Total: 107.4 GB
Data Space Available: 5.03 GB

 

從 docker info 的結果那邊,我們還注意到了 docker image 的數量也很多…

用 docker images 加上 –filter “dangling=true” 找到無人參考到的映像檔

(這些無主的映像檔應該是因為我有使用 docker build 而跑出來的):

root@localhost / # docker images --filter "dangling=true"
REPOSITORY  TAG     IMAGE ID      CREATED        SIZE
<none>      <none>  44d705aa5402  4 months ago   2.34 GB
<none>      <none>  e684f555b341  8 months ago   2.431 GB
<none>      <none>  355dae28f418  9 months ago   2.315 GB
<none>      <none>  a44563c362a3  9 months ago   2.033 GB
<none>      <none>  15591861f645  9 months ago   2.188 GB
<none>      <none>  5ab24f01828d  9 months ago   2.143 GB
<none>      <none>  6e0faa7a6d28  9 months ago   2.171 GB
<none>      <none>  d39df5ff880b  9 months ago   2.171 GB
<none>      <none>  397df1bae2b0  9 months ago   2.068 GB
<none>      <none>  497c9171bbbb  9 months ago   2.348 GB
<none>      <none>  a5f658e17968  11 months ago  1.956 GB
<none>      <none>  4865ce4d77b5  12 months ago  2.231 GB
<none>      <none>  670abde3dcd1  12 months ago  2.086 GB
<none>      <none>  e9ad3e0457e5  12 months ago  1.658 GB
<none>      <none>  014fd2329f9d  12 months ago  1.516 GB
<none>      <none>  694cac6105db  12 months ago  2.266 GB
<none>      <none>  d7db0bd39415  12 months ago  1.168 GB
<none>      <none>  33219c490108  13 months ago  1.032 GB

 

用 docker rmi 將這些無主的映像檔刪除:

docker rmi $(docker images --filter "dangling=true" -q)

 

再跑一次 docker info 看看,image 數量從 310 降到了 219,

而 data file 的空間也從 20.59G 降到 12.09G:

root@localhost / # docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 219
Storage Driver: devicemapper
Data Space Used: 12.09 GB
Data Space Total: 107.4 GB
Data Space Available: 13.07 GB

 

看一下目前 df 的結果,根目錄下總共還回來了約 39G 的空間:

root@localhost / # df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   39G   12G  77% /

 

沒想到 container 空間吃的這麼兇…

以後還是得記得 docker run 要加上 –rm 參數比較好啊~

 

參考資料:

docker images

What are Docker <none>:<none> images?

 

(本頁面已被瀏覽過 1,300 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料