据我了解,Docker 使用内存映射文件从镜像启动。由于我可以一遍又一遍地执行此操作,并且据我记得并行启动同一图像的不同实例,我猜 docker 抽象了文件系统并将更改存储在其他地方。
我想知道 docker 是否可以配置(或者默认情况下)以仅内存模式运行,而无需某种临时文件?
Docker 使用联合文件系统,允许它在“层”中工作(devicemapper、BTRFS 等)。它执行写时复制,因此启动新容器的成本很低,并且当它执行第一次写入时,它实际上创建了一个新层。
当您从映像启动容器时,您是not使用内存映射文件来恢复冻结的进程(除非您自己将所有这些都构建到映像中......)。相反,您正在启动一个普通的 Unix 进程,但在沙箱内,它只能看到自己的 unionfs 文件系统。
在没有副本写入磁盘的情况下启动图像的多个副本通常既便宜又快速。但如果您的流程启动时间较长,您仍然需要为每个实例支付该费用。
至于完全在内存中运行 Docker 容器,您可以创建一个 RAM 磁盘并将其指定为 Docker 的存储卷(可配置,但通常位于/var/lib/docker
).
在典型的用例中,我不认为这是一个有用的性能调整。首先,您将花费大量内存来保存您不会访问的文件。映像的基础层包含大多数 Linux 系统文件。如果您从 Docker Hub 获取 10 个包,您可能会轻松获得价值 20G 的镜像(之后存储成本趋于稳定)。其次,系统已经很好地管理内存和交换(这就是为什么 RAM 磁盘是一种性能调整),并且您可以将所有这些应用于容器内运行的进程。第三,对于 RAM 磁盘可能有帮助的大多数情况,您可以使用-v
标志将磁盘作为卷安装在容器上,而不需要将整个 unionfs 存储在那里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)