什么时候正在运行的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=X
在zfs
或btrfs
驱动程序上运行时。 Docker 1.13支持在xfs
上使用overlay2
的配额大小
集装箱
对于除devicemapper
以外的所有存储驱动程序,容器和本地卷存储受托pipe在/var/lib/docker
下的文件系统及其子目录的限制。 容器可以填充共享文件系统,然后其他容器不能再写入。
使用devicemapper
驱动程序时,每个容器的默认卷大小为100G。 默认大小可以使用守护进程选项--storage-opt dm.basesize
选项覆盖,或者在每个容器的基础上使用docker run --storage-opt size=2G
。
每个容器配额支持可用于zfs
和btrfs
驱动程序,因为这两个文件系统都提供简单的内置支持来创build具有大小或配额的卷。
Docker 1.13以来,xfs上的overlay2
存储驱动程序支持每个容器配额 。 当新的4.5+内核成为标准/通用的,ext4和xfs配额共享一个通用的API时,这可能会扩展到ext4。
卷
Docker卷与容器是分开的,可以看作是一个临时容器的持久存储区域。
卷与Docker存储分开存储,并针对不同的后端拥有自己的插件。 local
是默认的后端,它将数据写入/var/lib/docker/volumes
因此被保存在容器存储和可能的配额系统之外。
如果您想要在支持它的本地文件系统上设置每个卷的限制,则可以使用其他卷插件 。
容器将保持自己的文件状态在一个容器重新启动并重新启动,直到您docker rm
容器。 卷中的文件将在容器移除后存活,并且可以在创build新容器时进行装载。