运行存储在主机fs或内存中的容器时,是否为docker工件?

前端之家收集整理的这篇文章主要介绍了运行存储在主机fs或内存中的容器时,是否为docker工件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上下文

我编写rails应用程序,在生产中执行页面片段缓存(存储特定片段的html结果以避免重新计算它).

通常的方法是将片段存储在memcache或redis中. rails中的默认缓存存储选项是使用FS缓存(将片段存储为文件),因为它具有不依赖的优点(您不必配置memcache或redis).但是,这是一个不太受欢迎的选项,因为它比内存缓存慢,您必须手动清理缓存,而您可以依赖旧密钥使用内存缓存或充分配置的redis自动清除.

在使用docker一段时间后,我意识到清除以前的缓存文件不再是问题:在部署时,运行一个新容器,自动删除所有以前的缓存文件.这肯定比使用内存存储要慢,但这样做的好处是不需要任何配置,这在引导快速侧项目时非常酷.

但后来我想知道:写入容器fs是真的写在fs中,还是写在RAM中,而不是?这是一个问题,因为这意味着依赖于这可能会非常快速地使RAM饱和,特别是在同一服务器上的许多项目这样做.

最佳答案
这里的情况是Docker正在做正在进行的任何事情. Docker只是运行流程的一种奇特方式,而不是传统的VM.你可能知道这一点,但我只是重申,以便为我的答案奠定基础. Docker遵循您的流程想要做的事情.如果您指定希望进程在磁盘上使用文件系统缓存,并且该进程写入缓存,则Docker不会将该结果存储在内存中.它将写入磁盘上的缓存.你是正确的,短暂的容器有你在这里提到的优点,当你启动一个新的容器时,文件缓存被清理掉了.

当您的进程写入磁盘时,Docker正在写入其特殊的UnionFS(可以使用一些不同的存储后端,例如aufs或btrfs,有几种选择). Docker使用这种“特殊”文件系统有两个原因:避免重复同一基本映像中的文件,并将特定于进程的文件系统更改与基本映像的共享层隔离开来.该机制的具体术语是copy-on-write.重点是,当Docker说它正在写入文件系统时,这就是Docker正在做的事情.它不会将内容写入内存,并且正在将这些内容写入文件系统:它实际上是将内容写入磁盘.存储驱动程序的主题是一个深刻而复杂的主题,但是这个东西的documentation编写得很好且准确,就像所有Docker文档的情况一样.尽管如此,请确保您的流程没有任何魔力.您可以放心地假设Docker正在按照它所说的做.

猜你在找的Docker相关文章