》一文中介绍了 docker 数据卷(volume) 的基本用法。随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强。本文将在前文的基础上介绍 docker 数据卷的原理及一些高级用法。如果您想先了解 docker 数据卷的基本概念与用法,请先移步。
其生存周期独立于容器的生存周期。
create 创建数据卷inspect 显示数据卷的详细信息 ls 列出所有的数据卷prune 删除所有未使用的 volumes,并且有 -f 选项rm 删除一个或多个未使用的 volumes,并且有 -f 选项
type 指定挂载方式,我们这里用到的是 volume,其实还可以有 bind 和 tmpfs。volume-driver 指定挂载数据卷的驱动程序,默认值是 local。source 指定挂载的源,对于一个命名的数据卷,这里应该指定这个数据卷的名称。在使用时可以写 source,也可以简写为 src。destination 指定挂载的数据在容器中的路径。在使用时可以写 destination,也可以简写为 dst 或 target。readonly 指定挂载的数据为只读。volume-opt 可以指定多次,用来提高更多的 mount 相关的配置。
- -- type=volume,source=hello,target=/world ubuntu /bin/bash
$ docker plugin --grant-all-permissions vieux/sshfs
docker volume create --driver vieux/-o sshcmd=nick@.:/home/nick/-o password=
docker run ----- type=volume,volume-driver=vieux/sshfs,source=mysshvolume,target=//bin/bash
- --name testcon -- type=volume,target=/world ubuntu /bin/bash
(,,,MS_BIND,NULL)
/data
VOLUME 指令不能挂载主机中指定的目录。这是为了保证 Dockerfile 的可一致性,因为不能保证所有的宿主机都有对应的目录。在 Dockerfile 中使用 VOLUME 指令之后的代码,如果尝试对这个数据卷进行修改,这些修改都不会生效!下面是一个这样的例子:
chown -R nick:nick /data
/data
touch /data/test.txt && chown -R nick:nick /data && /bin/bash