首页 > 解决方案 > 如何使 docker 为基础映像中预先存在的文件更改仅生成差异层?

问题描述

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

1)使用将复制abc.txt(大小200kb)的dockerfile创建图像

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


在此之后,我使用构建图像

码头工人构建 -t ubuntu2 。

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

来自 ubuntu2

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


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

搬运工构建 -t ubuntu3 。

标签: dockerdockerfile

解决方案


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

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

推荐阅读