docker 存储管理

文章目录

  • docker 存储管理
    • 容器存储方案
      • docker 容器存储解决方案
    • docker 存储驱动
      • 基本概述
      • 存储驱动的选择原则
      • 主流的 docker 存储驱动
      • docker 版本支持的存储驱动
    • overlay2 存储驱动
      • OverlayFS
      • overlay2 存储驱动要求
      • 配置 docker 使用 overlay2 驱动
    • overlay2 存储驱动的工作机制
      • OverlayFS 的镜像分层与共享
      • overlay2 存储驱动的镜像层实现
      • 存储驱动实现的磁盘上的容器层
      • overlay2存储驱动的读写机制
    • docker 存储挂载
      • 卷与存储驱动
      • 挂载类型
      • docker 卷的使用
      • docker 绑定挂载的使用
      • docker tmpfs挂载
      • docker 卷容器
      • 容器的数据共享

docker 存储管理

容器存储方案

docker 容器存储解决方案

存储驱动

由存储驱动实现的联合文件系统

外部挂载卷

以外部挂载卷为代表的持久化存储

docker 存储驱动

docker 镜像和容器的分层结构,就是由 docker 存储驱动来实现的

基本概述

存储驱动控制镜像和容器在 docker 主机上的存储和管理方式

联合文件系统

Union file systems (UnionFS),为Linux、FreeBSD、NetBSD 操作系统设计的,将其他文件系统合并到一个联合挂载点的文件系统,是 docker 重要的底层技术之一,可以通过创建层进行操作,轻巧和快速。

联合文件系统的多种变体

  • AUFS
  • Over;ayFS
  • Btrfs
  • BFS
  • DeviceMapper等

存储驱动

  • aufs
  • overlay
  • overlay2
  • devicemapper
  • btrfs
  • zfs
  • vfs等

联合文件系统实际是由存储驱动来实现的----》

存储驱动的选择原则

  • 生产环境使用具有最佳整体性能和稳定性的存储驱动
  • 内核支持多个存储驱动,存储驱动选择顺序在 docker 的源代码中定义
  • 优先使用 linux 发行版默认的存储驱动,docker 在安装的时候会根据当前系统的配置选择默认的存储驱动,默认驱动有好的稳定性,已经在发行版上经过了严格的测试
  • 个别存储驱动要求使用特定格式的底层文件系统
  • 选择存储驱动要取决于工作负载的特征和所需的稳定性级别

主流的 docker 存储驱动

存储驱动类型说明
overlay2当前主流Linux发行版的首选存储驱动,不需要额外配置(ubuntu14.04不支持)
aufsdocker 18.06以前版本,aufs首选,只支持 ubuntu和debian,需要安装额外的包
devicemapper以前centos和红帽推荐的存储驱动,现在不是了,性能有点问题
btrfs、zfs依赖底层文件系统的正确配置,需要更多投入的维护和设置
vfs用于测试,适合那些没有“写时拷贝”的文件系统,不过性能差,不推荐生产环境

docker 版本支持的存储驱动

  • 基本建议的存储驱动都是 overlay2

底层文件系统

backing filesystem,就是/var/lib/docker (默认)所在的文件系统

存储驱动支持的底层文件系统
overlay2、overlayfstype=1的xfs和ext4
aufsxfs ext4
devicemapperdirect-lvm
btrfsbtrfs
zfszfs
vfs任何文件系统

检查当前存储驱动

docker info | grep "Storage Driver"

在这里插入图片描述

overlay2 存储驱动

OverlayFS

  • 类似于 AUFS 的现代联合文件系统
  • 比 AUFS 速度更快,实现更简单
  • Linux3.18版本开始,OverlayFS 进入 Linux 内核主线,内核模块中的名称从 overlayfs 变成了 overlay
  • docker 提供的存储驱动版本:最初的 overlay 和更高效稳定的 overlay2
  • OverlayFS 是 Linux 内核提供的联合文件系统,overlay 和 overlay2 是 docker 用来实现 OverlayFS 的存储驱动
  • overlay2 存储驱动在索引节点优化上更加高效,但是需要Linux内核4.0以上的版本(centos7.9内核好像是3.10吧??)

overlay2 存储驱动要求

存储驱动要求说明
Docker ERE 17.06 +
4.0或更高版本内核
RHEL或Centos 可使用3.10.0-514+
底层文件系统要求:ext4、xfs(仅限于启用d_type)

OverlayFS 文件系统通过 d_type 特性来确保文件的操作被正确处理,如果不支持 d_type的 overlay 或者 overlay2 存储驱动下使用 docker,docker 在操作文件上可能遇到一些错误

如何确定底层文件系统是否开启 d_type

在这里插入图片描述

在这里插入图片描述

