2017-10-10 1177 views
0

我在Docker上做了一個關於映像大小的測試。爲什麼在我運行docker commit後docker映像大小如此之大

# docker images 
REPOSITORY       TAG     IMAGE ID    
CREATED    SIZE 
img_anaconda_installed    latest    5bbdedd62fd3   
21 seconds ago  2.79GB 
img_anaconda      latest    5d9dbd3c4a63   
14 minutes ago  794MB 
centos        latest    196e0ce0c9fb   
3 weeks ago   197MB 

centos是我運行'docker pull centos'的圖像,它的大小是197M。

然後,我運行一個容器的centos,並在容器中,我做了yum安裝wget,yum install bzip2,下載anaconda.sh文件,並停止容器。

然後我做了'碼頭提交my_container img_anaconda'來創建一個新的圖像。圖像大小爲794M。它的尺寸比我想象的要大一些。

最後,我再次進入my_container安裝anaconda。在完成anaconda之後,我停止了容器,docker提交了名爲img_anaconda_installed的新映像。它的大小是2.79GB。

所以我的問題是,大尺寸的原因僅僅是anaconda很大,或者docker commit會引起一些其他的事情嗎?

PS:anaconda.sh文件的大小是103M。

回答

1

圖像越多,結果大小越大。
如果您更新yum存儲庫(我猜你是因爲添加了包而實現的),然後提交該圖層,它將進一步增加圖像大小。如果清理緩存,它可能會降低一點。

我會建議編寫一個Dockerfile,而不是通過運行容器更新圖像,這樣可以更多地控制層數,並且可以測試和調整更多,並立即查看結果。

如果您運行的是docker history <image name>,您也可以看到不同圖層的大小,從而爲您提供問題所在位置的提示。

+0

謝謝,我查了「碼頭歷史」,發現圖層只有centos = 197M。所以我認爲其餘大小來自容器中的文件更改(例如yum install)。但它比我想象的要大得多。 – iloveml

+0

是的,因爲有很多層次:) – Jite

+0

我幾個星期前寫了一篇關於這個的博客文章,也許它可以讓你更深入的瞭解這個問題:https://jite.eu/2017/9/27/layers/ – Jite

相關問題