docker数据卷volume备份、恢复或迁移

1、启动一个命名为vol_simple的容器并创建数据卷(volume)

[root@docker1 ~]# docker run -itd --name vol_simple -v /data ubuntu /bin/bash
90f3912df24c194cc59fe4a635a8c44fe7086098b2934507596ea9ed76284f00

2、进入挂载目录写入若干数据,此时在容器内的/data目录下会共享这些数据

[root@docker1 ~]# docker inspect 90 | grep Source 
                "Source": "/var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data",
[root@docker1 ~]# cd /var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data
[root@docker1 _data]# ls
[root@docker1 _data]# touch a{1..10}.txt
[root@docker1 _data]# ls
a10.txt  a1.txt  a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  a7.txt  a8.txt  a9.txt

容器内共享数据
[root@docker1 ~]# docker exec -it 90 /bin/bash
root@90f3912df24c:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@90f3912df24c:/# ls /data
a1.txt  a10.txt  a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  a7.txt  a8.txt  a9.txt
root@90f3912df24c:/# exit
exit

3 备份容器vol_simple的数据卷数据

[root@docker1 ~]# docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cf /backup/data.tar /data
tar: Removing leading `/' from member names
[root@docker1 ~]# ls
data.tar

首先,这条命令启动了另外一个临时容器,这个容器挂载了两个volume,第一个volume来自于vol_simple容器的共享,也就是需要备份的volume,此时在本容器的/data目录下已经有了与vol_simple容器数据卷中相同的数据。第二个volume将宿主机的当前目录挂载到容器的/backup下。容器运行后将要备份的内容(/data)打包备份到/backup/data.tar ,然后删除容器,备份后的data.tar就留在了当前目录下。

4 恢复volume数据到新容器中

    [root@docker1 ~]# docker run -itd --name vol-bck -v /data ubuntu /bin/bash
    3b3c668b9f294c60f03870e7765e486615e969e373ffee6179dd68090a0f2479
    [root@docker1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    3b3c668b9f29        ubuntu              "/bin/bash"         39 seconds ago      Up 36 seconds                           vol-bck
    90f3912df24c        ubuntu              "/bin/bash"         8 minutes ago       Up 8 minutes                            vol_simple
    
    [root@docker1 ~]# docker run --rm --volumes-from vol-bck -v $(pwd):/backup ubuntu tar xf /backup/data.tar -C /
    [root@docker1 ~]# docker inspect 3b | grep Source
                    "Source": "/var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data",
    [root@docker1 ~]# cd /var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data
    [root@docker1 _data]# ls
    a10.txt  a1.txt  a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  a7.txt  a8.txt  a9.txt
    [root@docker1 _data]# docker exec -it 3b /bin/bash
    root@3b3c668b9f29:/# ls
    bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@3b3c668b9f29:/# ls /data
    a1.txt  a10.txt  a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  a7.txt  a8.txt  a9.txt

首先运行一个新容器vol-bck作为数据恢复的目标。然后启动了一个临时容器,这个容器挂载了两个volume,第一个volum与要恢复的volume共享,此时两个容器内的/data目录数据一致,都为空。第二个volume将宿主机的当前目录挂载到容器的/backup下,当前目录下有data.tar文件,此时容器内的/backup目录下也有了这个文件,再对这个文件进行解包并释放到容器的根目录下,此时容器的/data目录的数据恢复,然后删除容器,vol-bck容器内的/data目录的数据因为共享volume也恢复了。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值