存储概括
- Storage driver
- Data Volume(无法指定容量)
- bind mount(挂载到容器指定host目录)
- docker managed volume(挂载到容器不指定host目录)
- 数据共享
- 容器与host共享(host目录挂载到容器)
- 容器与容器共享 (同个host目录,挂载到多个容器)
- data-packed volume container(将数据打包到容器内)
bind mount
1、Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)
2、容器可以读写 volume 中的数据
3、volume 数据可以被永久的保存,即使使用它的容器已经销毁(所以适合持久化的数据)
注意:bind mount 时还可以指定数据的读写权限,默认是可读可写,可指定为只读
image.png
docker managed volume
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了
查看挂载信息,Source 就是该 volume 在 host 上的目录,每当容器申请 mount docker manged volume 时,docker 都会在/var/lib/docker/volumes 下生成一个目录
# docker inspect 21accc2ca072
......
"Mounts": [
{
"Name": "f4a0a1018968f47960efe760829e3c5738c702533d29911b01df9f18babf3340",
"Source": "/var/lib/docker/volumes/f4a0a1018968f47960efe760829e3c5738c702533d29911b01df9f18babf3340/_data",
"Destination": "/usr/local/apache2/htdocs",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
......
对比
bind mount | docker managed volume | |
---|---|---|
volume 位置 | 可任意指定 | /var/lib/docker/volumes/... |
对已有mount point 影响 | 隐藏并替换为 volume | 原有数据复制到 volume |
是否支持单个文件 | 支持 | 不支持,只能是目录 |
权限控制 | 可设置为只读,默认为读写权限 | 无控制,均为读写权限 |
移植性 | 移植性弱,与 host path 绑定 | 移植性强,无需指定 host 目录 |
data-packed volume container
volume container:专门为其他容器提供volume的容器,它提供的卷可以是 bind mount,也可以是 docker managed volume
docker create --name vc_data -v /opt:/opt -v /tmp busybox
# docker inspect vc_data
......
"Mounts": [
{
"Name": "1e3597380f235747ef0c9ea92db64f6783c224ea8d57754153611a4a2284dc03",
"Source": "/var/lib/docker/volumes/1e3597380f235747ef0c9ea92db64f6783c224ea8d57754153611a4a2284dc03/_data",
"Destination": "/tmp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Source": "/opt",
"Destination": "/opt",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
......
其他容器可以通过 --volumes-from 使用 vc_data 这个 volume container:
image.png
与 bind mount 相比,不必为每一个容器指定 host path,所有 path 都在 volume container 中定义好了,容器只需与 volume container 关联,实现了容器与 host 的解耦
网友评论