这种方式就是把主机上的目录或者文件mount到容器里使用, 主要两种方式:
bind mount
就是在创建容器的时候,通过参数 -v 来指定, 格式:<host path>:<container path>。
这样就把主机上 ~/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一样。
docker managed volume
也是通过 -v 来指定,但不需要<host path>:
在容器信息里,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 命令
一个目录可以被挂载到多个容器里,所以这样就能实现容器之间共享数据.