我已经阅读了很多文档,但我仍然不确定这到底是如何工作的。这有点像 Docker 与 VM 的问题。
如果我使用 2GB 硬盘驱动器启动虚拟机并用文件填充其磁盘,我知道它会在 2GB 文件后耗尽。
Docker 的工作方式相同吗?我想是这样。但从我读到的有关“UnionFS”的内容来看,它似乎并没有耗尽空间。
那么为什么 Docker“卷”存在呢?是否会以某种方式自动临时扩展 Docker 磁盘空间?重启后,我保存在 Docker 容器中的文件会消失吗?重启容器后怎么样?
最佳答案
Docker 的使用(1.12+)取决于 Docker storage driver以及可能正在使用的物理文件系统。
TL;DR 存储将在所有容器和本地卷之间共享,除非您使用 devicemapper
存储驱动程序或已通过 docker run --storage-opt size=X
设置限制当在 zfs
上运行时或btrfs
司机。 Docker 1.13+ 还支持配额大小 overlay2
在xfs
上支持的文件系统。
容器
对于所有存储驱动程序,除了 devicemapper
,容器和本地卷存储受到托管底层文件系统的限制/var/lib/docker
它的子目录。一个容器可以填满共享文件系统,然后其他容器就无法再写入。
使用 devicemapper
时驱动程序中,默认卷大小 100G 是为每个容器“精简分配”的。可以使用守护进程选项 --storage-opt dm.basesize
option 覆盖默认大小。或按每个容器设置 docker run --storage-opt size=2G
。
相同的每个容器配额支持可用于 zfs
和 btrfs
驱动程序,因为两个文件系统都为创建具有大小或配额的卷提供简单的内置支持。
overlay2
storage driver on xfs supporta per container quotas as of Docker 1.13 。当新的 4.5+ 内核成为标准/通用并且 ext4 和 xfs 配额共享通用 API 时,这可能会扩展到 ext4。
数量
Docker volumes与容器分离,可以将其视为临时容器的持久存储区域。
卷与 Docker 存储分开存储,并且针对不同后端有自己的插件。 local
是默认后端,它将数据写入 /var/lib/docker/volumes
so 保存在容器存储和可能的配额系统之外。
其他volume plugins如果您想在支持它的本地文件系统上设置每个卷的限制,则可以使用它。
容器将在容器重新启动和重新启动时保留自己的文件状态,直到您 docker rm
容器。卷中的文件将在容器删除后保留下来,并且可以在创建新容器时安装。
关于docker - 正在运行的 Docker 容器何时会耗尽磁盘空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621886/