配置 docker 使用 overlay2 驱动

  • 大多数默认就是
  • 显示的配置存储驱动方法:
{"registry-mirrors": ["https://xpd691zc.mirror.aliyuncs.com"],"insecure-registries":["https://192.168.1.236"],"storage-driver": "overlay2"
}

对于centos7系列

  1. centos7 初始安装的内核时 3.x,官方基于该内核构建了 overlay 存储驱动,但是不能直接加载,到centos7.4版本才解决
  2. centos7.4上安装的docker可以直接支持 overlay2存储驱动
  3. centos7.4版本安装创建xfs文件系统的时候,默认没有启 d_type 支持的,需要额外注意

overlay2 存储驱动的工作机制

OverlayFS 的镜像分层与共享

  • 不同层次的目录,对外统一呈现单个目录,2个目录被称为层,统一呈现的单个目录的联合进程被成为联合挂载(Union Mount)
  • OverlayFS 将底层目录称之为【lowerdir】,高层目录称之为【upperdir】,对外暴露统一视图的目录称为【merged】

在这里插入图片描述

  • 镜像层与容器层有相似的文件时,容器层文件就会掩盖镜像层中相同的文件,然后合并显示

overlay与overlay2

  1. 最初的 overlay 仅仅适用2层模型工作,意味着多层镜像无法以多个 OverlayFS,当时的解决方法是采用硬链接的方案,比较废索引节点 node
  2. 两者存储驱动本质的区别在于镜像层之间共享数据的方法不同,overlay2 存储驱动通过每层的 lower 文件,而 overlay 存储驱动使用硬链接

overlay2 存储驱动的镜像层实现

多层镜像的分析

在这里插入图片描述

nginx镜像分层分析
在这里插入图片描述

最底层:3b93be9587d6276dc81265c5ab420878d27bddfb6343ea69656e5ad52ff14bfc
第一层:505637fc69befa54d1c0975e2cb99fb646ae1b04ccc6bdfe310b7576a2cceb6a
第二层:30ace3d17c2e4bd68261dc1fd3315f9278deef220a85f928435aaa9ce6ebc41c
第三层:27fda6ae190defa0beb127b7d8b29022dfc700ba2be1c0f9b196ff3fada49728
最顶层:62961b9285913b2fd2551c369f3401e1288b137037bc549ba15c3894135ee170

存储驱动实现的磁盘上的容器层

镜像层

在这里插入图片描述

容器层

docker run -it nginx /bin/bash

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

overlay2存储驱动的读写机制

读取文件

场景:

  1. 文件不存在于容器层,从镜像层读取,性能开销很小
  2. 文件存在于容器层,不在镜像层,直接从容器层读取
  3. 同时存在容器层和镜像层,读取镜像层中的文件版本,容器层中的文件将掩盖镜像中同名的文件

修改文件或目录

  1. 首次写入文件:容器层不存在,存储驱动执行一次【copy-on-write】将文件从镜像层(lowerdir)复制到容器层(upperdir),然后容器将更改部分写入容器中的该文件的一个新复制,这是一个文件级别的操作,即使这个文件非常大,但是只需要修改一个小部分,也是要复制整个文件,对容器的写入性能会带来影响,上述操作只在首次发生,后续的这个文件写操作只会针对已经复制到容器中的文件进行复制操作

删除文件和目录

  1. 容器中删除一个文件,会在容器层创建一个白化(whiteout)文件,在联合文件系统中,白化文件是指某一类占位符形态的特殊文件,可以删除属于自己的某些系统文件副本,但是无法删除镜像层的文件,因为镜像层是只读的,白化文件可以阻止容器读取到它。
  2. 容器中删除一个目录,和上述类似,会在容器层创建一个不透明(opaque)目录,能够有效阻止容器访问它

重命名目录

  1. 只有源和目的路径都位于顶层才能对目录进行重命名,否则返回错误(cross-device link not permitted)

docker 存储挂载

卷与存储驱动

容器层的数据所存在的问题

  • 在容器的生命周期内存在,随着容器的死亡还被删除,不会持久保存
  • 主机其他进程要访问容器中的数据,难度较高
  • 容器的可写层与主机紧密耦合,无法轻松将数据转移到其他地方
  • 写入容器的可写层还需要存储驱动来管理文件系统,性能不如卷

存储卷

  • 又称数据卷
  • 本质就是主机上的文件或者目录,能够直接被挂载到容器的文件系统中
  • 对数据卷的读写操作会绕过存储驱动,以主机的速度运行
  • 任意数量的数据卷都可以装入容器
  • 多个容器可以共享一个或多个卷

挂载类型

