我正在使用docker分析由各种命令引起的文件系统更改.我只是在Dockerfile中添加相关的RUN行,进行构建,然后使用docker save查看所做的更改.不幸的是,我使用了许多命令,即使大多数时候我可以将其中几个放入一个图层,也要结束,但是我通常超过了较低的127个父图层限制.
为了解决这个问题,我将多层图像压缩为仅一层的图像,然后将所得图像用作其余新层的父图像.最好的方法是启动一个容器,然后使用docker export,然后再docker import以获得一个不错的单层更改.我正在寻找减少执行该操作所需时间的方法.
有没有一种简单的方法可以做相同的事情(导出图像的完全扩展的文件系统,而不仅仅是像docker save中的图层堆栈)而无需旋转容器?
最佳答案
无论采用哪种方法,挤压一个完整的容器始终是读取分层文件系统并编写新的平面文件系统的过程,这涉及io,这相对较慢.
原文链接:https://www.f2er.com/docker/532642.html相比之下,创建一个容器的重量非常轻,所以我不确定摆脱该步骤会不会带来很多收益
time container=$(docker create debian)
time docker export $container | docker import - debian_flat
time docker rm $container
在基于ssd的系统上,结果为:
创造
real 0m0.050s
user 0m0.015s
sys 0m0.010s
出口进口
real 0m8.213s
user 0m2.867s
sys 0m0.768s
去掉
real 0m0.019s
user 0m0.007s
sys 0m0.008s
还有其他一些工具可以让you squash selected layers使用.这可以节省您的时间,因为您只需要读取和写入部分数据.如果您需要压缩完整图像,那么我不确定这将比导出/导入快得多,因为您仍在读写相同数量的数据.
在正式的docker中有一个github issue涵盖了南瓜功能,在support中有一个pull requests可以直接对docker中的层进行挤压或展平.每个请求似乎在被接受之前会慢慢消失.