Docker的那些事儿

Docker的那些事儿—Docker数据卷(一)(29)

2018-03-20  本文已影响13人  sjyu_eadd

上一篇: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

在宿主机/test目录下创建test.txt文件,观察容器内/data目录下内容变化

docker container inspect myhttp查询Mounts参数如下:

删除容器,宿主机上/test目录及内容未发生任何变化。

(2)docker run -itd -P -v /data --name myhttp httpd

我们看到容器内出现了/data目录。那这一次又是宿主机上哪个目录挂载到/data下的呢?

我们使用docker volume ls查询,发现多了一个本地卷:f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee

使用docker volume inspect查询到如下的挂下点目录:

/var/lib/docker/volumes/f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee/_data

当在上述目录下创建test.txt文件后,容器内也查询到该新增文件。

删除容器后,宿主机上的目录及内容也未发生任何变化。

(3)docker run -itd -P -v my_volume:/data --name myhttp httpd

docker自动创建了卷:my_volume,并且这个卷对应的宿主机的挂载点是:

/var/lib/docker/volumes/my_volume/_data。这和第二种方式几乎一样,不同点在于未指定volume名是docker会在/var/lib/docker/volumes随机创建一个目录。

docker container inspect myhttp查询Mounts参数如下:

对于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)


上一篇 下一篇

猜你喜欢

热点阅读