docker-数据共享-mount方式

这种方式就是把主机上的目录或者文件mount到容器里使用, 主要两种方式:

bind mount

就是在创建容器的时候,通过参数 -v 来指定, 格式:<host path>:<container path>。

1
# docker run -d -p 80:80 -v ~/host_docs:/usr/local/apache2/host_docs httpd

这样就把主机上 ~/host_docs 的目录 mount 到容器目录 /usr/local/apache2/host_docs目录, 在host的~/host_docs 目录里写东西会直接在容器里体现. 这里是绝对路径,如果不指定 ~/, 则会在主机/var/lib/docker/volumes/ 目录下创建一个host_docs目录,然后把目录/var/lib/docker/volumes/host_docs/_data mount 到容器的 /usr/local/apache2/host_docs
注意:如果/usr/local/apache2/host_docs 目录本来有数据,则会隐藏,~/hosts_docs的数据会显示,就像linux本身的mount一样。

1
docker inspect 容器ID 可以查看该容器mount的相关信息

docker managed volume

也是通过 -v 来指定,但不需要<host path>:

1
2
3
# docker run -d -p 80:80 -v /usr/local/apache2/host_docs httpd
# docker ps # 查看容器
# docker inspect 容器ID #获取该容器的信息

在容器信息里,mount部分看发现,Source 指向 /var/lib/docker/volumes/容器长ID/_data 目录.

对比

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

容器与host共享数据

bind mount 方式:直接往容器mount的目录(/usr/local/apache2/host_docs)写数据,在host就能查看
docker managed volume 方式:,除了bind mount 方式外,还可以通过 docker cp 命令

1
docker cp ~/host_docs/hello.txt 容器ID:/usr/local/apache2/host_docs

一个目录可以被挂载到多个容器里,所以这样就能实现容器之间共享数据.

转自:docker-数据共享-mount方式