不管挂载类型,数据并没有什么不同,这些数据在容器的文件系统中,都会显示目录或文件

  1. 存储在主机文件系统中,默认/var/lib/docker/volumes 目录中,由 docker 管理,非 docker 进程不能修改
  2. 是 dockers 中持久保存容器应用数据的最佳方式
  3. 也支持卷驱动,这些卷驱动可以让用户将数据存储到远程主机或云上

绑定挂载

  1. 存储到主机上的任意位置
  2. 绑定挂载性能较高,依赖于具有特定目录结构的主机文件系统
  3. 绑定挂载也允许访问敏感文件
  4. 适合的场景:主机与容器共享配置文件等

tmpfs

  1. 仅限于运行 Linux 操作系统的 Docker 主机使用,只存储在主机的内存中,不会被写入主机的文件系统中,不能持久化保存容器的数据
  2. 如果容器产生了非持久化状态数据,可以考虑使用这个来挂载

docker 卷的使用

卷的创建

显示创建:docker volume create

卷的优势

  • 更易备份和迁移
  • 可以通过 docker 命令和 API 进行管理
  • 卷在 Linux 容器和 Windows 容器中都可以工作
  • 多个容器之间共享更安全
  • 卷驱动支持远程主机和云端,加密卷内容等,拓展其他功能都可以
  • 新卷的内容可以由容器预填充

使用

–mount:键值对,逗号隔开的用法,比-v的语法更加冗长,顺序不重要,

-v:卷的名称:容器中被挂载的文件或目录的路径(绝对路径):<ro等可选项>

在这里插入图片描述

在这里插入图片描述

如果卷不是空白的呢 ?

在这里插入图片描述

如果卷是空白的呢,上面其实已经看过效果

在这里插入图片描述

删除卷

删除所有:docker volume prune

删除卷:docker volume rm xxxx

在这里插入图片描述

docker 绑定挂载的使用

特性

  • 绑定挂载功能有效
  • 绑定挂载性能高
  • 容器的移植性被限制,更多的需要配置操作
  • 系统安全产生影响

使用

–mount 选项说明
type挂载的类型
src主机上的绝对路径
target容器内的路径
readonly只读
bind-propagation绑定传播
consistency一致性

在这里插入图片描述

在这里插入图片描述

  • 上述操作也可以用于文件挂载
  • 挂载主机上不存在的目录或者文件

在这里插入图片描述

docker tmpfs挂载

tmpfs:临时文件系统,基于内存的文件系统,速度非常快

  • 不会持久化到磁盘
  • 容器的生命周期内存在

特性

  1. 挂载是临时的
  2. 存储在主机内存中,内存不够,就存交换空间中
  3. 容器停止,tmpfs 将被移除
  4. 不能容器共享
  5. 只适合linux平台

这个就不去细看了,等需要用到的场景再学习一下即可

docker 卷容器

Volume Container 数据卷容器,是一种特殊的容器,专门用来将卷提供给其他容器挂载,通过 --volumes-from 选项基于卷容器创建一个新的容器,并挂载君容器提供的卷

通过卷容器实现容器之间的数据共享

  • 容器要共享数据,先创建卷容器,再让其他容器挂载卷容器来共享

使用

在这里插入图片描述

感觉这个用途不大

容器的数据共享

容器与主机共享数据

  1. 绑定挂载和卷都可以
  2. docker cp 可以在容器与主机之间复制数据

容器之间共享数据

  1. 绑定挂载和卷都可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/246034.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …

Hive实战 —— 电商数据分析(全流程详解 真实数据)

目录 前言需求概述数据清洗数据分析一、前期准备二、项目1. 数据准备和了解2.确定数据粒度和有效列3.HDFS创建用于上传数据的目录4.建库数仓分层 5.建表5.1近源层建表5.2. 明细层建表为什么要构建时间维度表&#xff1f;如何构建时间维度表&#xff1f; 5.3 轻聚层建表6. 指标数…

eduSRC那些事儿-2(sql注入类+文件上传类)

点击星标&#xff0c;即时接收最新推文 本文对edusrc挖掘的部分漏洞进行整理&#xff0c;将案例脱敏后输出成文章&#xff0c;不包含0DAY/BYPASS的案例过程&#xff0c;仅对挖掘思路和方法进行相关讲解。 sql注入类 sql注入配合万能密钥进后台 在内网中扫描到网络运维资料管理系…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

Python基础语法:代码规范、判断语句与循环语句

目录 一、代码规范 二、判断语句 三、循环语句 总结&#xff1a; Python是一种高级、动态类型的编程语言&#xff0c;其语法清晰、简洁&#xff0c;易于学习。本文将介绍Python基础语法中的代码规范、判断语句和循环语句。 一、代码规范 良好的代码规范可以提高代码的可读…

element-ui 树形控件 实现点击某个节点获取本身节点和底下所有的子节点数据

