运行的Docker容器什么时候用完磁盘空间?

the*_*her 3 virtual-machine docker

我已经阅读了这么多文档,我仍然不确定这是如何工作的.这有点像Docker与VM的问题.

如果我启动一个带有2GB硬盘的虚拟机并在其磁盘上填充文件,我知道它在2GB文件后耗尽.

Docker的工作方式是否相同?我会这么认为.但是从我所读到的关于"UnionFS"的内容来看,它似乎并没有耗尽空间.

那么为什么Docker"卷"存在呢?这是以某种方式自动扩展Docker磁盘空间瞬态吗?重启后,我保存在Docker容器中的文件是否会消失?重启容器后怎么样?

Mat*_*att 8

Docker的用法(1.12+)取决于Docker存储驱动程序以及可能使用的物理文件系统.

TL; DR存储将在所有容器和本地卷之间共享,除非您使用devicemapper存储驱动程序或docker run --storage-opt size=X在运行zfs或btrfs驱动程序时设置了限制.Docker 1.13+还支持overlay2在xfs备份文件系统上的配额大小.

集装箱

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

使用devicemapper驱动程序时,每个容器的默认卷大小为"精简分配".可以使用守护程序选项--storage-opt dm.basesize选项覆盖默认大小,也可以基于每个容器进行设置docker run --storage-opt size=2G.

每个容器配额支持都可用于zfs和 btrfs驱动程序,因为两个文件系统都提供了对创建具有大小或配额的卷的简单内置支持.

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

卷

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

卷与Docker存储分开存储,并有自己的插件用于不同的后端.local是默认的后端,它将数据写入/var/lib/docker/volumes容器存储和可能的配额系统之外.

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

容器将在容器重启和重启时保持自己的文件状态,直到docker rm容器为止.卷中的文件将在删除容器后继续存在,并且可以在创建新容器时装入.