什么时候正在运行的Docker容器的磁盘空间不足?

我已经阅读了这么多的文档,我还不确定这是如何工作的。 这是一个Docker vs. VM的问题。

如果我用一个2GB的硬盘启动一个虚拟机,并用文件填充它的磁盘,我知道它在2GB的文件后会耗尽。

Docker的工作原理是什么? 我会这样认为的。 但是从我读到的有关“UnionFS”的内容看来,它似乎并没有耗尽空间。

那么为什么Docker“卷”存在? 是以某种方式自动扩展Docker磁盘空间瞬态? 重新启动后,保存在我的Docker容器中的文件会消失吗? 如何重新启动容器后?

Docker 1.12-1.13的使用取决于Docker存储驱动程序和可能使用的物理文件系统。

TL; DR存储将在所有容器和本地卷之间共享,除非您正在使用devicemapper存储驱动程序,或者通过docker run --storage-opt size=X设置了限制docker run --storage-opt size=Xzfsbtrfs驱动程序上运行时。 Docker 1.13支持在xfs上使用overlay2的配额大小

集装箱

对于除devicemapper以外的所有存储驱动程序,容器和本地卷存储受托pipe在/var/lib/docker下的文件系统及其子目录的限制。 容器可以填充共享文件系统,然后其他容器不能再写入。

使用devicemapper驱动程序时,每个容器的默认卷大小为100G。 默认大小可以使用守护进程选项--storage-opt dm.basesize选项覆盖,或者在每个容器的基础上使用docker run --storage-opt size=2G

每个容器配额支持可用于zfsbtrfs驱动程序,因为这两个文件系统都提供简单的内置支持来创build具有大小或配额的卷。

Docker 1.13以来,xfs上的overlay2存储驱动程序支持每个容器配额 。 当新的4.5+内核成为标准/通用的,ext4和xfs配额共享一个通用的API时,这可能会扩展到ext4。

Docker卷与容器是分开的,可以看作是一个临时容器的持久存储区域。

卷与Docker存储分开存储,并针对不同的后端拥有自己的插件。 local是默认的后端,它将数据写入/var/lib/docker/volumes因此被保存在容器存储和可能的配额系统之外。

如果您想要在支持它的本地文件系统上设置每个卷的限制,则可以使用其他卷插件 。

容器将保持自己的文件状态在一个容器重新启动并重新启动,直到您docker rm容器。 卷中的文件将在容器移除后存活,并且可以在创build新容器时进行装载。