Data Volumes的初衷是实现独立于容器的生命周期实现数据持久化,实现多个docker容器之间的数据持久化及共享,因此删除容器的时候不回删除卷,也不会对哪怕未被引用的卷作垃圾回收.
Volume在初始化的时候就会创建,由base image提供的卷中的数据会在此期间完成复制.
Docke-managed Volume
docker run --name b1 -it -v /data busybox
这个命令在容器中创建了一个data目录,并且这个目录内在宿主机上也有对应的路径:
/var/lib/docker/volumes/8cce4397f5ed1516742f8865bef532f8d5ce953347a0bf5a13ecf8bce8cfbb34/_data
执行:
docker inspect b1
可以在inspect到的信息config节点里找到这样的配置:
"Mounts": [
{
"Type": "volume",
"Name": "8cce4397f5ed1516742f8865bef532f8d5ce953347a0bf5a13ecf8bce8cfbb34",
"Source": "/var/lib/docker/volumes/8cce4397f5ed1516742f8865bef532f8d5ce953347a0bf5a13ecf8bce8cfbb34/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Bind-mount Volume
docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
再执行
docker inspect b2
来查看Mounts节点的配置
"Mounts": [
{
"Type": "bind",
"Source": "/data/volumes/b2",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
当我们关闭容器的时候,容器删除,而创建的宿主机上的卷依然存在.
多个容器挂载同一个Volume
实现多个容器间数据的同步与交互
和上面的操作类似.
如果环境允许,我们可以挂载一个nfs
docker支持复制其他容器的存储卷,也支持复制网络配置.
docker run -it --rm --name b3 --volumes-from b1 busybox:latest
~~完