linux - 对于编写繁重的操作,docker 卷是否比直接绑定目录更好?
问题描述
通过阅读 docker 文档,我发现了这段话(位于此处):
块级存储驱动程序,例如
devicemapper
、btrfs
和 ,zfs
对于写入繁重的工作负载(尽管不如 Docker 卷)表现更好。
那么这是否意味着在期待大量持久写入时应该始终使用 docker 卷?
解决方案
容器本地文件系统从不存储持久数据,因此如果您希望数据在容器退出后继续存在,您别无选择,只能将某些内容挂载到容器中。您引用的“块级存储驱动程序”讨论了有关如何存储图像和容器的特定安装时选项,并且与任何特定的卷或绑定安装实现无关。
就性能而言,我的一般预期是磁盘 I/O 的延迟将远远超过任何特定实现的任何开销。在没有对任何特定实现进行基准测试的情况下,在本机 Linux 主机上,我希望命名卷、绑定挂载和对容器文件系统的写入或多或少相似。
从编程的角度来看,与尝试优化 Docker 级别相比,弄清楚如何减少磁盘访问(例如,通过将相关的数据库请求组合到单个事务中)可能会获得更好的长期性能改进贮存。
一个突出的例外是MacOS 上的绑定挂载已知非常慢,如果您的工作负载涉及大量磁盘访问,则应避免使用它们。(这包括读取和写入,还包括一些解释语言,它们希望在启动时读取每个可能的源文件。)如果您正在管理数据库存储之类的东西,无论如何您都无法直接访问文件,请使用命名卷。对于您的应用程序代码,COPY
将其转换为图像中的一个Dockerfile
并且不要在运行时覆盖它。
推荐阅读
- java - SXSSFWorkbook 写入 xlsm 文件
- c# - 使用 C# 为 AD 中的现有帐户设置新的 AccountExpirationDate
- elasticsearch - 当值很大时,Elasticsearch 在聚合中返回错误的总和
- jmeter - Jmeter - 如何在结果 csv 文件输出中获取可调用语句的行数
- javascript - 服务工作者。如何在低连接中使用缓存
- azure - 使用 Azure 自动化扩展 Azure 节点池
- java - 无法读取 Excel 中的所有行 - Java
- google-chrome-extension - 从内部网络服务器更新 (Windows)
- mongodb - 如何从原始数据库中的所有文档中减去特定数字
- ios - 为什么没有为 iOS Firebase 动态链接启用通用链接?