docker run -d -v ~/htdocs:/usr/local/apache2/htdocs httpd
(2)这里的 /usr/local/apache2/htdocs 就是 Apache Server 存放静态文件的地方。mount 后,容器中 /usr/local/apache2/htdocs 里原有数据会被隐藏起来,取而代之的是 host $HOME/htdocs/ 中的数据。
注意:当我们 mount 一个目录时,如果更改宿主机目录里的内容,容器内对应的内容也会同步更新,不需要重启容器。
2,指定数据的读写权限
默认情况下 mount 的数据是可读可写的。我们可以添加 ro 参数设置成只读权限,此时:
在容器中无法对 bind mount 数据进行修改。
只有 host 有权修改数据。
3,bind mount 单个文件
如果只需要向容器添加文件,不希望覆盖整个目录,可以使用 bind mount 单个文件。下面样例,我们将一个 html 文件添加到 apache 中,同时也保留了容器原有的数据后。
注意:如果我们 mount 的是单个文件的话,不同于 mount 整个目录,运行后如果宿主机的这个文件进行了修改,容器内对应的文件内容是不会同步变化的,必须重启容器才会更新。
docker run -d -v ~/htdocs/index.html:/usr/local/apache2/htdocs/new_index.html httpd
二、docker managed volume
1,基本用法
(1)docker managed volume 和 bind mount 在使用上最大的区别是不需要指定 mount 源,指明 mount point 就好。
(2)同样以 httpd 容器为例。我们通过 -v 告诉它需要一个 data volume,并将其 mount 到 /usr/local/apache2/htdocs。
docker run -d -v /usr/local/apache2/htdocs httpd
(3)上面执行后,docker 就会自动在 host 的 /var/lib/docker/volumes 下生成一个目录,这个目录就是 mount 源。同时还会将容器里中 /usr/local/apache2/htdocs 数据复制到 mount 源中。
2,查找 data volume 的具体位置
(1)当容器申请 mount docker managed volume 时,docker 会在 /var/lib/docker/volumes 下生成一个目录作为 mount 源。要找到它我们先执行 docker inspect 查看容器配置信息:
(2)在 Mounts 这部分的信息中会显示容器当前所使用的所有 data volume,包括 bind mount 和 docker managed volume。
(3)我们进这个文件夹可以看到,容器里中 /usr/local/apache2/htdocs 数据确实已经复制到这个 mount 源中。
附:bind mount 与 docker managed volume 的区别
这两种 data volume 实际上都是使用 host 文件系统的中的某个路径作为 mount 源。它们不同之处在于: