docker容器之数据卷篇

一、数据卷介绍

1、数据卷作用

  • 持久化数据
  • 共享数据

2 、数据卷特点

  • 即使生效
  • 卷的更新不影响镜像
  • 即使容器停止或被删除,卷默认也一直存在

二、卷的基本操作

1、创建数据卷

这一步不需要进入容器哦,否则会报错。

方式一:

[root@localhost docker]# sudo docker volume create db_vol
db_vol

方式二:

root@ubuntu:/# docker run -it -d --name data-volume-con -v /data ubuntu
26552f43385236a8e41ecd727ad3e4ccf9da6a99bcc5ef0fa49a81c17c49b9e5

2、查看数据卷

sudo docker volume ls

在这里插入图片描述

3、查看数据卷详情

格式:sudo docker volume inspect 数据卷名称

sudo docker volume inspect db_vol

命令以json的格式显示数据卷的详细信息
在这里插入图片描述

4、删除数据卷

格式:sudo docker volume rm 要删除的数据卷名称

sudo docker volume rm db_vol

在这里插入图片描述

三、数据卷使用

1、创建数据卷再挂载

1、创建数据卷

  • 挂载是指将定义在 Pod 中的数据卷关联到容器,同一个 Pod 中的同一个数据卷可以被挂载到该 Pod 中的多个容器上
root@ubuntu:~$ sudo docker volume create data-vol
data-vol

2、创建容器使用数据卷(mount方式)

说明:加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车,92c781b8f5cf6cfabd1f95ca9af6a30e1365f14de657272dcdf773b338604134,是生成的容器id。
–mount 后没有带type参数,默认为 volume

root@ubuntu:~$ sudo docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu
1ab0c61bf24c52aeb0f3d0764f8743b9579eeb3a3b79a12a04cfa3ecf1bd50a9

方式二:

root@ubuntu:/# docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu
263999d5aa43dac11c619cc1f644b736339031c459644b68cab8ce044a66ab53

参数–volumes-from用于指定数据卷容器

简写:

说明:
创建一个volumentset0 的容器,“\”继续输入,将宿主机的根目录下的vdata挂载到容器里面根目录下的data里面,指定ubuntu版本号,这里的ubunt是要自己前面下载过的Ubuntu的镜像。

[root@localhost /]# docker run -itd --name volumentset02 \
> -v /vdata:/data ubuntu:16.04 bash
92c781b8f5cf6cfabd1f95ca9af6a30e1365f14de657272dcdf773b338604134

这里会生成这个容器的id名。
再进入这个容器,并进入容器的data里面,因为上面一步操作会直接同步创建一个data目录,所有容器里不需要创建data也有。
进入容器后创建一个测试文本,然后退出容器

[root@localhost /]# docker exec -it 92c bash
root@92c781b8f5cf:/# cd /data
root@92c781b8f5cf:/data# echo fghjk >abc.txt
root@92c781b8f5cf:/data# ls
abc.txt
root@92c781b8f5cf:/data# exit
exit

3、退出容器后就是宿主机的根目录,进入宿主机的vdata目录,里面会同步在容器里面创建的那个文本。这就是挂载成功了。

[root@localhost /]# cd /vdata
[root@localhost vdata]# ls
abc.txt
[root@localhost vdata]# cat abc.txt
fghjk

4、测试一下是否同步,在容器里面对abc.txt文件进行修改:

root@92c781b8f5cf:/# echo "update in container" >> /data/abc.txt
root@92c781b8f5cf:/# cat /data/abc.txt
fghjk
update in container
root@92c781b8f5cf:/# 

在退出容器,进入宿主机根目录查看:
在这里插入图片描述

2、只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的

1、mount方式创建容器

root@ubuntu:/# mkdir /home/ubuntu/vdata
root@ubuntu:/# docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/ubuntu/vdata,target=/vdata,ro \
> ubuntu
530677db6f3d9e94057e8acb389afe3d514e4df3ac4418e80eaa08567a926fa0

简写:
2、-v方式创建

[root@localhost ubuntu]# docker run -dit --name volumetest02 -v /home/ubuntu/vdata:/vdata:ro ubuntu
23e9452b7edb526fcb1495bb912d2b50e0371bee5e36940917af9257196cd3ad

数据卷的主要作用是数据持久化和数据共享,所以一般不用只读方式。

四、容器卷的备份与恢复

1、 数据卷备份

创建一个容器,该容器既挂载了需要备份的数据卷(有volumes-from参数指定),又挂载了用来备份数据的数据卷(可以用-v参数指定),通过tar压缩命令,将volumes-from参数指定的需要备份的数据卷,压缩到用来备份的数据卷中(等同于保存到了宿主机对应的目录中)。
将创建的备份:

root@ubuntu:/# docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
/data/
/data/test.txt
tar: Removing leading `/' from member names
root@ubuntu:/# ls
bin   dev       etc   host-backup  lib    lost+found  mnt  proc  run   snap  sys  usr  vmlinuz
boot  dump.rdb  home  initrd.img   lib64  media       opt  root  sbin  srv   tmp  var
  • –rm 参数,指定了创建的容器为临时容器,运行完后将自动删除,我们只是借助这个容器完成备份,备份完成后数据存放于宿主机中,容器自然也就不需要了。
  • –volumes-from 参数,指定了需要备份的数据卷容器。
    -v 参数,指定了用来备份数据的数据卷,/host-backup为宿主机目录,/con-backup为对应的容器目录。
  • tar 命令完成数据压缩,注意压缩的源为容器目录,因为压缩命令实际上实在容器中执行的,确切的说是在backup容器中执行(–name参数指定的),压缩完成后自然也会保存到宿主机目录。

2、数据卷恢复

新建一个数据卷容器,这个容器作为存放还原数据的容器

root@ubuntu:/# docker run -it --name data-volume-con2 -v /data ubuntu

创建一个临时容器,既挂载了用于存放还原数据的数据卷容器,又挂载了存有备份数据的数据卷,然后使用tar命令,将备份的数据解压到存放还原数据的数据卷中。

root@ubuntu:/# docker run --rm \

> --name huanyuan \
> --volumes-from data-volume-con2 \
> -v /host-backup:/container-back \
> ubuntu tar xvf /container-back/backup200201.tar -C /data
data/
data/test.txt
  • –rm 参数,请参见“数据备份”部分的解释
  • –volumes-from 参数,指定用于保存还原数据的容器
  • -v 参数, 用于指定存有备份数据的数据卷,/host-backup是宿主机上用来存放备份数据的目录,将其挂载到容器的/container-back目录,tar命令通过/container-back获取到备份的数据,然后解压。
  • 56
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值