容器挂载(数据卷挂载/宿主机目录挂载)

本文详细介绍了如何在Nginx容器中使用数据卷实现目录与宿主机的自动映射,以及如何基于宿主机目录挂载MySQL数据、配置文件和初始化脚本,同时涵盖了存储驱动、bindmount的工作原理和使用注意事项。
摘要由CSDN通过智能技术生成

一、如何实现nginx容器内目录与宿主机文件目录自动双向映射?(volume)

nginx容器:静态资源目录:/usr/share/nginx/html

                   配置文件目录:/etc/nginx/conf

宿主机文件系统:/var/lib/docker/volumes/html/_data

                             /var/lib/docker/conf/_data

数据卷可实现对应功能:

        数据卷(Volume)是一个虚拟目录(逻辑上),是容器内目录与宿主机文件目录之间映射的桥梁。(可理解为文件共享目录)

        1.创建数据卷:docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

        在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载;

        当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷(即匿名卷);

        数据卷必须在创建容器时指定路径,容器创建完毕后无法进行文件数据卷创建。

        2.查看所有数据卷:docker volume ls

        3.查看某个数据卷详情:docker volume inspect

(挂载点目录:/var/lib/docker/volumes/html/_data)

(root目录下也可查看:cat /var/lib/docker/volumes/html/_data/index.html)

        4.删除指定数据卷:docker volume rm

        5.清除数据卷:docker volume prune

        【注1】查看指令使用规则:docker volumes --help   

         【注2】查看其他容器是否有数据卷挂载: docker inspect 容器名

  • 二、如何基于宿主机目录实现mysql数据目录、配置文件、初始化脚本的挂载?(bind mount)

        宿主机:数据目录:/var/share/mysql

                       配置文件:/etc/mysql/conf.d

                       初始化脚本:/docker-entrypoint-initdb.d

        容器:数据目录:/root/mysql/data

                       配置文件:/root/mysql/conf

                       初始化脚本:/root/mysql/init

在执行docker run 命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载

本地目录必须以“/”或“./”开头,如果直接以 名称开头会被识别为数据卷而非本地目录

                -v mysql:/var/share/mysql   会被识别为一个数据卷叫mysql

                -v ./mysql:/var/share/mysql   会被识别为当前目录下的mysql目录

        1.创建文件:

        2.创建并挂载:

docker run -d --name mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d mysql

【说明】存储驱动-storage driver

 ​​​​​​1.存储驱动处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户提供了多层数据和合并后的统一视图;

2.存储驱动可以通过merge驱动方式将容器可读可写层融合在镜像上

        默认地址/var/lib/docker/overlay2

3.存储驱动管理的容器层,一般用于防止无状态的应用数据,即不需要持久化存储的数据,对于需要持久化存放的数据,则需要使用卷volume或者绑定挂载bing mount

(1)无论是volume还是bind mount,其本质上是宿主机文件系统中 的目录或文件

(2)无论是volume还是bind mount,其上存放 的数据生命周期独立于容器,即容器删除之后,volume或bind mount上的数据,依旧存在

4.除卷和绑定挂载以外还可以提供tmpfs挂载,与卷和绑定挂载相反,tmpfs挂载是临时的,并且仅持久保存在主机内存中,当容器停止时,tmpfs挂载将被删除,并且在该容器中写入的文件将不会保留。

5.linux绑定挂载(bind mount)主要作用是允许一个目录或者文件(不是整个设备)挂载到一个指定的目录上

6.在该挂载点上进行的任何操作,只是发生在被挂载的目录或文件上,而原挂载点的内容则会被隐藏起来且不受影响

7.容器运行过程中,对bind mount 目录中改动 的数据,将被保存,删除容器后,bind mount中的数据仍然存在

8.bind mount 可以挂载一个目录到容器,也可以挂载一个文件到容器,但必须要指定目录或文件的路径,即mount源,当然也必须指定 mount point,这也限制了容器的可移植性

9.若将bind mount 绑定到容器上的某非空目录下,则会隐藏容易目录下的现有内容,若不希望容器的整个目录被覆盖,可单独挂载某个文件

10.若mount源指向的文件或目录在宿主机上不存在,则会自动创建

11.使用 bind mount 时,可通过ro 参数将容器对数据的权限设置为只读(设置ro 参数后,容器无法对数据进行修改,但宿主机依旧有权限修改其内容)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值