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

标签 docker dockerfile

我正在尝试使用Dockerfiles生成Docker镜像,序列如下

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

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

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

我期望的是在顶层,只有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。

最佳答案

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

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

关于docker - 如何使docker为基础镜像中预先存在的文件更改仅生成差异层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057186/

相关文章:

docker - Kubernetes : Containers not starting using private registry

docker - 在Nginx配置中使用docker-compose服务名称

php - Dockerize Laravel队列:听

python - Docker文档中的Python缩进错误

docker - 是否可以在 Docker 容器内使用 cloud-init 和 heat-cfntools?

docker - 以 root 和非 root 身份运行 docker

docker - 如何向 docker 镜像提供外部 url

php - 无法从Dockerfile正确重启PHP-FPM

docker - 无法在代理后面下载Docker镜像:超时:适用于Mac的Docker

ubuntu - 访问 docker 内的二进制文件