Bootstrap

五、Docker 数据持久化存储与性能调优

本文是《》第五篇,原文发布于个人博客:

上一篇:

数据持久化存储与性能调优

数据持久保存

默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着当该容器不再存在时,数据也将丢失。

为了让数据脱离容器持久保存,Docker 提供了两个选项来将文件持久存储在主机中:  和  。如果您在 Linux 上运行 Docker,则还可以使用 tmpfs 挂载。如果您在 Windows 上运行 Docker,则还可以使用命名管道

  • volume(卷)存储在主机文件系统的一部分中,该文件系统由 Docker 管理(在 Linux 上)。非 Docker 进程不应修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方法。

  • bind mount(绑定挂载)可以存储在主机系统上的任何位置。它们甚至可能是重要的系统文件或目录。Docker 主机或 Docker 容器上的非 Docker 进程可以随时对其进行修改。

  • 挂载 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统中。

 和  都可以使用  或  标志安装到容器中,但是两者的语法略有不同。

关于挂载类型的更多详细信息:

挂载卷性能调优

在 macOS(和其他非 Linux 平台)上,保证容器内和主机文件一致性的开销很大。然而,在许多情况下,容器与主机之间不需要完美的一致性。区分不同情况可以显着提高性能。

通过在 ,  的 option 中指定  或 ,可以显着提高 Docker Desktop for Mac 上已装载卷访问的性能。您可以根据情况调整所需的一致性级别:

  • :默认值,完美的一致性,即主机和容器实时一致。

  • :主机具有权威性。容器执行的写操作对主机是立即可见的,但是在主机上执行的写操作可能不会立即反应在容器内。

  • :容器的内容具有权威性。提供最弱保证,由容器执行的写操作可能不会立即反映在主机文件系统上,提供的性能要比其他配置好得多。

为每个挂载卷独立设置缓存策略,例如:

docker run \
    -v /Users/lixl.cn/project:/project:cached \
    -v /host/another-path:/mount/another-point:consistent \
    alpine command

相关文章

  • 上一篇:

  • 下一篇: