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

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

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

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

数据持久保存

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

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

挂载的类型以及它们在Docker主机上的位置
  • volume(卷)存储在主机文件系统的一部分中,该文件系统由 Docker 管理/var/lib/docker/volumes/在 Linux 上)。非 Docker 进程不应修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方法。
  • bind mount(绑定挂载)可以存储在主机系统上的任何位置。它们甚至可能是重要的系统文件或目录。Docker 主机或 Docker 容器上的非 Docker 进程可以随时对其进行修改。
  • tmpfs挂载 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统中。

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

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

挂载卷性能调优

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

通过在 docker run -v--volume 的 option 中指定 cacheddelegated,可以显着提高 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

相关文章

  • 上一篇:Docker必知必会系列(四):Docker 网络原理、分类及容器互联配置
  • 下一篇:Docker必知必会系列(六):基于多阶段构建减小镜像体积降低复杂度

你可能感兴趣的:(五、Docker 数据持久化存储与性能调优)