Docker中容器数据卷(Data Volume)和数据管理详解

2020-06-17 06:40:29易采站长站整理

使用数据卷容器

创建数据卷容器后,我们可以通过

--volumes-from
选项,将一个数据容器挂载到其它容器:


$ sudo docker run -d --volumes-from dbstore --name db1 training/postgres

也可以在多个容器间共享。如,挂载到另一个容器:


$ sudo docker run -d --volumes-from dbstore --name db2 training/postgres

这时,如果training/postgres镜像内有名/dbdata的目录,则会从dbstore容器挂载卷,并会隐藏training/postgres镜像中/dbdata下的文件。最终只有dbstore容器中的文件可见。

还可以扩展挂载链,从已经存在的dbstore容器(如:db1、db2)来挂载卷:


$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

这种情况下,如果移除己挂载卷的容器,无论是最初的dbstore容器,还是其后的db1或db2容器,卷都不会被移除。要将卷从硬盘上移除,必须使用

docker rm -v
命令删除最后一个引用了该卷的容器。

三、备份、恢复与迁移数据卷

除上述操作外,数据卷的常用操作还有数据卷备份、恢复、合并操作。以下是一些常用操作:

3.1 备份数据卷

在前面介绍数据卷容器时,我们创建了一个名为dbdata容器,并在容器中创建了一个/dbdata的数据卷。接下来,可以在创建容器使用

--volumes-from
参数来挂载这个数据卷,并对数据进行备份:


$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

在这个操作中,我们通过ubuntu镜像创建了一个容器,创建容器时通过

--volumes-from
参数共享了数据卷容器中的数据,并将当前目录($(pwd) )挂载到了数据卷中。容器运行后,使用tar命令对数据卷进行了备份。

命令执行结束后,容器就会停止,之后就可以在本地当前操作目录下找到所备份的数据。

3.2 备份数据卷

数据备份后,可以在创建容器恢复备份数据到容器内的数据卷中,从而实现数据的迁移。

首先,创建并运行容器并添加一个数据卷:


$ sudo docker run -i -t -v /dbdata --name dbdata2 ubuntu /bin/bash

然后通过

tar
命令恢复备份数据:


$ sudo docker run --rm --volumes-from dbdata2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"