1、需求&#xff1a;点击树形控件中的某个节点&#xff0c;需要拿到它本身和底下所有的子节点的id 1、树形控件代码 <el-tree:data"deptOptions"node-click"getVisitCheckedNodes"ref"target_tree_Speech"node-key"id":default-ex…

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…

tee漏洞学习-翻译-1:从任何上下文中获取 TrustZone 内核中的任意代码执行

原文&#xff1a;http://bits-please.blogspot.com/2015/03/getting-arbitrary-code-execution-in.html 目标是什么&#xff1f; 这将是一系列博客文章&#xff0c;详细介绍我发现的一系列漏洞&#xff0c;这些漏洞将使我们能够将任何用户的权限提升到所有用户的最高权限 - 在…

WEB安全渗透测试-pikachuDVWAsqli-labsupload-labsxss-labs靶场搭建(超详细)

目录 phpstudy下载安装 一&#xff0c;pikachu靶场搭建 1.下载pikachu 2.新建一个名为pikachu的数据库 3.pikachu数据库配置 ​编辑 4.创建网站 ​编辑 5.打开网站 6.初始化安装 二&#xff0c;DVWA靶场搭建 1.下载DVWA 2.创建一个名为dvwa的数据库 3.DVWA数据库配…

13、Kafka ------ kafka 消费者API用法(消费者消费消息代码演示)

目录 kafka 消费者API用法消费者API使用消费者API消费消息消费者消费消息的代码演示1、官方API示例2、创建消费者类3、演示消费结果1、演示消费者属于同一个消费者组2、演示消费者不属于同一个消费者组3、停止线程不适用4、一些参数解释 代码生产者&#xff1a;MessageProducer…

flutter设置windows是否显示标题栏和状态栏和全屏显示

想要让桌面软件实现全屏和不显示状态栏或者自定义状态栏&#xff0c;就可以使用window_manager这个依赖库&#xff0c;使用起来还是非常方便的&#xff0c;可以自定义显示窗口大小和位置&#xff0c;还有设置标题栏是否展示等内容&#xff0c;也可以设置可拖动区域。官方仓库地…

万界星空科技可视化数据大屏的作用

随着科技的不断发展和进步&#xff0c;当前各种数据化的设备也是如同雨后春笋般冒了出来&#xff0c;并且其可以说是给我们带来了极大的便利的。在这其中&#xff0c;数据大屏就是非常具有代表性的一个例子。 数据大屏的主要作用包括&#xff1a; 数据分析&#xff1a;数据大屏…

【mongoDB】文档 CRUD

目录 1.插入文档 批量插入&#xff1a; 2.查询文档 3.更新文档 4.删除文档 deleteOne() deleteMany() findOneAndDelete() 1.插入文档 可以使用 insert () 方法或者 save() 方法向集合中插入文档 语法如下&#xff1a; db.collection_name.insert(document) collectio…

软考培训机构哪家比较好?各软考培训机构排名如何?

先放上机构测评图 一、机构情况 &#xff08;1&#xff09;主营业务 大多数软考培训机构主要致力于IT培训或者软件行业。这些机构的课程更加专业&#xff0c;因为他们起源于该行业。我相信报考软考的同学大部分也是从事这个行业的。个人认为选择这类机构进行培训会有更多好处…

[C#]winform部署yolov5实例分割模型onnx

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 YOLOv5实例分割是目标检测算法的一个变种&#xff0c;主要用于识别和分割图像中的多个物体。它是在YOLOv5的基础上&#xff0c;通过添加一个实例分割模块来实现的。 在实例分割中&#xff0c;算法不仅…

C++输入输出流

输入/输出流类&#xff1a;iostream---------i input&#xff08;输入&#xff09; o output&#xff08;输出&#xff09; stream&#xff1a;流 iostream&#xff1a; istream类&#xff1a;输入流类-------------cin&#xff1a;输入流类的对象 ostre…

Cesium加载地图-高德影像

废话不多说&#xff0c;直接上代码 整体代码 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><…

爬虫(一)

1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于万维网&#xff08;…

【Python】02快速上手爬虫案例二:搞定验证码

文章目录 前言1、不要相信什么验证码的库2、以古诗文网为例&#xff0c;获取验证码1&#xff09;code_result.py2&#xff09;gsw.py 前言 提示&#xff1a;以古诗文网为例&#xff0c;获取验证码&#xff1a; 登录&#xff1a;https://so.gushiwen.cn/user/login.aspx 1、不…

牛刀小试 - C++ 推箱子小游戏

参考文档 C笔记&#xff1a;推箱子小游戏 copy函数 memcpy()函数用法&#xff08;可复制数组&#xff09; 使用memcpy踩出来的坑&#xff0c;值得注意 完整代码 /********************************************************************* 程序名:推箱子小游戏 说明&#x…