如果你使用volumes的方式挂载了一个空的volume到某个容器的一个非空目录中,则这个非空目录中已存在的内容会被拷贝到这个volume中。类似的,如果在启动容器时指定了一个不存在的volume,一个空的volume会被自动创建;
如果使用bind mounts的方式挂载,或者用volumes的方式挂载了一个非空的volume到容器的一个非空目录中,则容器中这个非空目录下的内容将暂时被挂载过来的volume中的内容所覆盖(并未被删除),当取消挂载后,容器中那个非空目录中的文件仍然存在。就像在linux下的/mnt目录下如果存在一些文件,在把USB挂载到/mnt时,在/mnt下就只能看到USB中的内容而看不见原先的文件,当取消USB挂载后,再进入/mnt就可以看见原先的文件了。
选择使用 -v还是--mount
起初,-v或者--volume用于独立容器,--mount用于swarm services。然而,从Docker 17.06开始,也可是使用--mount用于独立容器。—mount命令更精准详细。-v将选项进行了合并。使用--mount。
如果你需要制定volume驱动选项,你必须使用 --mount。
-v或者--volume:由3部分参数组成,使用“:”间隔。顺序不能颠倒。
第一个部分是volumes名字,在宿主机上具有唯一性。匿名卷名字系统给出。
第二部分是挂载到容器里的文件或文件夹路径。
第三部分是可选项列表分隔符,例如“or”,这些可选项在下面会讨论。
—mount:由多个键值对组成,=。—mount要比-v或者--volume命令更长,但是更容易理解。
type,可以是bind,volume或者tmpfs。这篇文章主要讨论volumes,所以type一直使用volume.
source,volumes的名字,匿名volume可以省略。source可缩写为src.
destination,挂载到容器中的文件或目录路径。可也缩写为dst或者使用target。
readonly,指定挂载在容器中为只读。
volume-opt,可选属性,可以多次使用。
-v和--mount的不同行为
与bind mounts不同,对于—mount和-v所有的选项都可以使用。
当使用volumes服务时,只支持--mount.
创建和管理volumes
不像bind mount,你可以在容器外创建和管理volumes。
创建一个volume:
$ docker volume create my-vol
显示所有volumes