Docker教程小白实操入门(21)--如何备份、恢复数据卷

网友投稿 468 2022-10-22

Docker教程小白实操入门(21)--如何备份、恢复数据卷

一、需求

如何备份、恢复数据卷

二、备份一个数据卷

1. 创建一个容器dbcontainer1和数据卷db1

# 创建一个容器dbcontainer1,并创建了一个名为db1的数据卷,将数据卷挂在到容器的/dbdate目录docker run -v db1:/dbdate --name dbcontainer1 ubuntu

2. 进入一个空白目录,创建一个新容器,新容器与db​​container1​​​容器共享​​dbdata​​挂载目录

# 使用--volumes-from创建一个新容器,新容器与container1容器共享dbdata挂载目录,同时把主机上的当前目录挂载到容器的/backup目录docker run --volumes-from dbcontainer1 -v $(pwd):/backup ubuntu tar -cvf /backup/backup.tar /dbdata

容器启动后,使用了​​tar​​​ 命令来将 ​​dbdata​​​目录压缩,并保存在 ​​/backup/backup.tar​​文件中。

由于主机的当前目录挂载在容器的​​/backup​​​目录下,而绑定挂载的两个目录的内容完全保持一致,所以相当于将​​dbcontainer1​​数据卷的内容压缩后备份到了宿主机的当前目录了 。

三、恢复一个数据卷

假设一不小心名为​​db1​​的数据卷给删除掉了,可以这么恢复:

1. 首先创建一个带有空数据卷的容器​​dbcontainer2​​​,挂载目录为​​/dbdata​​​,数据卷名为​​db1​​

docker run -v db1:/dbdata --name dbcontainer2 ubuntu /bin/bash

2. 进入之前保存​​backup.tar​​的宿主机目录,在该目录下执行下面命令

docker run --volumes-from dbcontainer2 -v $(pwd):/backup busybox tar -xvzf /backup/backup.tar -C /dbdata

该命令创建一个新容器,新容器与​​dbcontainer2​​​容器共享​​dbdata​​​挂载目录,同时将主机的当前目录挂载的容器的​​/backup​​中。

启动容器时,使用​​tar​​​命令将数据卷的备份文件​​backup.tar​​​解压到​​/dbdata​​​目录,由于该容器与​​dbcontainer2​​​容器共享一个数据卷,也就相当于将​​backup.tar​​​解压到了​​dbcontainer2​​​的​​/dbdata​​目录。

又因为​​dbcontainer2​​​将名为​​db1​​​的数据卷挂载到了​​/dbdata​​​上,所以实质上就将​​db1​​的数据卷内容完全恢复了!

四、实例

#!/bin/bash#拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。docker pull ubuntu# 创建一个vo1的数据卷,并在数据卷中添加1.txt文件docker run --name vocontainer1 -v vo1:/dir1 ubuntu touch /dir1/1.txt#1.将vo1数据卷的数据备份到宿主机的/newback中,将容器的/backup路径挂载上去,并将容器内/dir1文件夹打包至/backup/backup.tar#********** Begin *********#docker run --volumes-from vocontainer1 -v /newback:/backup ubuntu tar -cvf /backup/backup.tar /dir1#********** End **********##删除所有的容器以及它使用的数据卷docker rm -vf $(docker ps -aq)docker volume rm vo1#再次创建一个vo1的数据卷docker run -itd --name vocontainer2 -v vo1:/dir1 ubuntu /bin/bash#2.将保存在宿主机中备份文件的数据恢复到vocontainer2的/中#********** Begin *********#docker run --volumes-from vocontainer2 -v /newback:/backup ubuntu tar -xvf /backup/backup.tar -C /#********** End **********#

参考:​​https://educoder.net/shixuns/pebvjtk9/challenges​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java SpringBoot实现文件上传功能的示例代码
下一篇:Docker教程小白实操入门(16)--如何使用ONBUILD指令在构建下一级镜像时做些什么
相关文章

 发表评论

暂时没有评论,来抢沙发吧~