为了账号安全,请及时绑定邮箱和手机立即绑定

docker: 数据管理 - 数据卷 数据卷容器 备份 恢复

标签:
Docker

一、数据卷:

1、启动一个nginx的容器,创建一个data的数据卷,自动映射到本地主机的某个文件目录;

[root@tcy1 tcy]# docker run -it --name volume-test1 -h nginx -v /data nginx

-h  指定主机名;     -v: 启用数据卷

2、查看数据卷与本地主机之间的映射

[root@tcy1 tcy]# docker inspect -f {{.Volumes}} volume-test1
map[/data:/var/lib/docker/volumes/ec83815163550651bc0ab45ea54487c0083653feef48a30a35998c55d31152ea/_data]

这是说容器下的data目录与主机下的的/var/lib/docker/volumes/ec838151635.......1152ea/_data目录数据共享,无论在哪个目录下进行操作,另一个目录也会有相应操作。

例如:在主机下创建一个testSyc文件:


[root@tcy1 _data]# touch testSyc

在docker容器中也会有这个文件:

进入docker容器查看:

①、进入容器:

[root@tcy1 tcy]# ./in.sh volume-test1

in.sh是写的一个快速进入的脚本:如下:

[root@tcy1 tcy]# cat in.sh
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid

②、进入data目录:


root@nginx:/# cd data/

③、查看

root@nginx:/data# ls -a
.  ..  tcyTest

3、指定数据卷与主机的映射文件

[root@tcy1 /]# docker run -it --name volume-test2 -h nginx -v /a:/b nginx

-v /a:/b  主机中的/a与容器中的目录/b想关联。

查看主机中出现了/a目录:

[root@tcy1 /]# ls
a    boot    data  docker             etc   lib    lost+found  misc  net  proc  sbin     srv  tmp  var
bin  cgroup  dev   docker-1.11.1.tgz  home  lib64  media       mnt   opt  root  selinux  sys  usr

查看容器中出现了/b目录:

root@nginx:/# ls
b  bin	boot  dev  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

同样,任何一个目录下有数据变动,会同步到另一个目录下。

二、数据卷容器:

启动一个容器专门用来存数据,其他容器就不挂载了,从这个存数据的容器里面里去读。

例如:在数据卷1中,我们启动了一个数据卷 /data中用来存数据

[root@tcy1 /]# docker run -it --name volume-test1 -h nginx -v /data nginx

现在,我们再起一个容器volume-test4,该容器中的卷来自volume-test1中的/data,可以共享卷,即使volume-test1处于关闭状态。

[root@tcy1 tcy]# docker run -it --name volume-test4 --volumes-from volume-test1 nginx

查看volume-test4中是否有/data和/data下面我们之前创建的目录。都有

root@cc65422e80fe:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  s
root@cc65422e80fe:/# cd data
root@cc65422e80fe:/data# ls
test  testSyc

三、利用数据卷容器来迁移数据

1、备份:

[root@tcy1 Documents]# docker run --volumes-from volume-test1 -v $(pwd):/backup --name volume-test6 nginx tar cvf /backup/backup.tar /data
tar: Removing leading `/' from member names
/data/
/data/test/
/data/testSyc

命令解释:

①、首先利用nginx镜像创建了一个名字为volume-test6的容器;

②使用 --volumes-from volume-test1参数让volume-test6容器挂载volume-test1容器中的data数据卷;

③使用 -v $(pwd):/backup参数来挂载本地的当前目录到volume-test1容器的/backup目录。

④volume-test1容器启动后,使用tar cvf /backup/backup.tar /data命令来将 /data下内容备份为容器内的/backup/backup.tar,即宿主机当前目录下的backup.tar。

查看结果:

该文件夹下有了backup.tar

[root@tcy1 Documents]# ls
backup.tar

2、恢复

将数据恢复到一个容器:

①创建一个带有数据卷datarecover的容器recover,

[root@tcy1 Documents]# docker run -v /datarecover --name recover nginx

②创建另一个新的容器,挂载数据卷datarecover,然后解压备份文件到所挂载的容器卷中。


  1. [root@tcy1 tcy]# docker run --volumes-from recover -v $(pwd):/backup nginx tar xvf /backup/backup.tar  

  2. data/  

  3. data/test/  

  4. data/testSyc  

    原文出处


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消