Docker——作为非运维人员,数据卷我们需要了解哪些?

目录

前言

1、什么是数据卷?

1.1、为什么要使用数据卷?

方案一:进入容器内部,找到index.html文件,然后进行修改

方案二:使用数据卷(volume),将宿主机目录映射到容器目录,再进行修改文件

2、如何挂载数据卷,如何创建数据卷?

3、数据卷的常用命令有哪些?

4、本地目录挂载如何实现?


前言

        根据上一篇博客,我们docker已经有了一个初步的认识,例如我们可以使用命令,将Nginx镜像拉取并创建运行容器:docker run -d --name Nginx -p 80:80 nginx~


1、什么是数据卷?

1.1、为什么要使用数据卷?

        场景:

        当我们安装了Nginx后,我们想要修改Nginx容器内部的一些文件,例如Nginx中有一个index.html文件,里面有一些内容,如下:

        因为我们上面执行的命令是把本机的80端口映射给容器的80端口,所以我们在访问时,直接输入,你的云服务地址加上80端口加上/index.html,就可以看到如上的页面了~

        此时当我们想要去修改这个页面的内容时,我们该如何修改:

方案一:进入容器内部,找到index.html文件,然后进行修改

        接下来,只需要我们打开文件,修改即可:

 

        显示识别不到vim这个命令~

        为什么会这样呢?

         我们上一篇有提到可以把容器看做是一个微型的操作系统。但这里呢,有一个特点,这个微型的操作只服务于这个应用,与这个应用无关的环境、配置、文件系统、系统函数的都不会进行配置,只有该应用运行所必备的东西,尽可能的保证这个操作系统的体积够小~

        因此,方案一想要实现,会很复杂,会麻烦~  几乎不会这样搞~

方案二:使用数据卷(volume),将宿主机目录映射到容器目录,再进行修改文件

根据下图,再理解 :

        

        从上图中,我们可以看到,通过数据卷,就可以将宿主机目录映射到Nginx容器目录,也就是说,创建了了数据卷后,我们操作本机对应目录,就相当于是对容器的对应目录进行了操作。例如上述,数据卷,html和conf,而html目录下,Nginx容器中有一个index.html文件,那么对应的,宿主机的这个html目录下也会有这个文件,那我们来修改宿主机的index.html文件,映射到容器中,容器内的index.html文件就会做出同样的修改~

        说的专业点:

  • 创建一个数据卷后,就会在宿主机的指定目录的volume下准备数据卷config和数据卷html,将来这个数据卷就会就映射到了对应的宿主机的目录下,所以,每一个数据卷都是和宿主机上的一个目录有一一对应的。
  • 那接下来,我们要做的就是,让容器的目录跟数据卷做挂载,让两者之间产生关联,也就是说让容器的config和html目录根config卷及html卷进行关联。
  • 这样一来,就间接的让宿主机的指定目录和容器的指定目录产生了关联。一旦关联后,宿主机目录和容器目录之间实现了双向绑定,双向映射,也就是两者的数据,不管你修改那边的,另一边都是自动作出一样的修改。这样一来,我们就不需要进入到容器内部进行操作了~

        所以说,数据卷,其实就是容器目录和宿主机目录之间映射的桥梁,而这个数据卷只是一个逻辑上的存在,就是一个虚拟目录,实际是不存在~

       通过以上方法,就可以有效的解决了我们上面的问题~

新的问题产生:如何挂载数据卷,如何创建数据卷?我们接着看: 


2、如何挂载数据卷,如何创建数据卷?

        我们按照上面说的是先创建数据卷,然后实现数据卷与容器的挂载。那其实,在实际操作中,我们可以直接挂载数据卷,当数据卷不存在时他会自动先创建这个数据卷的~ 当然如果想要多此一举去提前创建好数据卷,也是没有问题的,后面会介绍相关命令

命令:

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

说明:

  • 这个命令,不懂的可以看这篇博客:http://t.csdnimg.cn/9VgvT 
  • 补充说明一个 -v 命令。冒号前是数据卷的名字,名字唯一【数据卷不存在会自动创建】,冒号后是容器中要挂载的目录,例如上述我要挂载的就是html目录
  • 这个挂载的动作必须是在docker run的时候去执行,如果容器已经存在,就不能做挂载了 

后面,如果想要去确定一下数据卷有没有被创建?以及数据卷的其他信息,再来看他的相关命令:


3、数据卷的常用命令有哪些?

  • docker volume create  ---创建数据卷
  • docker volume ls  ---查看所有数据卷
  • docker volume rm --- 删除指定的数据卷
  • docker volume inspect --- 查看某个数据卷的详情
  • docker volume prune --- 清除未使用的数据卷

举例:

修改前,index.html页面;

修改后:

 


4、本地目录挂载如何实现?

        本地目录挂载,很简单,和上述挂载数据卷一样的命令,只有一点点变化:

例如命令:

docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=1111 -v ./mysql:/var/lib/mysql mysql

 命令其实和挂载数据卷差不多,只是把数据卷名字的地方改成了本地目录路径~

注意:

  • 因为挂载数据卷和挂载本地目录的命令很相似,所以我们一定要区分开这两个写法~
  • 本地目录必须以"/"或"./"开头,否则就会认为是数据卷名~

        其实,在创建MySQL容器时,他会自动的有一个挂载,挂载的地方就是上面提到的指定的本地目录,而数据卷名是随机生成的。这种挂载,当数据库需要升级时,先停止删除掉这个容器,本地目录下的数据就算是一个备份,容器重新搭建好后,把这个数据就可以直接迁移过去~【这种挂载的路径很深,难查找】

使用手动指定的本地目录挂载的好处是:

  • 自己指定的本地目录,更容易查找到~
  • 不仅可以做MySQL数据的挂载,还可以对配置文件、初始化脚本等其他文件的挂载 

好啦,我们下期见咯~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙洋静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值