gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:09:17 26 4
gpt4 key购买 nike

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

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

最佳答案

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

enter image description here

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

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

当你从一个镜像启动一个新容器时,一个新的 per-container 层被添加到现有的镜像层中。该层将包含写入容器本身(到非卷目录)中的所有更改。

关于您的具体问题:

If you don't mount any volumes, would it keep any/some/most/all of the container filesystem in RAM?



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

Or does it write some amount of it to disk, meaning it would be just as slow as a volume in this case?



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

AUFS introduces significant overhead which is not surprising since I/O is going through several layers, [...]. Applications that are filesystem or disk intensive should bypass AUFS by using volumes. [...] Although containers themselves have almost no overhead, Docker is not without performance gotchas. Docker volumes have noticeably better performance than files stored in AUFS.

关于docker - Docker 容器的非卷数据如何存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com