2017-10-10 52 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

相关问题