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

    科技2024-11-30  18

    一、需求

    如何备份、恢复数据卷

     

    二、备份一个数据卷

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

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

     

    2. 进入一个空白目录,创建一个新容器,新容器与dbcontainer1容器共享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://www.educoder.net/shixuns/pebvjtk9/challenges

    软件工程小施同学 认证博客专家 学堂在线讲师 每一个伟大,都源于一个勇敢的开始(微博:“软件工程小施同学”,公号”微程序学堂“)
    Processed: 0.013, SQL: 8