volumes是Docker数据持久化机制。bind mounts依赖主机目录结构,volumes完全由Docker管理。Volumes有以下优点: - Volumes更容易备份和移植。
- 可以通过Docker CLI或API进行管理
- Volumes可以无区别的工作中Windows和Linux下。
- 多个容器共享Volumes更安全。
- Volume驱动可以允许你把数据存储到远程主机或者云端,并且加密数据内容,以及添加额外功能。
- 一个新的数据内容可以由容器预填充。
而且,volumes不会增加容器的大小,生命周期独立与容器。 
如果你的容器产生不需要持久化数据,请使用tmpfs mount方式,可以避免容器的写入层数据写入。 Volumes use rprivate bind propagation, and bind propagation is not configurable for volumes.(不理解什么意思)
选择使用 -v还是—mount起初,-v或者—volume用于独立容器,--mount用于 swarm services。然而,从 Docker 17.06开始,也可是使用 --mount用于独立容器。—mount命令更精准详细。-v将选项进行了合并。使用—mount。 如果你需要制定volume驱动选项,你必须使用 —mount。 - -v或者--volume:由3部分参数组成,使用“:”间隔。顺序不能颠倒。
- 第一个部分是volumes名字,在宿主机上具有唯一性。匿名卷名字系统给出。
- 第二部分是挂载到容器里的文件或文件夹路径。
- 第三部分是可选项列表分隔符,例如“or”,这些可选项在下面会讨论。
- —mount:由多个键值对组成,<key>=<value>。—mount要比-v或者--volume命令更长,但是更容易理解。
- type,可以是bind,volume或者tmpfs。这篇文章主要讨论volumes,所以type一直使用volume.
- source,volumes的名字,匿名volume可以省略。source可缩写为src.
- destination,挂载到容器中的文件或目录路径。可也缩写为dst或者使用target。
- readonly,指定挂载在容器中为只读。
- volume-opt,可选属性,可以多次使用。
下面是—mount和-v的例子。
-v和—mount的不同行为与bind mounts不同,对于—mount和-v所有的选项都可以使用。 当使用volumes服务时,只支持—mount. 创建和管理volumes 不像bind mount,你可以在容器外创建和管理volumes。 创建一个volume: $ docker volume create my-vol 显示所有volumes $ docker volume lslocal my-vol 查看volumes $ docker volume inspect my-vol[ { "Driver" : "local" , "Labels" : {} , "Mountpoint" : "/var/lib/docker/volumes/my-vol/_data" , "Name" : "my-vol" , "Options" : {} , "Scope" : "local" }] 删除一个volume: $ docker volume rm my-vol
启动一个带volume的容器如果你启动一个带有volume容器,volume还没有创建,Docker会为你创建。下面的例子挂载myvol2到容器中的/app/下。 下面的例子-v和—mount结果是一样的。 —mount: $ docker run -d / --name devtest / --mount source = myvol2,target = /app / nginx:latest -v: |