如果用户需要在多个容器之间共享一些持续更新的数据,最简单就是使用数据卷容器。数据卷容器也是容器,是专门用来提供数据卷给其他容器提供数据。
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 镜像。
- dongzao_1:父容器,宿主机建立文件夹:/home/docker 父容器建立文件夹:/zabbx
- dongzao_1.1:第一个子容器
- dongzao_1.2:第二个子容器
首先,建立父容器。
查看父容器创建文件夹。
下来创建字容器:
子容器dongzao_1.1和dongzao_1.2
登陆子容器查看创建文件夹。
从图中,的结果可以看到数据同步的特别快!
只需要,在宿主机更新内容,通过父容器,可以很快的同步到子容器。
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)代表当前目录。
实验操作如下:
不得不说,文件备份速度特别快!如果不加“-itd"后台运行,会看到全程备份过程!
2.2 恢复
Docker恢复备份也很简单,只需要2步即可。
首先,创建一个带有空数据卷的容器dongzao,也就是需要恢复到的镜像。
docker run -itd -v /zabbx --name dongzao centos:latest /bin/bash
然后,进入备份文件的存储目录,再创建另一个容器,挂载dongzao容器卷中的zabbx数据卷,并使用untar解压备份文件到挂载的容器卷中。
docker run --volumes-from dongzao -v $(pwd):/backup centos:latest tar xvf /backup/backup.tar
这个时候,之前备份的数据卷容器的数据已经恢复到了容器dongzao中了。
评论区