docker 数据卷概念

赖榕 2021年12月29日 50次浏览
  1. 什么是docker的数据卷概念?
    当使用nginx、mysql这些容器的时候,是不是需要修改一些配置文件?启动后,我们还需要进入到容器内部去修改这些配置。是不是很麻烦?
    有没有一种可以不需要进入容器,但是也可以随意修改配置文件信息的东西?有,必须有,那就是数据卷技术。打通容器与宿主机之间的文件通
    道。只要宿主机与容器内的文件进行映射之后,我们只要在宿主机中某个文件夹下(该文件夹与容器中的某一个文件形成映射关系)添加或者修
    改文件,容器中的文件夹也会出现一模一样的文件。

  2. 如果使用数据卷
    使用docker run命令的时候,使用参数-v 宿主机路径:容器内部路径。就可以形成映射关系了,无论是在宿主机或者容器内的文件夹下面创建
    或修改一个文件,另一方就会得到一模一样的文件。
    示例:
    宿主机路径:/usr/local/mysql/data
    容器内路径:/var/lib/mysql/
    docker run -v /usr/local/mysql/data:/var/lib/mysql:ro/rw
    注意:
    :ro/rw,该参数是指定,容器内是否有权限读写该文件夹下的内容
    ro:read only,容器内只能读该文件夹下的内容
    rw:不仅宿主机可以读写该内容,在容器里面也可以读写

  3. 路径数据卷:
    在使用-v参数的时候,使用宿主机的绝对路径来映射绑定容器内的路径时就叫做路径数据卷。宿主机上如果没有对应的文件夹目录时,在容器跑起来后,会自动创建
    示例:
    docker run -d --name mysql -p 3306:3306 -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf/:/etc/mysql/conf.d:ro -e MYSQL_ROOT_PASSWORD=root mysql:5.7

  4. 匿名数据卷
    匿名数据卷,只需要看匿名两个字,就差不多知道什么情况了吧,没有名字的数据卷,真的没有名字吗?不是的,他的名字是docker 在容器跑起
    来之后,随机给你生成的一个名字,那名字老长了,不推荐使用。但是一不小心弄到了匿名数据卷,想找到宿主机的文件夹路径怎么办呢?

    1. 使用docker inspect 命令查看容器的元数据文件。
    2. 找到一个“Mounts”节点,里面记载着你挂载的数据卷信息
    3. “Mounts”节点下的“Source”就是你宿主机的文件夹
      docker 匿名数据卷如下:
      drwx-----x 3 root root 4096 Sep 17 16:49 ef01f5972ce395f75588ddf66ae4bdfedca83e2013856d568349430b67b88fde
      -rw------- 1 root root 65536 Sep 18 14:25 metadata.db
      示例:
      docker run -d --name mysql -p 3306:3306 -v /var/lib/mysql -v /etc/mysql/conf.d:ro -e MYSQL_ROOT_PASSWORD=root mysql:5.7
      可以看到不在指定宿主机的挂载目录,直接在-v参数后面写上了容器内的路径信息
  5. 具名数据卷
    具名数据卷与匿名数据卷差不多,只不多是一个有名字(具名),一个没有名字(docker随机生成)的文件夹罢了。
    使用具名数据卷的时候,只需要写出挂载文件夹名称就行了,不在需要写绝对路径。那不写绝对路径这个挂载的目录保存在哪里了?
    一般具名数据卷保存在/var/lib/docker/volumes/文件夹下面,该文件夹存放这所有匿名和具名数据卷信息。不过我的服务器是centos7,
    服务器不同的情况下,可能这个路径也会有所不同。怎么查找参考匿名数据卷的方式进行。
    示例:
    docker run -d --name mysql -p 3306:3306 -v mysql:/var/lib/mysql -v mysql:/etc/mysql/conf.d:ro -e MYSQL_ROOT_PASSWORD=root mysql:5.7
    查看/var/lib/docker/volumes/下的文件信息,发现有一个mysql的数据卷文件夹
    drwx-----x 3 root root 4096 Sep 17 16:49 ef01f5972ce395f75588ddf66ae4bdfedca83e2013856d568349430b67b88fde
    -rw------- 1 root root 65536 Sep 18 15:05 metadata.db
    drwx-----x 3 root root 4096 Sep 18 15:05 mysql

  6. 容器之间共享数据卷