Docker 数据卷容器、备份及恢复(九)

Docker 数据卷容器、备份及恢复(九)

Scroll Down

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

1.数据卷容器

首先,我们建立父容器

docker run -it - -name parentContainer  镜像名(可以填上面通过dockerFile建立的镜像,里面有挂载容器卷)

然后建立两个子容器继承父容器

docker run -it - -name sonContainer1 --volumes-from parentContainer 镜像名

docker run -it - -name sonContainer2 --volumes-from parentContainer 镜像名

假设我们DockerFile里面定义的容器卷目录为dockerVolume,父容器里面有dockerVolume目录,子容器继承了父容器的dockerVolume,在字容器中的dockerVolume目录作出的修改会同步到父容器的dockerVolume目录上,达到了继承和数据共享的目的。

容器之间配置信息的传递,数据卷的生命周期会一致持续到没有容器使用它为止,换言之,只要有一个容器仍在使用该数据卷,该数据卷一直都可以进行数据共享,通俗地来说,如果此时我们把父容器关闭掉,两个字容器之间依旧可以进行数据共享,而且通过继承子容器生成的新容器,一样可以与子容器进行数据共享。这就是docker容器间的数据传递共享。

1.1 操作案例

首先,我们规划三个容器,都是用centos:latest 镜像。

  1. dongzao_1:父容器,宿主机建立文件夹:/home/docker 父容器建立文件夹:/zabbx
  2. dongzao_1.1:第一个子容器
  3. dongzao_1.2:第二个子容器

首先,建立父容器。

image.png

查看父容器创建文件夹。

image.png

下来创建字容器:
子容器dongzao_1.1和dongzao_1.2

image.png

登陆子容器查看创建文件夹。

image.png

从图中,的结果可以看到数据同步的特别快!

只需要,在宿主机更新内容,通过父容器,可以很快的同步到子容器。

2. 利用数据卷容器迁移数据

通过数据卷容器的特点,我们可以用来数据卷容器对其中的数据卷进行备份、恢复,以实数据的迁移。

2.1 备份

首先,从上面的案例就可以看出,父容器的宿主机文件,就是一个本地备份(更新)的文件夹。
其次,我们还可用通过再次创建子容器进行文件备份,(个人认为不如上面的本地文件夹好用!)

使用下面的命令来备份zabbx数据卷容器内的数据卷:

docker run --name beifen --volumes-from dongzao_1 -v $(pwd):/backup centos:latest tar cvf /backup/backup.tar /zabbx

具体分析下:

首先利用“centos:latest”镜像创建了一个容器beifen。

使用“--volumes-from dongzao_1”参数来让benfen容器挂载dongzao_1容器的数据卷;

使用“-v$(pwd):/backup”参数来挂载本地的当前目录到beifen容器的/backup目录 (也可以明确指出本地目录)。

beifen容器启动后,使用“tar cvf /backup/backup.tar /zabbx”命令将 /zabbx下的内容备份为beifen容器内"/backup/backup.tar",同时复制到宿主主机当前目录下的backup.tar。

注:$(pwd)代表当前目录。

实验操作如下:

image.png

不得不说,文件备份速度特别快!如果不加“-itd"后台运行,会看到全程备份过程!

2.2 恢复

Docker恢复备份也很简单,只需要2步即可。
首先,创建一个带有空数据卷的容器dongzao,也就是需要恢复到的镜像。

docker run -itd -v /zabbx --name dongzao centos:latest /bin/bash

image.png

然后,进入备份文件的存储目录,再创建另一个容器,挂载dongzao容器卷中的zabbx数据卷,并使用untar解压备份文件到挂载的容器卷中。

docker run --volumes-from dongzao -v $(pwd):/backup centos:latest tar xvf /backup/backup.tar

这个时候,之前备份的数据卷容器的数据已经恢复到了容器dongzao中了。

78243261_p0_master1200.jpg