如何存储Docker容器的非卷数据?

时间:2016-10-24 20:50:05

标签: docker

我了解Docker卷及其引用主机上目录的方式。容器中的其余文件系统呢?

以不同的方式考虑它:假设您的服务器具有远程驱动器上的大部分存储,这意味着读取和写入的时间比平时长。如果你没有挂载任何卷,它会将任何/部分/大部分/全部容器文件系统保存在RAM中吗?或者它是否将一些数量写入磁盘,这意味着在这种情况下它会像卷一样慢?

1 个答案:

答案 0 :(得分:3)

非卷数据存储在分层覆盖文件系统中(在大多数发行版中,这将是AUFSDeviceMapper文件系统)。两种情况下的原则相同(image source):

enter image description here

正如评论中已经提到的,我建议您阅读官方文档中的"Understand images, containers and storage drivers"部分。这个答案只是一个简短的总结。

每个Docker镜像都包含多层文件系统镜像。例如,Apache + PHP映像可能包含(1)通用Ubuntu基础层,(2)安装了Apache HTTP服务器的附加层,以及(3)顶部带有PHP-FPM和配置文件的另一层(只是一个例子)。

从图像启动新容器时,会将新的每容器图层添加到现有图像图层。该层将包含在容器本身内写入的所有更改(到非卷目录)。

关于您的具体问题:

  

如果你没有挂载任何卷,它会将任何/部分/大部分/全部容器文件系统保存在RAM中吗?

不,RAM中没有任何东西(除了通常的文件系统缓存之外)。它位于覆盖文件系统中,使用AUFS,DeviceMapper或其他存储驱动程序安装。

  

或者它是否将一些数据写入磁盘,这意味着在这种情况下它会像卷一样慢?

通常,卷中的文件系统访问比覆盖文件系统更高效。毕竟,一个卷(至少是一个基于主机的常规卷,不包括添加网络存储卷的卷驱动程序)只是对主机文件系统中常规目录的绑定安装,完全绕过了层文件系统。与层文件系统相比,卷的性能是({3}}中调查的(以及其他主题):

  

AUFS引入了显着的开销,这并不奇怪,因为I / O经历了多个层次,[...]。文件系统或磁盘密集型应用程序应使用卷绕过AUFS。 [...]虽然容器本身几乎没有开销,但Docker并非没有性能问题。 Docker卷的性能明显优于,而不是存储在AUFS中的文件。