Docker的那些事儿—Docker数据卷(一)(29)
上一篇:Docker的那些事儿—Docker数据管理(28)
数据卷是一个或多个容器专门指定绕过Union File System,为持续性或共享数据提供一些有用的功能:
(1)数据卷可以在容器间共享和重用。
(2)数据卷数据的改变是直接修改的。
(3)数据卷数据的改变不会被包括在容器中。
(4)数据卷是持续性的,直到没有容器使用它们。
数据卷操作
Docker启动的时候可以通过-v选项添加数据卷,实现将主机上的目录或者文件挂载到容器中。完整的参数为:
-v host-dir:container-dir:[rw|wo]
-v container-dir:[rw|wo]
-v volume-name:container-dir:[rw|wo]
其中,
host-dir:表示主机上的目录,如果不存在,Docker 会自动在主机上创建该目录。必须是绝对路径。
container-dir:表示容器内部对应的目录,如果该目录不存在,Docker 也会在容器内部创建该目录。
volume-name:表示卷名,如果该卷不存在,docker将自动创建。
rw|ro:用于控制volume的读写权限。
(1)docker run -itd -P -v /test:/data --name myhttp httpd
![](https://img.haomeiwen.com/i10839544/43b9ddaccef6defd.png)
![](https://img.haomeiwen.com/i10839544/551be2c1372c5e91.png)
在宿主机/test目录下创建test.txt文件,观察容器内/data目录下内容变化
![](https://img.haomeiwen.com/i10839544/33909d9b391f50de.png)
![](https://img.haomeiwen.com/i10839544/d54135e2d313ccf3.png)
docker container inspect myhttp查询Mounts参数如下:
![](https://img.haomeiwen.com/i10839544/1ed04fac34be3d07.png)
删除容器,宿主机上/test目录及内容未发生任何变化。
(2)docker run -itd -P -v /data --name myhttp httpd
![](https://img.haomeiwen.com/i10839544/03dce5469c5c27c3.png)
我们看到容器内出现了/data目录。那这一次又是宿主机上哪个目录挂载到/data下的呢?
我们使用docker volume ls查询,发现多了一个本地卷:f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee
使用docker volume inspect查询到如下的挂下点目录:
/var/lib/docker/volumes/f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee/_data
![](https://img.haomeiwen.com/i10839544/618b636207d355b0.png)
当在上述目录下创建test.txt文件后,容器内也查询到该新增文件。
![](https://img.haomeiwen.com/i10839544/353ef6fb7c3b4b13.png)
![](https://img.haomeiwen.com/i10839544/9e0d1e798a80d44a.png)
删除容器后,宿主机上的目录及内容也未发生任何变化。
(3)docker run -itd -P -v my_volume:/data --name myhttp httpd
![](https://img.haomeiwen.com/i10839544/527293d638396b89.png)
docker自动创建了卷:my_volume,并且这个卷对应的宿主机的挂载点是:
/var/lib/docker/volumes/my_volume/_data。这和第二种方式几乎一样,不同点在于未指定volume名是docker会在/var/lib/docker/volumes随机创建一个目录。
![](https://img.haomeiwen.com/i10839544/b15a0b745cdcea52.png)
docker container inspect myhttp查询Mounts参数如下:
![](https://img.haomeiwen.com/i10839544/d9e8d131eb1fd959.png)
对于docker数据卷的总结:
(1) 三种方式都可以将宿主机目录或者文件挂载到容器。
(2) Docker提供了docker volume命令专门对volume进行管理。对于第一种方式Type为bind,是无法使用docker volume进行管理的。我们也可以使用docker volume create命令创建volume。
(3) 删除容器是如果使用docker rm container将不会删除对应的Volume。如果想要删除可以使用docker rm -v container。另外也可以单独使用docker volume rm volume_name删除volume。
(4) 对于已运行的数据卷容器,不能动态的调整其卷的挂载。Docker官方提供的方法是先删除容器,然后启动时重新挂载。
下一篇:Docker的那些事儿—Docker数据卷(二)(30)
![](https://img.haomeiwen.com/i10839544/2b9141099687b820.png)