如何使docker仅为基础映像中预先存在的文件更改生成差异层?

时间:2018-06-27 07:42:50

标签: docker dockerfile

我正在尝试使用Dockerfiles生成docker映像,顺序如下

1)使用dokerfile创建图像,该文件将复制图像中的abc.txt(大小为200kb)

2)使用另一个docker文件创建另一个图像,该文件将使用先前生成的图像(在步骤(1)中)作为基础图像,并复制文件abc.txt(附加数据,大小为400kb)

当我检查第二个图像的层时,它显示基本图像层,其中第二层由于200kb文件(abc.txt)而具有200kb的大小,而顶层由于400kb文件(abc.txt)而具有400kb的顶层

我期望的是在顶层,只有abc.txt文件的200kb更改应该出现在第二个图像中,但是我不是这种情况。

还有其他方法可以实现吗? 任何建议都会有所帮助。

这些是我的dockerfile内容 :-

(1)对于第一个图像,并且abc.txt大小为200kb时:

来自ubuntu

复制abc.txt /home/root/abc.txt


在此之后,我使用

docker build -t ubuntu2

(2)对于第二张图片,当我附加abc.txt时,其大小为400kb:

来自ubuntu2

复制abc.txt /home/root/abc.txt


我修改了abc.txt并用以上内容覆盖了现有的Dockerfile 并使用

构建图像

docker build -t ubuntu3

1 个答案:

答案 0 :(得分:1)

在您的情况下,您将文件abc.txt替换为另一个具有相同名称的文件,因此所做的更改是删除和添加文件。我认为只有这样才能有所作为,您必须使用RUN而不是COPY这样的命令:

RUN echo "data to add" >> /home/root/abc.txt