首页 > 解决方案 > 对于编写繁重的操作,docker 卷是否比直接绑定目录更好?

问题描述

通过阅读 docker 文档,我发现了这段话(位于此处):

块级存储驱动程序,例如devicemapperbtrfs和 ,zfs对于写入繁重的工作负载(尽管不如 Docker 卷)表现更好。

那么这是否意味着在期待大量持久写入时应该始终使用 docker 卷?

标签: linuxperformancedockerdocker-volume

解决方案


容器本地文件系统从不存储持久数据,因此如果您希望数据在容器退出后继续存在,您别无选择,只能将某些内容挂载到容器中。您引用的“块级存储驱动程序”讨论了有关如何存储图像和容器的特定安装时选项,并且与任何特定的卷或绑定安装实现无关。

就性能而言,我的一般预期是磁盘 I/O 的延迟将远远超过任何特定实现的任何开销。在没有对任何特定实现进行基准测试的情况下,在本机 Linux 主机上,我希望命名卷、绑定挂载和对容器文件系统的写入或多或少相似。

从编程的角度来看,与尝试优化 Docker 级别相比,弄清楚如何减少磁盘访问(例如,通过将相关的数据库请求组合到单个事务中)可能会获得更好的长期性能改进贮存。

一个突出的例外是MacOS 上的绑定挂载已知非常慢,如果您的工作负载涉及大量磁盘访问,则应避免使用它们。(这包括读取和写入,还包括一些解释语言,它们希望在启动时读取每个可能的源文件。)如果您正在管理数据库存储之类的东西,无论如何您都无法直接访问文件,请使用命名卷。对于您的应用程序代码,COPY将其转换为图像中的一个Dockerfile并且不要在运行时覆盖它。


推荐阅读