Venot Asked:2022-08-19 05:34:19 +0000 UTC2022-08-19 05:34:19 +0000 UTC 2022-08-19 05:34:19 +0000 UTC 为什么docker中只有顶层是可变的? 772 我创建了一个镜像,启动了容器,为什么所有的变化都只在顶层?所有的层都会改变,它是什么,容器完成了它的工作并被破坏了,这是必要的,它从图像中启动了另一个。如果从底层删除文件,大小不会改变,文件将被隐藏,所有更改都将复制到顶层,为什么?为什么? docker 1 个回答 Voted Best Answer aleksandr barakin 2022-08-19T19:47:59Z2022-08-19T19:47:59Z 为什么和为了什么? 在第一轮(和第二轮)中 - 用于容器的可重复性和节省空间。 这些任务是相互关联的: 假设您通过运行容器删除了文件,然后“容器完成了工作并被销毁”,并且原始图像已经更改 - 它不包含您删除的文件。现在使用相同文件系统(相同图像)的其他容器可能会因为缺少该文件而停止工作(或开始以不同方式工作)。 即,为了保持可重复性,您必须保留原始图像的两份副本 - 一份包含此文件,另一份不包含。下次运行容器时,您会删除另一个文件 - 您需要保留另一个副本。等等。很不经济。 下面我们来节省空间。但是,如果您不是每次都制作整个文件系统的完整副本,而是单独修复所做的更改,该怎么办?创建了一个文件 - 仅添加其内容,以及一些服务信息(以字节为单位,最大值 - 千字节)。删除了文件 - 只添加了一点服务信息(也最多几千字节)。 我们获取原始图像,用我们需要的更改覆盖文件系统的一个新层(甚至不是一层)——我们得到“二合一”:既节省空间又具有可重复性。 加法。 或者,当您问这个问题时,您是从容器启动时创建文件系统(即映像)的副本的假设出发的?不,这不是它的做法。文件系统在启动时不会被复制 - 这要快得多(并且再次节省空间)。
在第一轮(和第二轮)中 - 用于容器的可重复性和节省空间。
这些任务是相互关联的:
假设您通过运行容器删除了文件,然后“容器完成了工作并被销毁”,并且原始图像已经更改 - 它不包含您删除的文件。现在使用相同文件系统(相同图像)的其他容器可能会因为缺少该文件而停止工作(或开始以不同方式工作)。
即,为了保持可重复性,您必须保留原始图像的两份副本 - 一份包含此文件,另一份不包含。下次运行容器时,您会删除另一个文件 - 您需要保留另一个副本。等等。很不经济。
下面我们来节省空间。但是,如果您不是每次都制作整个文件系统的完整副本,而是单独修复所做的更改,该怎么办?创建了一个文件 - 仅添加其内容,以及一些服务信息(以字节为单位,最大值 - 千字节)。删除了文件 - 只添加了一点服务信息(也最多几千字节)。
我们获取原始图像,用我们需要的更改覆盖文件系统的一个新层(甚至不是一层)——我们得到“二合一”:既节省空间又具有可重复性。
加法。
或者,当您问这个问题时,您是从容器启动时创建文件系统(即映像)的副本的假设出发的?不,这不是它的做法。文件系统在启动时不会被复制 - 这要快得多(并且再次节省空间)。