Docker学习笔记(三)存储与卷

devtools/2024/9/23 23:19:11/

挂载机制介绍

  我们都知道,默认下,Docker容器与宿主机是完全隔离的,这种特性使得我们创建与删除容器都变得更方便,不需要再去删除宿主机上容器遗留下来的痕迹。
  但是,当我们使用数据库一类需要持久化数据、共享数据,或希望在容器删除后数据依旧存在,在下次创建其他容器时继续使用该数据时,就不得不通过一种方式,让容器中的数据放在宿主机或其他存储系统上。
  Docker 的挂载机制允许将宿主机的文件或目录挂载到 Docker 容器内部。这样容器就可以访问宿主机上的文件系统,并将存储到宿主机指定位置上,使得数据持久化。
  Docker有以下三种挂载方式:

  1. 绑定挂载(推荐用卷挂载替代)
  2. 常驻内存挂载(又名临时挂载)
  3. 卷挂载

绑定挂载

  将主机文件系统中用户指定的位置附加到容器文件树的指定挂载点上。
  使用场景:当主机提供容器运行的程序或目录,或当容器内的程序生成了需要用户/外部程序处理的日志或文件时。
使用命令:

docker run -d --name [容器名] \
--mount type=bind,src=${主机文件地址},dst=${容器内挂载点}
······
[镜像名]

  存在风险:可移植性差、容器之间容易出现冲突。

常驻内存存储

  顾名思义,这种操作会将数据写入内存中。避免写入数据到容器存储层;是一种非持久化的数据存储,仅将数据保存都在宿主机的内存中,一旦容器停止运行tmpfs mount就会被移除,从而总成数据丢失。
  使用场景:tmpfs挂载仅适用于linux主机;常用于存储私钥文件、数据库密码等敏感数据文件,有时也用做上传数据的缓存空间。
使用命令:

docker run -d --name [容器名] \
--mount type=tmpfs,dst=${容器内挂载点},\
tmpfs-size=2048,\ #挂载的tmpfs的宇节数,默认不受限制。
tmpfs-mode=1700 \ # tmpfs的文件模式,例如700或者1700,默认值为1777,表示任何用户都有写入权限 。1700表示文件所有者有读/写权限,而组用户和其他用户没有任何权限。
······
[镜像名]

  被命名为由Docker管理的文件系统树;是对绑定挂载的解耦。它会将主机文件系统的一部分映射为docker卷,而使用者无需关心具体存储位置,只需要知道卷名即可。并且,卷作为数据的容器则更易于共享。
使用命令

#创建卷
docker volume create [vName]
#检查卷
docker volume inspect
#卷的使用
docker run -v/--volume [vName]/[hostPath]:[containerPath]

匿名卷与命名卷

  在最后一条卷的使用命令上,我们可以看的`-v``后面既可以使用命名卷,也可以使用主机目录,这种用法被称为匿名卷;两者的不同点在于

  1. 命名卷:命名卷对应的主机目录下没有数据时,会去映射容器中的数据。当容器被删除时,命名卷不会被删除,它必须手动删除。并且正在被使用的卷无法被删除。
  2. 匿名卷:主机目录下没有数据时,容器获取的数据也完全是空的。当容器被删除时,对应的匿名卷也会被删除。 类同于绑定挂载。

卷的共享

  除了通过名称引用卷外,Docker还提供了另一种指定挂载依赖项的方法。
  docker run命令提供了--volumes-from [容器名]标识选项,用于将挂载定义从一个或多个容器复制到新的容器。这个标识选项可以被设定多次。通过组合使用这个标识选项和匿名卷,可以按照主机无关的方式构建卷共享关系。
  当然,从另一个容器复制卷时,还将复制该容器从其他容器复制卷。
  由于复制的卷始终具有相同的挂载点,这意味着以下三种情况不能使用--volumes-from
    1) Docker没有提供重新映射挂载点的工具,因此,如果要构建的容器需要将共享卷安装到其他位置,就不能使用--volumes-from
    2) 如果一个或多个文件系统源使用相同的挂载点创建卷,那么容器使用--volumes-from 复制卷时,只能收到一个卷的定义,导致用户只能访问部分所需要的数据。
    3) 当用户需要更改卷的写入权限时,也不能用该命令。因为--volumes-from 从源卷完整的复制了卷的定义。

扩展内容

  Docker提供了卷插件接口,通过安装合适的卷插件,Docker可以提供由网络存储或者其他更复杂工具支持的卷。


http://www.ppmy.cn/devtools/116226.html

相关文章

渗透测试入门学习——php表单form与POST、GET请求练习

最终效果&#xff1a; 必填项为空报错提示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>php表单练习</title> </head> <body> <?php//php中的…

Qt 类型选择器和类选择器的区别

概念上的区别请查看此篇博客&#xff1a;Qt 样式表、选择器、盒子模型&#xff0c;下面我直接举例说明。 示例界面&#xff1a; 1、类型选择器&#xff1a; QWidget {background-color: rgb(255, 85, 127); }运行结果&#xff08;因为QPushButton是QWidget的子类&#xff0…

代码随想录算法训练营第3天|链表理论基础、203. 移除链表元素、 707.设计链表、 206.反转链表

目录 链表理论基础203. 移除链表元素1、题目描述2、思路3、code4、复杂度分析 707. 设计链表1、题目描述2、思路3、code 206. 反转链表1、题目描述2、思路3、code4、复杂度分析 链表理论基础 ❤️链表增删的时间复杂度都是 O ( 1 ) O(1) O(1)&#xff0c;适合动态增删&#xf…

python CRC16校验

python openmv 串口 crc16校验 class byte:def __init__(self,word):self.word wordself.low self.word & 0xffself.high self.word >> 8auchCRCHi [0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC…

飞塔Fortigate7.4.4的DNS劫持功能

基础网络配置、上网策略、与Server的VIP配置&#xff08;略&#xff09;。 在FortiGate上配置DNS Translation&#xff0c;将DNS请求结果为202.103.12.2的DNS响应报文中的IP地址修改为Server的内网IP 10.10.2.100。 config firewall dnstranslationedit 1set src 2.13.12.2set…

鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言&#xff0c;通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;然后进行模型的迭代训练&#xff0c;得到一个识别精度较高的模型&#xff0c;然后在…

【零散技术】Odoo17通过Controller下载PDF

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo作为一款开源ERP&#xff0c;拥有极佳的拓展性&#xff0c;Odoo的Controller框架也让它具备了作为微信小程序后端的能力&#xff0c;那么就存在 需要通过小程序来下载PDF的业务情况。 目录 1.功能代码 1.1 manifest 设置 …

尚品汇-秒杀商品定时任务存入缓存、Redis发布订阅实现状态位(五十一)

目录&#xff1a; &#xff08;1&#xff09;秒杀业务分析 &#xff08;2&#xff09;搭建秒杀模块 &#xff08;3&#xff09;秒杀商品导入缓存 &#xff08;4&#xff09;redis发布与订阅实现 &#xff08;1&#xff09;秒杀业务分析 需求分析 所谓“秒杀”&#xff0…