挂载数据卷类似于mount命令,将一个目录作为一个单独的卷挂载到容器中,也可以将多个容器共享一个卷,方便了容器之间的数据共享
在容器中挂载数据卷
使用busybox镜像,创建一个数据卷挂载到容器的/data目录
1 |
docker run --name web1 -it -v /data busybox |
在另一个终端中使用以下命令查看容器和宿主机挂载目录
1 |
docker inspect --format='{{range.Mounts}}{{.Source}} {{.Destination}}{{end}}' web1 |
/var/lib/docker/volumes/01a269c6a100482243ed9237809e17249c2e6e49144152132158725128fad94e/_data /data
此时我们可以看到宿主机的挂载目录
在/var/lib/docker/volumes/01a269c6a100482243ed9237809e17249c2e6e49144152132158725128fad94e/_data下,容器的挂载目录是/data
注意:-v指定的容器目录必须是绝对路径
挂载宿主机目录作为容器的数据卷(常用)
1 |
docker run --name web2 -it -v /data/volumes/web2:/data busybox |
冒号前面的/data/volumes/web2是宿主机的目录,冒号后面的/data为容器中的目录,该目录会在容器中自动进行创建
通过该方式挂载的数据卷默认权限是读写,如果只需要只读权限,则
1 |
docker run --name web2 -it -v /data/volumes/web2:/data:ro busybox |
注意:即使容器被删除,宿主机的目录也不会消失
容器之间共享数据卷
指在多个容器之间共享一份存储数据,类似于NFS功能
首先需要创建一个基础的容器命名为db1,并将其存储卷挂载到/data,为了演示效果,我这里使用-it选项,以交互式模式运行容器
1 |
docker run --name db1 -it -v /data busybox |
1 |
echo "this is db1" > data/demo.html |
然后在新的终端中启动第二个容器命名为db2,使用--volumes-from参数挂载db1容器的存储卷
1 |
docker run --name db2 -it --volumes-from db1 busybox |
此时在db2容器中可以看到db1存储卷data/的内容,并且在db2中修改增加删除data/下的内容,db1也会同步生效
注意:db1容器即使在停止的状态下,--volumes-from参数也同样有效
原文链接:Docker之数据卷管理,转载请注明来源!