Docker 卷¶
卷(volume)是Docker容器数据持久化的首选机制,虽然 Docker 捆绑挂载 也能够实现数据持久化,但是bind mounts依赖于主机的目录结构和操作系统,而volume则完全由Docker管理,具有以下优点:
卷(volume)比 Docker 捆绑挂载 更容易备份和迁移
可以通过Docker CLI命令或者Docker API来管理卷
卷在Linux和Windows都是可以使用的
卷能够更安全地在不同容器间共享
卷驱动程序允许将卷存储在远程主机或者云厂商上,并且提供卷内容加密或提供其他功能
新卷的内容可以由容器预先填充
Docker Desktop 的卷性能比 macOS 和 Windows Atlas 主机上的 Docker 捆绑挂载 性能更好
此外,和容器中的可写层中持久化数据相比,卷通常是更好的选择:
卷不会增加容器的大小
卷的内容和容器的生命周期无关,可以更容易保持
卷(Volumes)使用 rprivate
绑定传播(bind propagation),并且卷的这个 “绑定传播” 是不可配置的

备注
如果追求高性能且不需要持久化数据,可以考虑采用 Docker内存文件系统(tmpfs)挂载
选择 -v
或 --mount
参数¶
总而言之, --mount
参数更为明确和冗长。最大的不同是在语法上, -v
参数需要将所有选项组合在一个字段中,而 --mount
参数则将选项分离开。
如果需要指定卷驱动程序选项,则必须使用 –mount
-v
或--volume
: 由三个字段组成,以冒号字符 (:
) 分隔。 字段的顺序必须正确,每个字段的含义不是很明显在命名卷(named volumes)的情况下,第一个字段是卷的名称,并且在给定的主机上是唯一的。 对于匿名卷,省略第一个字段。
第二个字段是文件或目录在容器中的挂载路径
第三个字段是可选的,并且是以逗号分隔的选项列表,例如
ro
--mount
: 由多个键值对组成,以逗号分隔,每个键值对由一个<key>=<value>
元组组成。--mount
语法比-v
或--volume
更冗长,但是键的顺序无需关注,且标记的值更容易理解挂载类型(
type
): 可以是bind
( Docker 捆绑挂载 )、volume ( Docker 卷 )或 tmpfs ( Docker内存文件系统(tmpfs)挂载 )挂载源(
srouce
): 对于命名卷(named volumes),表示卷的名称。 对于匿名卷,则省略此字段。这里source
可以简写为src
挂载目标(
destination
): 表示将文件或目录挂载到容器内部的路径。这里destination
可以简写为dst
,通常也可以用target
(target
是比较常用的方法)只读(
readonly
)选项: (如果存在)会使绑定挂载以只读方式挂载到容器中。通常readonly
可以简写为ro
卷选项(
volume-opt
): 这个卷选项可以多次使用,来配置多个键值对表示配置选项