在没有旋转容器的情况下压扁泊坞窗图像

我使用docker来分析由各种命令引起的对文件系统的更改。 我只需在Dockerfile添加相关的RUN行,构build它,使用Dockerfile docker save来查看所做的更改。 不幸的是,我使用了很多命令,尽pipe大部分时间我都可以把它们放到一个图层中,但是我通常会超出127个父层的极限。

为了解决这个问题,我把只有一层图像的图层压缩成多层图像,然后把结果图像作为其他新图层的父图像。 最好的办法是启动一个容器,然后使用docker export ,然后docker import ,获得一个不错的单层更改。 我正在寻找方法来削减执行该操作所需的时间。

有没有一个简单的方法来做同样的事情(导出完全展开的图像文件系统,而不是像在docker save的层堆栈),而不旋转容器?

无论采用什么方法,压缩一个完整的容器总是一个阅读分层文件系统的过程,并写一个新的平面文件系统,其中涉及io,相对较慢。

创build一个容器是相当轻量级的比较,所以我不知道你会通过摆脱这一步获得很大的收益

 time container=$(docker create debian) time docker export $container | docker import - debian_flat time docker rm $container 

在基于ssd的系统上,结果如下:

创build

 real 0m0.050s user 0m0.015s sys 0m0.010s 

出口import

 real 0m8.213s user 0m2.867s sys 0m0.768s 

去掉

 real 0m0.019s user 0m0.007s sys 0m0.008s 

还有其他的工具,让你挤压选定的图层 。 这可以节省您的时间,因为您只需要读取和写入一部分数据。 如果你的要求是挤压完整的图像,那么我不确定这将比导出/导入更快,因为你仍然在读取和写入相同数量的数据。

有一个github的问题,以覆盖官方docker的南瓜function和拉动请求,以支持在docker和生成中直接压扁或铺平层。 每个请求似乎在被接受之前慢慢消失。