我已经阅读了如此多的文档,我仍然不确定这是如何工作的。这有点像Docker与VM的问题。
如果我启动一个带有2GB硬盘的虚拟机并在其磁盘上填充文件,我知道它会在2GB文件后耗尽。
Docker的工作方式是否相同?我会这么认为。但是从我所读过的内容和#34; UnionFS"似乎没有用完空间。
那么为什么Docker"卷"存在?这是以某种方式自动扩展Docker磁盘空间瞬态吗?重启后,我保存在Docker容器内的文件是否会消失?重启容器后怎么样?
答案 0 :(得分:8)
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
,因此保存在容器存储和可能的配额系统之外。
如果要在支持它的本地文件系统上设置每个卷限制,可以使用其他volume plugins。
容器将在容器重启和重启时保持自己的文件状态,直到您docker rm
容器为止。卷中的文件将在删除容器后继续存在,并且可以在创建新容器时挂载。