docker数据卷(8)

一、docker数据卷管理

1.为什么用数据卷?
docker分层文件系统

  • 性能差
  • 生命周期与容器相同

2.docker数据卷

  • mount 到主机中,绕开分层文件系统
  • 和主机磁盘性能相同,容器删除后依然保留
  • 仅限本地磁盘,不能随容器迁移
    3.docker提供了两种卷:
  • bind mount
  • docker managed volume

1. bind mount

bind mount 是将主机上的目录或文件mount到容器里,使用直观高效,易于理解。使用-v选项指定路径,格式:

[root@node2 ~]# docker run -d --name web1 -p 80:80 -v /opt/website:/usr/share/nginx/html nginx
f54e513e868034a773637018214a6c98a4ca70eb30e994ce067a87677adfa5cb
[root@node2 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
f54e513e8680        nginx               "nginx -g 'daemon of…"   9 seconds ago       Up 7 seconds        0.0.0.0:80->80/tcp   web1

为啥curl的时候是禁止。是因为这个目录是空的,找不到默认页面。
在这里插入图片描述在这里插入图片描述想要进容器里,得在命令行输入一个bash,否则,通过attach 进去容器后,在退出,进程会结束掉。
在这里插入图片描述
在这里插入图片描述以bash的方式进:

[root@node2 website]# docker exec -it web1 bash

退出的是bash。
在这里插入图片描述
绑定挂接这种方式会以宿主机的路径为主,容器内原有数据会被替换掉。
bind mount默认权限是读写rw,可以在挂载时指定只读ro。

  • -v 选项指定的路径,如果不存在,挂载时会自动创建。
    在这里插入图片描述也可以把yum源作为文件来挂载,
    在这里插入图片描述对于这种文件最好是只读挂载,防止乱修改。

二、docker managed volume

  • bind mount 必须指定host文件系统路径,限制了移植性。
  • docker managed volume 不需要指定mount 源,docker自动为容器创建数据卷目录。
  • 默认创建的数据卷目录都在/var/lib/docker/volumes中。
  • 如果挂载时指向容器已有的目录,原有数据会被复制到volumes中。
[root@node2 ~]# docker run -d --name web1 -v /usr/share/nginx/html nginx
7466c8e0d1d8cbd04e212868765030961eb2cedd6283f7565e33547d5ba95843
[root@node2 ~]# docker inspect web1

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

[root@node2 ~]# cd /var/lib/docker/volumes/80a79a388ea10de4ff0f609882f4f4ef9aee313bf69f3b8556ab9ff188f89394/_data 
[root@node2 _data]# ls  #docker manage volume 创建的数据卷不会覆盖原来容器里的内容。
50x.html  index.html

随机创建的目录太长,也可以指定数据卷的名字:

[root@node2 ~]# docker run -d --name web2 -p 80:80 -v website2:/usr/share/nginx/html nginx
d32350953eb265cba9a0ddb2d03c0d163c23448deeb5f61e1dd4e78b1e2c7d6d 

在这里插入图片描述

[root@node2 ~]# docker inspect web2

在这里插入图片描述

[root@node2 ~]# cd /var/lib/docker/volumes/website2/_data  #website2是指定的目录
[root@node2 _data]# echo hahaha > index.html
[root@node2 _data]# curl localhost
hahaha

把运行的容器删除后,逻辑卷依然存在:
在这里插入图片描述逻辑卷需要手工删除:docker volume prume #删除不被容器使用的逻辑卷

[root@node2 ~]# docker volume create webdata
webdata
[root@node2 ~]# docker volume ls
DRIVER              VOLUME NAME
local               webdata
[root@node2 ~]# docker run -d --name web1 -p 80:80 -v webdata:/usr/share/nginx/html/ nginx
04d11f164d1e59042a20efab83574df19b5b32ffa3c84d479b12d75c96e47048
[root@node2 ~]# cd /var/lib/docker/volumes/webdata/_data/
[root@node2 _data]# ls
50x.html  index.htm
[root@node2 _data]# ls
[root@node2 _data]# echo xixi > index.html
[root@node2 _data]# curl localhost
xixi

在这里插入图片描述
在这里插入图片描述bind mount 与 docker managed volume 对比

  • 相同点:两者都是host文件系统中的某个路径。
  • 不同点:
bind mountdocker managed volume
volume位置可任意指定/var/lib/docker/volume/…
对已有mount point 影响隐藏并替换为volume原有数据复制到volume
是否支持单个文件支持不支持,只能是目录
权限控制可设为只读,默认读写权限无控制,均为读写权限
移植性移植性弱,与host path 绑定移植性强,无需指定目录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值