1. 共享数据卷容器

数据卷容器里面的数据可以在各个容器间进行共享。下面演示下操作。

1.1 创建数据卷容器

数据卷容器,顾名思义,就是将一个正常的容器作为数据卷,让其他容器通过挂载这个容器实现数据共享.可是值得注意的是,数据卷容器会降低I/O性能。

首先创建一个数据卷容器,挂载到容器的/data目录。

# 这里我们把ubuntu镜像生成的容器作为数据卷容器
docker run -it -v /data --name data ubuntu
# 在data目录下随便生成点内容
echo data >> data.txt
# 退出数据卷容器
exit

1.2 共享数据卷

# 其他ubuntu镜像构建的容器共享数据卷
docker run -it --volumes-from data --name data1 ubuntu
#其他非ubuntu镜像构建的容器共享数据卷
docker run -it --volumes-from data --name data2 docker/whalesay

1.3 共享数据卷的注意点

  1. 数据卷容器可以在停止状态下被使用
  2. 支持数据卷的级联挂载
  3. 如果使用–volumes-from挂载多个数据卷容器时,如果对应的容器挂载的目录是相同的,那么只有最后一个–volumes-from指定的数据卷容器会挂载成功.

2. 备份恢复

对data这个数据卷容器下的/data目录进行备份,然后在其他新建的容器中进行恢复

2.1 备份

为了将容器卷容器下的内容进行备份,我们需要先创建一个共享容器卷内容的容器,并且把容器卷上的目录和本地做映射,这样就可以将备份文件保存到本地了。

# 创建一个加载 data 容器卷的容器,并从主机挂载当前目录到容器的 /backup 目录。
docker run -it --volumes-from data --name mapper -v $(pwd):/backup ubuntu  tar cvf /backup/backup.tar data 

2.2 恢复

恢复也需要先创建一个空数据的数据卷容器。然后用这个空数据的数据卷容器新建一个容器,并且把备份文件再这个新建容器中解压,解压完成后,原来的empty_container容器中的/data目录就有数据了

#1. 创建空数据的数据卷容器empty_container
docker run -it -v /data --name empty_container ubuntu
#2. 根据空数据的数据卷容器新建容器,和本地备份文件所在目录做映射,然后在容器内解压备份数据来恢复empty_container中数据卷的内容
docker run -it --volumes-from empty_container  --name recovery -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
# 然后可以进empty_container这个容器看看数据是否恢复了
docker exec -it empty_container  /bin/bash

参考资料:

  1. 自己学Docker:6.Docker的数据持久化之数据卷容器
  2. 自己学Docker:7.数据卷容器的备份、恢复