docker managed volume - 每天5分钟玩转 Docker 容器技术(40)

网友投稿 658 2023-03-08

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

docker managed volume - 每天5分钟玩转 Docker 容器技术(40)

我们通过 -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,看看里面有些什么东西:

volume 的内容跟容器原有 /usr/local/apache2/htdocs 完全一样,这是怎么回事呢?

这是因为:如果 mount point 指向的是已有目录,原有数据会被复制到 volume 中。

但要明确一点:此时的 /usr/local/apache2/htdocs 已经不再是由 storage driver 管理的层数据了,它已经是一个 data volume。我们可以像 bind mount 一样对数据进行操作,例如更新数据:

简单回顾一下 docker managed volume 的创建过程:

容器启动时,简单的告诉 docker "我需要一个 volume 存放数据,帮我 mount 到目录 /abc"。

docker 在 /var/lib/docker/volumes 中生成一个随机目录作为 mount 源。

如果 /abc 已经存在,则将数据复制到 mount 源,

将 volume mount 到 /abc

除了通过 docker inspect 查看 volume,我们也可以用 docker volume 命令:

目前,docker volume 只能查看 docker managed volume,还看不到 bind mount;同时也无法知道 volume 对应的容器,这些信息还得靠docker inspect。

我们已经学习了两种 data volume 的原理和基本使用方法,下面做个对比:

相同点:两者都是 host 文件系统中的某个路径。

不同点:

bind mountdocker managed volume
volume 位置可任意指定/var/lib/docker/volumes/...
对已有mount point 影响隐藏并替换为 volume原有数据复制到 volume
是否支持单个文件支持不支持,只能是目录
权限控制可设置为只读,默认为读写权限无控制,均为读写权限
移植性移植性弱,与 host path 绑定移植性强,无需指定 host 目录

bind mountdocker managed volumevolume 位置可任意指定/var/lib/docker/volumes/...对已有mount point 影响隐藏并替换为 volume原有数据复制到 volume是否支持单个文件支持不支持,只能是目录权限控制可设置为只读,默认为读写权限无控制,均为读写权限移植性移植性弱,与 host path 绑定移植性强,无需指定 host 目录

下节讨论如何通过 data volume 实现容器与 host,容器与容器共享数据。

上一篇:如何共享数据?- 每天5分钟玩转 Docker 容器技术(41)
下一篇:Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~