• 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数据的挂载,还可以对配置文件、初始化脚本等其他文件的挂载 

    好啦,我们下期见咯~ 

  • 相关阅读:
    SQL注入测试
    防水出色的骨传导耳机,更适合户外运动,南卡Runner Pro 4S体验
    Python3 数据类型转换
    [华为云云服务器评测] Unbutnu添加SSH Key、编译启动Springboot项目
    SpringBoot怎么整合第三方缓存技术/EhCache缓存技术使用以及Redis缓存技术使用怎么在SpringBoot中使用
    第四章:前缀和、差分(数列)
    Vue3组件库打包指南,一次生成esm、esm-bundle、commonjs、umd四种格式
    muduo源码剖析之EventLoopThread
    【Vue】vuex工作原理
    Unity-Resources资源同步加载
  • 原文地址:https://blog.csdn.net/LYJbao/article/details/133905817