docker - 如何使 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 。
解决方案
在您的情况下,您将文件替换为abc.txt
另一个具有相同名称的文件,因此您所做的更改是删除和添加文件。在我看来,要有所不同,您必须使用RUN
命令而不是COPY
这样:
RUN echo "data to add" >> /home/root/abc.txt
推荐阅读
- sql-server - 访问查询 DSN-less 连接字符串错误
- python-3.x - pandas MultiIndex中的代码有什么用?
- list - Gitlab 仅列出当前管道而不是特定文件夹中存在的所有项目
- .net - Reporting Services - 您的自定义程序集何时需要权限?
- mysql - 选择列中字符串中的最大数字
- php - 如何检查提交的元素值是否已经存在?
- c - Scanf 没有提供预期的输出
- android - 片段包含绑定不会设置变量
- postgresql - 是否可以使用 Azure 数据工厂将 GeoJson 数据复制到 PostGIS?
- c# - 如何访问动态添加的 UserControl 的视图模型