6.2 数据卷容器

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载

首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata

$ docker run -itd --name dbdata -v /dbdata ubuntu:18.04

$ docker volume ls
DRIVER    VOLUME NAME
local     9de99f0c06486e7bd160819254adc1e244d496cb10513c1ad46b652084afb222

$ sudo ls /var/lib/docker/volumes
9de99f0c06486e7bd160819254adc1e244d496cb10513c1ad46b652084afb222

根据上面的实验,可以发现,当使用 -v 选项只指定一个路径时,该路径指的是容器中的路径,宿主机的路径位于/var/lib/docker/volumes。

整个过程相当于:首先使用docker volume create创建一个volume,然后将volume绑定到/dbdate路径上。

当使用 -v source:destination这种明确指定源路径的写法时,则并不会创建volume。

然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:

$ docker run -itd --name db1 --volumes-from dbdata ubuntu:18.04
$ docker run -itd --name db2 --volumes-from dbdata ubuntu:18.04

此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录,三个容器任何一方在该目录下的写入,其他容器都可以看到。

可以多次使用--volumes-from参数来从多个容器挂载多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷。

使用--volumes-from参数所指定的容器自身并不需要保持在运行状态

如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动删除。

如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。

Last updated