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

用户头像
悟尘
关注
发布于: 2020 年 04 月 30 日



本文是《Docker必知必会系列》第五篇,原文发布于个人博客:悟尘纪

上一篇:Docker必知必会系列(四):Docker 网络原理、分类及容器互联配置



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



数据持久保存



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



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





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

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

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



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



关于挂载类型的更多详细信息:Manage data in Docker



挂载卷性能调优



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



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



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

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

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



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



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


相关文章





用户头像

悟尘

关注

产业转型创新实践者,资深区块链专家。 2019.09.05 加入

欢迎访问我的博客:http://lixl.cn

评论

发布
暂无评论
五、Docker 数据持久化存储与性能调优