docker managed volume 与
bind mount
在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了。还是以 httpd 容器为例:
我们通过
-v
告诉 docker 需要一个 data volume,并将其 mount 到 /usr/local/apache2/htdocs。那么这个 data volume 具体在哪儿呢?
这个答案可以在容器的配置信息中找到,执行
docker inspect
命令:
docker inspect 21accc2ca072
......
"Mounts": [
{
"Name": "f4a0a1018968f47960efe760829e3c5738c702533d29911b01df9f18babf3340",
"Source": "/var/lib/docker/volumes/f4a0a1018968f47960efe760829e3c5738c702533d29911b01df9f18babf3340/_data",
"Destination": "/usr/local/apache2/htdocs",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
......
docker inspect
的输出很多,我们感兴趣的是
Mounts
这部分,这里会显示容器当前使用的所有 data volume,包括 bind mount 和 docker managed volume。
Source
就是该 volume 在 host 上的目录。
原来,每当容器申请 mount docker manged volume 时,docker 都会在
/var/lib/docker/volumes
下生成一个目录(例子中是 "/var/lib/docker/volumes/f4a0a1018968f47960efe760829e3c5738c702533d29911b01df9f18babf3340/_data ),这个目录就是 mount 源。
下面继续研究这个 volume,看看里面有些什么东西: