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

Docker容器的非卷数据是如何存储的?,docker,Docker,我了解Docker卷以及它们引用主机上目录的方式。容器中文件系统的其余部分呢 换一种方式考虑:假设您有一台服务器,其中大部分存储在远程驱动器上,这意味着读取和写入所需的时间比平时更长。如果不装载任何卷,它会将任何/部分/大部分/所有容器文件系统保留在RAM中吗?或者它会将一些数据写入磁盘,这意味着在这种情况下,它的速度与卷一样慢?非卷数据存储在分层覆盖文件系统中(在大多数发行版中,这将是一个或文件系统)。这两种情况的原理是相同的(): 正如评论中已经提到的,我可以建议阅读官方文件中的这一节。这

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


换一种方式考虑:假设您有一台服务器,其中大部分存储在远程驱动器上,这意味着读取和写入所需的时间比平时更长。如果不装载任何卷,它会将任何/部分/大部分/所有容器文件系统保留在RAM中吗?或者它会将一些数据写入磁盘,这意味着在这种情况下,它的速度与卷一样慢?

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

正如评论中已经提到的,我可以建议阅读官方文件中的这一节。这个答案只是一个简短的总结

每个Docker映像由多层文件系统映像组成。例如,一个Apache+PHP映像可能包括(1)一个通用的Ubuntu底层,(2)一个安装了Apache HTTP服务器的附加层,(3)顶部另一个安装了PHP-FPM和配置文件的层(只是一个示例)

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

关于你的具体问题:

如果不装载任何卷,它会将任何/部分/大部分/所有容器文件系统保留在RAM中吗

不,RAM中没有任何东西(除了通常的文件系统缓存)。所有这些都在覆盖文件系统中,使用AUFS、DeviceMapper或其他存储驱动程序安装这些文件系统

或者它会将一些数据写入磁盘,这意味着在这种情况下,它的速度与卷一样慢

通常,卷中的文件系统访问比覆盖文件系统中的性能更好。毕竟,卷(至少是基于主机的常规卷,不考虑添加网络存储卷的卷驱动程序)只是主机文件系统中常规目录的绑定装载,完全绕过文件系统层。与层文件系统相比,卷的性能(以及其他主题)在以下方面进行了研究:

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

建议阅读:文档中的部分。