docker 数据卷 (二)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

docker volume inspect 命令以json的格式显示数据卷的详细信息

lisen@ubuntu:~$ sudo docker volume inspect db_vol
[
    {
        "CreatedAt": "2020-02-01T11:33:52+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/db_vol/_data",
        "Name": "db_vol",
        "Options": {},
        "Scope": "local"
    }
]
lisen@ubuntu:~$

2.4,数据卷删除

lisen@ubuntu:~$ sudo docker volume rm db_vol
db_vol
lisen@ubuntu:~$

3,数据卷的使用

3.1,先创建数据卷在挂载

1)在使用数据卷前先创建一个,docker volume create 数据卷名称

lisen@ubuntu:~$ sudo docker volume create data-vol
data-vol

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

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

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

简写方式(-v):

lisen@ubuntu:~$ sudo docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

3)创建成功后切换到宿主机的 /var/lib/docker/volumes/data-vol/_data目录(如果没有权限,先切换为root用户), 创建一个用与测试的文件,数据卷挂载成功,则在容器中也可以看到这个文件。

root@ubuntu:/var/lib/docker/volumes/data-vol/_data# echo "hello volume" > test.txt
root@ubuntu:/var/lib/docker/volumes/data-vol/_data# ls
test.txt

为方便对比,新打开一个命令终端进入容器,查看在宿主机上创建的文件在容器的对应目录中是否存在

root@ubuntu:/# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1ab0c61bf24c        ubuntu              "/bin/bash"         21 minutes ago      Up 21 minutes                           volumetest
root@ubuntu:/# docker exec -it 1ab0 /bin/bash
root@1ab0c61bf24c:/# ls -l /data
total 4
-rw-r--r-- 1 root root 13 Feb  1 04:30 test.txt
root@1ab0c61bf24c:/# cat /data/test.txt
hello volume
root@1ab0c61bf24c:/#

4)在容器中对测试文件进行修改,然后来到宿主机的对应目录,验证文件是否修改。

root@1ab0c61bf24c:/# echo "update in container" >> /data/test.txt
root@1ab0c61bf24c:/# cat /data/test.txt
hello volume
update in container
root@1ab0c61bf24c:/#

此时容器中的文件已经改变,到宿主机的对应目录中进行查看

root@ubuntu:/var/lib/docker/volumes/data-vol/_data# cat test.txt
hello volume
update in container

3.2,直接挂载宿主机目录

通过这种方式不需要事先创建数据卷,直接指定宿主机的一个目录挂载到容器中,但宿主机中对应的目录要存在,否则会报类似于下面的异常:
docker: Error response from daemon: invalid mount config for type “bind”: bind source path does not exist: /root/vdata.
1)mount方式创建容器命令如下:

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

2)-v方式创建(可以理解为简写方式):

root@ubuntu:/# docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu
9de51fd527dc81ddcadf47fd5b61a6969b884493b0fac710f4a2d83efbfccb33

可以使用上例类似的方面来对数据卷进行验证。具体过程不再详细描述。

注:建议使用3.1所示的方式使用数据卷,直接挂载目录的方式不被docker volume管理。

3.3,只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的,如下所示
1)mount方式创建容器命令如下:

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

2)-v方式创建(可以理解为简写方式):

root@ubuntu:/# docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu
9de51fd527dc81ddcadf47fd5b61a6969b884493b0fac710f4a2d83efbfccb33

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

4,数据卷容器

用途:数据卷容器主要目的是多个容器之间共享一些持续更新的数据,数据卷容器也是一个容器,专门提供数据卷给其他容器挂载。

4.1,新建数据卷容器

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

26552f4338… 是创建的数据卷容器Id

4.2,新建一个容器来使用数据卷容器

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

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

进入新建的容器,在挂载的目录中(data目录,即创建数据卷容器时指定的目录)新建一个测试文件。

root@ubuntu:/# docker exec -it db-con-1 /bin/bash
root@263999d5aa43:/# ls
bin   data  etc   lib    media  opt   root  sbin  sys  usr
boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
root@263999d5aa43:/# echo "test volume container" > /data/test.txt
root@263999d5aa43:/# ls /data
test.txt
root@263999d5aa43:/# cat /data/test.txt
test volume container
root@263999d5aa43:/#

然后来到进入数据卷容器,验证刚才新建的测试文件在数据卷容器中是否存在:

root@ubuntu:/# docker exec -it data-volume-con /bin/bash
root@26552f433852:/# ls
bin   data  etc   lib    media  opt   root  sbin  sys  usr
boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
root@26552f433852:/# cd data
root@26552f433852:/data# ls
test.txt
root@26552f433852:/data# cat test.txt
test volume container
root@26552f433852:/data#

4.3,数据卷容器的备份与恢复

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
root@ubuntu:/#

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

g-KgfMAL1l-1715716937430)]
[外链图片转存中…(img-i7HbonSE-1715716937430)]
[外链图片转存中…(img-TSjay2JS-1715716937431)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值