6.2 数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。

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


  1. $ docker run -it -v /dbdata --name dbdata ubuntu
  2. root@3ed94f279b6f:/#

查看/dbdata目录:


  1. root@3ed94f279b6f:/# ls
  2. bin boot dbdata dev etc home lib lib64 media mnt opt proc root run
  3. sbin srv sys tmp usr var

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


  1. $ docker run -it --volumes-from dbdata --name db1 ubuntu
  2. $ docker run -it --volumes-from dbdata --name db2 ubuntu

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

例如,在dbdata容器中创建一个test文件,如下所示:


  1. root@3ed94f279b6f:/# cd /dbdata
  2. root@3ed94f279b6f:/dbdata# touch test
  3. root@3ed94f279b6f:/dbdata# ls
  4. test

在db1容器内查看它:


  1. $ docker run -it --volumes-from dbdata --name db1 ubuntu
  2. root@4128d2d804b4:/# ls
  3. bin boot dbdata dev etc home lib lib64 media mnt opt proc root run
  4. sbin srv sys tmp usr var
  5. root@4128d2d804b4:/# ls dbdata/
  6. test

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

6.2 数据卷容器 - 图1注意

使用—volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。

如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm-v命令来指定同时删除关联的容器。

使用数据卷容器可以让用户在容器之间自由地升级和移动数据卷。具体的操作将在下一节中讲解。