在 Docker 中,卷(Volume)是保存容器生成和使用数据的常用方式,也是实现数据持久化的推荐方案。相比依赖宿主机目录结构和操作系统的绑定挂载,卷由 Docker 统一管理,在使用、迁移和维护方面通常更方便。
卷的优势主要体现在以下几个方面:
- 更便于备份与迁移,适合在不同环境之间转移数据。
- 可以通过 Docker CLI 或 Docker API 进行统一管理。
- 同时适用于 Linux 容器和 Windows 容器。
- 能够在多个容器之间以更安全的方式共享数据。
- 支持卷驱动,可将数据存储到远程主机或云服务中,并可扩展加密等能力。
- 新建卷时可以通过容器预先写入初始内容。
- 在 Docker Desktop 环境下,卷通常比 Mac 和 Windows 主机上的绑定挂载具有更好的性能。
此外,与将数据直接写入容器的可写层相比,卷通常是更合适的选择。因为卷中的内容独立于容器生命周期存在,不会随着容器删除而自动消失,同时也不会增加容器本身的可写层负担。

如果容器产生的是无需长期保留的临时状态数据,可以考虑使用 tmpfs 挂载。这样既能避免将数据持久写入存储介质,也有助于减少对容器可写层的写操作,从而提升一定的运行效率。
选择 -v 还是 –mount
在挂载卷时,Docker 提供了 -v(或 --volume)以及 --mount 两种写法。总体来说,--mount 的表达更清晰、结构也更明确;而 -v 更简洁,但所有参数都集中在一个字段中,可读性相对较弱。
两者最主要的区别在于:-v 使用冒号分隔多个字段,而 --mount 采用逗号分隔的键值对形式。如果需要指定卷驱动相关参数,则必须使用 --mount。
-v 或 –volume 的语法
-v 或 --volume 由三个部分组成,使用冒号(:)分隔,并且顺序不能颠倒。
- 第一个字段:卷名称。对于命名卷,这里填写卷名,并且该名称在当前宿主机上应唯一;如果是匿名卷,则这一部分可以省略。
- 第二个字段:容器内的挂载路径,即文件或目录在容器中的位置。
- 第三个字段:可选参数,多个选项之间用逗号分隔,例如
ro,表示只读挂载。
–mount 的语法
--mount 由多个键值对组成,键与值之间使用 = 连接,不同参数之间使用逗号分隔。虽然写法更长,但每个配置项的含义更直观,而且参数顺序通常不重要。
type:挂载类型,可选值包括bind、volume和tmpfs。在卷的场景下,这里应为volume。source或src:挂载源。对于命名卷,这里填写卷名称;如果使用匿名卷,则可以省略。destination、dst或target:容器内的目标路径,也就是卷挂载到容器中的位置。readonly:如果设置该选项,卷将以只读方式挂载到容器中。volume-opt:卷驱动参数,可多次指定,每次传入一个键值对,用于扩展卷的配置能力。
如果你更看重配置的明确性和可维护性,建议优先使用 --mount;如果只是进行简单挂载,-v 也足以满足大多数日常场景。
