Docker持久化方式-v和-volume的区别

18 篇文章 0 订阅
15 篇文章 1 订阅

docker数据的持久化一直用的是-v的方式,又叫Bind Mounts(目录绑定),偶然间发现还有一种通过卷轴来实现持久化的方式,翻了下资料,整理了一下两种方式使用的场景。

-v(Bind Mounts)

  • 用法:该用法比较常见,用于直接执行docker run命令时,做目录映射来实现持久化,一般不用于Dockerfile中,因为Dockerfile
    常常跨平台使用,而linux和windows目录结构不同。两个目录会实时同步
  • 适合:用于如nginx,php-fpm等服务,源数据宿主机自定义目录,适合源数据需要经常查看修改的服务
  • 说明:与volumes不同,bind mounts的方式会隐藏掉被挂载目录里面的内容(如果非空的话),比如容器目录内本来有数据,但宿主机目录为空,那么容器内也会空,所以配置文件映射需要提前准备好配置文件
docker run -name nginx -v 宿主机/app/wwwroot:容器内/usr/share/nginx/html  //目录映射

验证绑定:

docker inspect nginx

在这里插入图片描述

-volume

  • 用法:常用于Dockerfile文件中,如在其中声明volume /usr/share/zoninfo,那么在docker的安装目录volumes文件夹夹中会自动生成一个随机字符的文件夹来存储文件( /var/lib/docker/volumes/XXX),里面就是类似-v的映射文件。如不想随机字符,可以先声明一个卷,然后使用-v去挂载进去(就是将原宿主机目录改为卷名)
  • 适合:用于如mysql,mongodb等数据库类服务,源数据均位于docker根目录的volumes中,适合单纯备份数据,且不对源数据做查看修改,适合Dockerfile文件中,用户忘记-v则自动持久化到卷。

dockerfile声明匿名卷
在这里插入图片描述
应用匿名卷

docker run -name nginx -v /etc/nginx  //匿名挂载,只声明容器内路径没有宿主机路径,会默认生成匿名卷

声明具名卷

ocker volume create nginx-vol // 创建一个自定义容器卷
docker volume ls // 查看所有容器卷
docker volume inspect nginx-vol // 查看指定容器卷详情信息
docker stop edc-nginx // 暂停容器实例
docker rm edc-nginx // 移除容器实例
docker volume rm edc-nginx-vol // 删除自定义数据卷

应用具义卷

# docker run -d -it --name=nginx -p 80:80 -v nginx-vol:/usr/share/nginx/html nginx

ps.映射这边有个bug,比如你将windows的www目录映射到nginx内,然后通过-v映射到php-fpm容器内,这时通过laravel等框架访问会巨慢,因为框架往往需要加载很多文件, 然因为windows和linux系统的关系加载会很慢(常见于虚拟机跑linux开发的时候),解决方法是容器内不要使用windows映射进来的目录,linux复制一份映射进去。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值