据我所知,Docker使用内存映射文件从图像开始.因为我可以一遍又一遍地做到这一点,并且据我记得并行启动同一图像的不同实例,我想docker抽象文件系统并将更改存储在其他地方.
我想知道docker是否可以配置(或默认情况下)在没有某种临时文件的情况下以仅内存模式运行?
最佳答案
Docker使用一个联合文件系统,允许它在“层”(devicemapper,BTRFS等)中工作.它正在进行写时复制,因此启动新容器很便宜,并且当它执行第一次写入时,它实际上会创建一个新层.
原文链接:https://www.f2er.com/docker/436340.html当您从映像启动容器时,您没有使用内存映射文件来恢复冻结进程(除非您自己将所有这些内容构建到映像中……).相反,你正在开始一个普通的Unix进程,但在沙盒中,它只能看到自己的unionfs文件系统.
启动图像的许多副本,其中没有副本写入磁盘通常便宜且快速.但是如果您的流程启动时间很长,那么您仍然会为每个实例支付这笔费用.
至于完全在内存中运行Docker容器,您可以创建一个RAM磁盘并将其指定为Docker的存储卷(可配置,但通常位于/ var / lib / docker下).
在典型的用例中,我不希望这是一个有用的性能调整.首先,您将花费大量内存来保存您无法访问的文件.图像的基础层包含大多数Linux系统文件.如果从Docker Hub获取10个软件包,您可能很容易就能获得价值20G的图像(之后存储成本趋于稳定).其次,系统已经很好地管理内存和交换(这就是为什么RAM磁盘是一个性能调整),你可以将所有这些应用到容器内运行的进程.第三,对于RAM磁盘可能有帮助的大多数情况,您可以使用-v标志将磁盘装载为容器上的卷,而不是需要将整个unionfs存储在那里.