在内存中运行Docker?

据我了解,Docker使用内存映射文件从映像启动。 因为我可以一遍又一遍地重复这个操作,而且据我记得同时启动同一图像的不同实例,我猜Docker会抽象出文件系统,并在其他地方存储更改。

我不知道docker是否可以configuration(或默认情况下)在没有某种临时文件的内存模式下运行?

Docker使用联合文件系统,允许它在“图层”(devicemapper,BTRFS等)中工作。 它正在进行copy-on-write,所以启动新的容器很便宜,当它执行第一次写入时,它实际上会创build一个新的层。

从图像启动容器时,您使用内存映射文件来恢复冻结的过程(除非您自己将所有内容都构build到图像中)。 相反,你正在开始一个普通的Unix进程,但在一个只能看到自己的unionfs文件系统的沙箱内。

在没有拷贝写入磁盘的情况下启动一个映像的许多副本通常便宜且快速。 但是,如果你有一个启动时间很长的stream程,你仍然会为每个实例支付这个成本。

至于在整个内存中运行Docker容器,您可以创build一个RAM磁盘并将其指定为Docker的存储卷(可configuration,但通常位于/var/lib/docker )。

在典型的使用情况下,我不希望这是一个有用的性能调整。 首先,你会花费大量的内存来保存你将不能访问的文件。 图像的基础层包含大多数Linux系统文件。 如果你从Docker Hub获取10个软件包,你很可能会轻松地获得20G的图像(之后存储成本趋于平稳)。 其次,系统已经pipe理内存和交换相当好(这就是为什么一个RAM磁盘是一个性能调整),你得到所有适用于在容器内运行的进程。 第三,对于大多数情况下,RAM磁盘可能会有所帮助,您可以使用-v标志将磁盘挂载为容器上的卷,而不需要将整个unionfs存储在那里。