在 Docker 容器之间如果需要共享数据,可以创建一个数据卷容器来实现,并且可以方便的通过数据卷容器来备份、恢复、迁移数据。

创建数据卷容器

创建一个名为:dbdata 的数据卷容器;设置挂载点为 /vdata

1
$ sudo docker run -d -v /vdata --name dbdata alpine sh

数据卷容器是一个普通的 Docker 容器,可以不需要启动。

使用数据卷容器

使用命令 --volumes-from 创建挂载数据卷容器 dbdata 的容器:db1、db2。

1
2
3
$ sudo docker run -it --volumes-from dbdata --name db1 alpine sh
$ sudo docker run -it --volumes-from dbdata --name db1 alpine sh

在容器 db1 的挂载目录 /vdata 目录下,创建文件 1.txt 等测试数据,查看容器 db2 的挂载目录 /vdata 目录,就可以看到创建的文件数据了。

备份数据卷数据

使用一个临时容器,完成备份数据容器操作。

1
$ sudo docker run --rm --volumes-from dbdata -v $(pwd):/backup alpine tar cvf /backup/vdata-bak.tar /vdata

使用 tar cvf 命令,备份数据卷容器 dbdata 中的目录 /vdatavdata-bak.tar,并挂载到宿主机的当前目录下。

恢复数据卷数据

创建数据卷容器:dbdata2

1
$ sudo docker run -d -v /vdata --name dbdata2 alpine sh

使用一个临时容器,恢复备份数据 vdata-bak.tar 到 dbdata2

1
$ sudo docker run --rm --volumes-from dbdata2 -v $(pwd):/backup alpine tar xvf /backup/vdata-bak.tar

使用一个临时容器,查看 dbdata2 恢复的数据:

1
$ sudo docker run --rm --volumes-from dbdata2 alpine /bin/ls /vdata