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.mzph.cn/news/650034.shtml

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

相关文章

Linux的 .bashrc 有什么作用?

一、.bashrc 是什么? 有什么用&#xff1f; .bashrc是一个存储在你的home目录下的隐藏文件&#xff0c;它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时&#xff0c;.bashrc文件就会被执行&#xff0c;加载你设置的环境变量&#xff0c;别名&#xff0c;函数…

林浩然矩阵江湖历险记

林浩然矩阵江湖历险记 Lin Haoran’s Matrix Adventures 在那充满神秘色彩的矩阵世界里&#xff0c;林浩然面对的挑战是驯服一个具有六个个性元素的23矩阵——“小三儿”。这个矩阵由两行三列组成&#xff0c;每一个元素都像是棋盘上的一枚棋子&#xff0c;它们紧密排列在一起&…

朴素贝叶斯分类算法

1.分类算法 分类算法是有监督学习的一个核心问题&#xff0c;他从数据中学习一个分类决策函数或分类模型&#xff0c;对新的输入进行预测&#xff0c;输出变量取有限个离散值。 &#x1f30d;分类算法的内容是要求给定特征&#xff0c;让我们得出类别。 那么如何由指定特征&…

【C++】入门基础

前言&#xff1a;C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;因此从今天开始们将进入&#xff23;的学习。 &#x1f496; 博主CSDN主页:…

如何阅读xml电子发票

xml电子发票是官方给出的电子存档的文件格式&#xff0c;本质是文本&#xff0c;所以文件很小&#xff0c;大量发票存储&#xff0c;能够更加凸显优势。 但是xml电子发票不方便阅读&#xff0c;因为里面是xml格式&#xff0c;对于财务人员来讲&#xff0c;看“代码”简直太难了…

Linux报 “no route to host” 异常 ping: sendmsg: No route to host

公司有台服务器迁移机房后跟另一台服务器相互ping不通&#xff0c;但是两台服务器都能上网能ping其他机器&#xff0c;其他机器都能ping通这两台服务器。检查两台服务器没有防火墙规则拦截&#xff0c;交换机上也没检查到acl过滤。 下图是迁移机房的服务器ping截图 下图是nfs服…

【云原生】认识docker容器操作命令

目录 一、容器操作命令 1、创建容器 2、删除容器以及停止容器运行 3、查看容器的运行状态 4、查看容器的详细信息 5、将容器的文件传输到宿主机以及将宿主机的文件传输到容器中 6、批量删除容器 7、进入容器 二、容器的迁移 1、先在容器中创建测试文件 2、将容器存储…

Scrum敏捷研发管理全流程/scrum管理工具

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

【详解】贪吃蛇游戏----上篇(介绍控制台和API等知识)

目录 知识点&#xff1a; Win32 API 宽字符的打印 控制台操作&#xff1a; &#xff08;1&#xff09;调整控制台大小 &#xff08;2&#xff09;控制台屏幕上的坐标COORD GetStdHandle GetConsoleCursorInfo CONSOLE_CURSOR_INFO SetConsoleCursorInfo SetConsoleC…

Cesium工具应用

文章目录 0.引言1.场景截图2.卷帘对比3.反选遮罩4.鹰眼视图5.指南针与比例尺6.坐标测量7.距离测量8.面积测量9.热力图10.视频投影11.日照分析12.淹没分析13.通视分析14.可视域分析15.缓冲区分析16.地形开挖17.要素聚合18.开启地下模式19.开启等高线20.坡度坡向21.填挖方量计算2…

排序(插入排序)

现在&#xff0c;我们学习了之前数据结构的部分内容&#xff0c;即将进入一个重要的领域&#xff1a;排序&#xff0c;这是一个看起来简单&#xff0c;但是想要理清其中逻辑并不简单的内容&#xff0c;让我们一起加油把&#xff01; 排序的概念及其运用 排序的概念 排序&…

解释性人工智能(XAI)—— AI 决策的透明之道

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。AI 系统的决策和行为对我们的生活产生了深远的影响&#xff0c;从医疗保健到金融服务再到自动驾驶汽车。 然而&#xff0c;有时候 AI 的决策似乎像黑盒子一样难以理解&am…

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

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

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

NQA测试机制—UDP Jitter测试

概念 UDP Jitter是以UDP报文为承载&#xff0c;通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter&#xff08;抖动时间&#xff09;是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。 UDP Jitter测试的过程如下&#xff1a; 1. 源端&a…

shell编程之循环语句与函数

一 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符 二 date date查看当前系统时间 -d 你描述的日期&#xff0c;显示指定字符串所描述的时间&#xff0c;而非当前时间 %F 完整日期格式&#xff0c;等价于 %Y-%m-%d % T 时间&#xff08;24小时…

1.26学习总结

连通性判断 DFS连通性判断步骤&#xff1a; 1.从图上任意一点u开始遍历&#xff0c;标记u已经走过 2.递归u的所有符合连通条件的邻居点 3.递归结束&#xff0c;找到了的所有与u的连通点&#xff0c;就是一个连通块 4.然后重复这个步骤找到所有的连通块 BFS连通性判断步骤…

linux 查看zookeeper server运行版本号

zookeeper版本查看运行命令&#xff1a;echo stat|nc localhost 2181 显示如下图所示&#xff1a; Zookeeper version: 3.4.5-cdh6.3.2--1, built on 11/08/2019 13:15 GMT Clients: /127.0.0.1:44814[0](queued0,recved1,sent0) Latency min/avg/max: 0/0/0 Received: 9 Se…

防火墙的NAT

目录 1. NAT 概念解析 2. 配置NAT策略&#xff1a; 1. NAT 概念解析 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多的NAPT 服务器映射 源NAT --- 基于源IP地址进行转换。我们之前接过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属…