Docker学习笔记14

news2024/11/19 6:42:01

容器镜像在Docker host的存储位置:

最上面的层(layer)为读写层,也就是容器。下面的其他的层都是只读层的镜像层。并且除了最下面的一层外,其他的层都有一个指针指向自己下面的一层镜像(联合文件系统)。

联合文件系统对用户来说只是一个文件系统。但是这些层并不是不能看到的,如果需要查看的话,可以进入运行Docker的机器上进行查看,从这些层中可以看到Docker内部实现的一些细节。

Docker容器镜像和容器的数据都存放在服务器的/var/lib/docker/的这个路径下。不同的linux发行版本存储方式上有差别。CentOS发行版本上的存储方式为Overlay或Overlay2。

docker info

Dislay system-wide information
[root@vm1 ~]# docker info
Client: Docker Engine - Community
 Version:    24.0.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.5
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.18.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 15
  Running: 2
  Paused: 0
  Stopped: 13
 Images: 6
 Server Version: 24.0.2
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 3.10.0-1160.90.1.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.777GiB
 Name: vm1
 ID: a00730c7-0264-4797-b3fc-62b65f0650a8
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  192.168.17.9:5000
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
         Access to the remote API is equivalent to root access on the host. Refer
         to the 'Docker daemon attack surface' section in the documentation for
         more information: https://docs.docker.com/go/attack-surface/
[root@vm1 ~]#

其中,我们看到有容器的数量信息、镜像的信息、还有Storage Driver为overlay2的相关信息。

cgroup Driver:cgroupfs的信息。Backing Filesystem:xfs:容器本身文件系统的类型。

centos系统docker默认使用的存储驱动是devicemapper,而这种存储驱动有两种模式loop-lvm和direct-lvm,不巧默认又使用了比较低效的loop_lvm。

OverlayFS是一个类似AUFS的现代联合文件系统,更快实现简单。

OverlayFS是内核提供的文件系统,overlay和overlay2是docker的存储驱动。

[root@vm1 ~]# cd /var/lib/docker
[root@vm1 docker]# ll
total 20
drwx--x--x  5 root root  149 Jun 28 21:34 buildkit
drwx--x--- 17 root root 4096 Jun 29 20:42 containers
-rw-------  1 root root   36 Jun 25 20:47 engine-id
drwx------  3 root root   22 Jun 25 20:47 image
drwxr-x---  3 root root   19 Jun 25 20:47 network
drwx--x--- 59 root root 8192 Jun 29 20:42 overlay2
drwx------  4 root root   32 Jun 25 20:47 plugins
drwx------  2 root root    6 Jun 29 16:45 runtimes
drwx------  2 root root    6 Jun 25 20:47 swarm
drwx------  2 root root    6 Jun 29 20:39 tmp
drwx-----x  2 root root   50 Jun 29 16:45 volumes
[root@vm1 docker]#

其中有一个overlay2,里面就是保存的容器和镜像的数据。

docker pull下载一个镜像,然后再检查overlay2,我们可以看到目录中多了一个长数字名称的文件夹名称,里面有diff和l文件夹。

diff文件夹中是一个文件系统。

l文件夹中里面是一个软链接。短名称可以方便挂载。

启动容器后,检查mount |grep overlay2

Overlay及Overlay2的工作原理:

OverlayFS是将单个Linux主机上的两个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载。

OverlayFS底层目录称为lowerdir,高层目录称为upperdir,合并统一视图称为merged。

当需要修改一个文件的时候,使用CoW(写时复制)将文件从只读的Lower复制到可写的Upper进行修改结果也保存在Upper层在Docker中,底下的只读层就是image,可写层就是Container。

overlay2是overlay的改进版, 只支持4.0以上内核添加了Multiple lower layers in overlayfs的特性,所以overlay2可以直接造成multiple lower layer不用像overlay一样通过硬链接的方式(最大128层)。所以消耗更少的inode。

本质区别是镜像层之间共享数据的方法不同。

overlay共享数据方式是通过硬链接,只挂载一层,其他层通过最高层通过硬链接形式共享(增加了磁盘的inode的负担)。

而overlay2是通过每层的lower文件。

Linux的磁盘满与不满,跟磁盘空间有关,还跟inode号。

[root@vm1 ~]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        230177   382  229795    1% /dev
tmpfs           232852     1  232851    1% /dev/shm
tmpfs           232852   771  232081    1% /run
tmpfs           232852    16  232836    1% /sys/fs/cgroup
/dev/sda5      8130560 88973 8041587    2% /
/dev/sda2       256000   341  255659    1% /boot
overlay        8130560 88973 8041587    2% /var/lib/docker/overlay2/8b35c660b5b6c108f46d4ed0eac2caf5c9e247ad5faf74afb537197914a42daf/merged
tmpfs           232852     1  232851    1% /run/user/0
overlay        8130560 88973 8041587    2% /var/lib/docker/overlay2/2a5b4c6c3c5ac9995f16cc08e64bcb50913a1264130d93fcb0bc7f3f84684c6b/merged
[root@vm1 ~]#

如果upperdir和lowerdir文件名相同,则使用upperdir中的文件。

image layer是只读层。

Container layer是读写层。在容器层进行更改保存。

Container mount是联合挂载,merged(合并)。

 /var/lib/docker/overlay2路径下的信息在不同的阶段会有变化,了解这几个阶段中新增的数据以及容器和镜像的存储结构的变化,非常有利于我们对Docker容器以及Docker镜像的理解。

Docker运行前、Docker运行后,下载镜像后,运行容器后四个阶段中Docker存储的变化。

Docker运行前:

没有启动Docker daemon之前不会在/var/lib目录中增加docker目录。

Docker启动后:

就能看到docker目录。其中overlay2目录是空的,里面只有backingFsBlockDev和l两个目录存在。

下载容器镜像以后:

然后我们可以看到有镜像存在,是一串长字符串的目录,里面有diff和link两个文件夹,diff目录中是容器中的文件系统目录结构。

centos镜像只有一层。

l目录中包含了很多软链接,使用的是短名称指向其他层,短名称用于避免mount参数时候达到页面大小的限制。

启动容器后,就看到在overlay2文件夹中多了两个文件夹,其中有个末尾是init文件名的文件夹。

在文件夹中有diff、link、lower、merged、work文件夹。

diff:记录每一层自己内容的数据;

link:记录该层链接目录(实际是l目录下到层的链接),比如在容器中创建目录或在diff新增该目录。

lower:底层镜像:是挂载的那一层底层centos的镜像。

merged:底层镜像和容器层合并在一起。这就是容器当中所使用的目录。创建容器时将lower-id指向的镜像层目录以及upper目录联合挂载到merged目录;

work:用来完成如copy-on-write的操作。

容器为什么不能数据持久化,因为我们会删容器。

容器启动后,可以在docker host中查看mount情况:

[root@vm1 ~]# mount |grep overlay
overlay on /var/lib/docker/overlay2/8b35c660b5b6c108f46d4ed0eac2caf5c9e247ad5faf74afb537197914a42daf/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/M4VPDQ5FHKDLN6OIJ2LWFEH3K2:/var/lib/docker/overlay2/l/4S7OYV5CW5SH6U33B65NVKTNCT:/var/lib/docker/overlay2/l/TXPV5HR7JK3L6TC6XD665LACSQ:/var/lib/docker/overlay2/l/QUKGQQ4UJYER63JNQINCZWYKS6:/var/lib/docker/overlay2/l/OCHI2IOPGUGHPIYETI7BGSVLJM:/var/lib/docker/overlay2/l/S3QUEFLNJWSEC6JAZTFURK3UFB,upperdir=/var/lib/docker/overlay2/8b35c660b5b6c108f46d4ed0eac2caf5c9e247ad5faf74afb537197914a42daf/diff,workdir=/var/lib/docker/overlay2/8b35c660b5b6c108f46d4ed0eac2caf5c9e247ad5faf74afb537197914a42daf/work)
overlay on /var/lib/docker/overlay2/2a5b4c6c3c5ac9995f16cc08e64bcb50913a1264130d93fcb0bc7f3f84684c6b/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/FEC3OVNUCJ7VKX6FHZKUAD6N22:/var/lib/docker/overlay2/l/L4ORWWKZ2CT6WMPJNXU2GRATZR:/var/lib/docker/overlay2/l/34X2UKWUTBBUZNXWDM62JQ54WG:/var/lib/docker/overlay2/l/PWFI7ZJXZQL5PFFKNCTYJKIGZ2:/var/lib/docker/overlay2/l/KDQCSU7LTWHKS5Q4CSZVJ5VZ5A:/var/lib/docker/overlay2/l/W7UBFRAJFAVE2KDIQNLG2LDGBB:/var/lib/docker/overlay2/l/CKDZAUJCARXIALNBKTE34WXAAZ:/var/lib/docker/overlay2/l/LPJXJJYHWNWR2TGU6DI2GALJZB:/var/lib/docker/overlay2/l/FDQX22BNWOZGK64W4RAYHSXNJ5:/var/lib/docker/overlay2/l/75VQYCQU7QSMR4IBFTUFMZCUQL,upperdir=/var/lib/docker/overlay2/2a5b4c6c3c5ac9995f16cc08e64bcb50913a1264130d93fcb0bc7f3f84684c6b/diff,workdir=/var/lib/docker/overlay2/2a5b4c6c3c5ac9995f16cc08e64bcb50913a1264130d93fcb0bc7f3f84684c6b/work)
[root@vm1 ~]#

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

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

相关文章

SpringMVC入门篇2 --- 请求与响应

目录 1.请求映射路径 在类上面统一设置RequestMapping注解,统一设置访问路径前缀。 在上文案例的基础上进行修改。 src/main/java/org/example/controller/UserController.java package org.example.controller;import org.springframework.stereotype.Controll…

寻寻觅觅,彩电厂商能否“智”取未来?

彩电业,还能不能好? 电视行业的发展,一直伴随着漫长的价格战。从黑白到彩电再到超大屏,从CRT到平板再到液晶,在每一轮技术革新之后,市场总会经历从落到起,从起到落的循环,然后陷入价…

重磅!2023年影响因子正式发布 , Nature/Science等顶刊普遍下降 (附名单下载)~

2023年6月28日,科睿唯安(Clarivate Analytics)发布了最新年度期刊引证报告(JCR), 其中包含我们所关注的最新影响因子(Impact Factor, IF). 科研界对每年影响因子发布可谓是翘首以待,据小编统计发现,今年的影响因子普遍…

安科瑞故障电弧探测器在建筑电气的设计与应用

安科瑞 崔丽洁 【摘要】:电气设备是建筑中不可缺少的一部分,具有较为重要的作用和意义,在应用过程中不仅能够提升建筑本身实用性能,而且可为消费者提供更加优良的生活环境。但设备一旦在运行过程中出现故障,不仅会影响…

使用python3的sqlalchemy+sqlcipher3对sqlite3数据加密,使用pysqlcipher3编译打建环境,并写项目测试

一、背景 最近有个想法,想写一个软件,前期本来想用java的springboot加vue来实现,数据库选sqlite来存储,但在用spingboot框架搭好之后,感觉这款软件更适合用python来写,java不适windows桌面系统&#xff0c…

Spring Boot 中的 Environment

Spring Boot 中的 Environment 在 Spring Boot 中,Environment 是一个重要的组件,用于管理应用程序的配置。它是一个接口,提供了访问应用程序配置属性的方法。在本文中,我们将深入探讨 Spring Boot 中的 Environment,…

Git基本操作总结

0.Git操作关系图 1.初次创建仓库 1)git ini(初次提交时使用,项目中会生成.git文件) 2)git add . 3)git commit -m “提交代码” 4)git remote add origin “http://xxx.git”(关联远程主机) / git remote rm origin …

服务器数据恢复-NetApp FAS存储误删文件夹的数据恢复案例

NetApp存储故障&分析: 某公司一台NetApp存储,工作人员误操作删除一个重要的文件夹。 虽然被删除已经有一段时间了,但是根据NetApp文件系统WAFL的特点,数据被覆盖的可能性不大。 NetApp存储数据恢复过程: 1、由于不…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第二十章 欺骗攻击及防御技术上)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、概述二、IP欺骗及防御技术1、基本的IP欺骗2、源路由攻击3、IP欺骗的高级应用——TCP会话劫持4、TCP三步握手连接建立5、TCP会话劫持过程6、IP欺骗攻击的防御7、防范源路由…

【实用工具】MapStruct—性能无限接近原生手写的对象转换工具

文章目录 优秀借鉴 1、引入2、什么是MapStruct2.1、概述2.2、横向对比2.3、优势 3、快速入门3.1、Maven3.2、POJO3.3、统一映射接口3.4、业务映射接口3.5、测试3.6、输出 4、简单分析5、拓展使用 优秀借鉴 What is a Data Transfer Object (DTO)?Java bean mappings, the easy…

多元回归预测 | Matlab北方苍鹰算法(NGO)优化极限学习机ELM回归预测,NGO-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab北方苍鹰算法(NGO)优化极限学习机ELM回归预测,NGO-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清…

HTTP模式下STM32程序远程升级设计

针对嵌入式终端设备架设分散、数量庞大以及应用程序更新迭代速度快带来的程序升级困难局面,运用STM32微控制器的在应用中编程(IAP)原理,设计了通过以太网远程升级程序的方案。 HTTP协议和LwIP协议的使用,不仅让整个方…

安装mmdetection2.22(windows下)

安装mmdetection2.22 确定版本安装mmcv1.4安装mmdetection测试方案1方案2 确定版本 安装mmcv1.4 首先.cuda,pytorch得安装好,这里我拷贝pt1.8虚拟环境 安装mmcv1.4 安装mmdetection 参考文章 下载 cd E:\Code\mmdetection\mmdetection-2.22.0 pip install -r…

机械臂笛卡尔空间轨迹规划

目录 1 引言 2 任务位置规划 2.1直线轨迹规划 2.2圆弧轨迹规划 (1)进行第一个步骤: (2) 进行第二步骤: (3)进行第三个步骤: (4)进行第四个步骤: 1 引言 随着6R机械人的使用…

设备通过ehome接入到EasyCVR后,通道数量显示不全是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

【LeetCode】HOT 100(19)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

linux修改oracle sys密码

忘记了sys密码 su - oracle; sqlplus / as sysdba; alter user system identified by test; navicat测试连接

【软件测试三】测试用例篇

目录 1.测试用例的基本要素 2.测试用例的给我们带来的好处 3.设计测试用例的万能公式 3.1.水杯的测试用例 3.2.微信发送朋友圈的测试用例 4.设计测试用例的方法 基于需求设计的测试用例 1.等价类 2.边界值 3.判定表 4.正交法 1.正交表表达式 2.特点: …

【OSI体系结构】网络杂谈(14)之OSI体系结构精准理解

涉及知识点 什么是OSI体系结构,OSI体系结构的概念,网络协议三要素,应用层,表示层,会话层,传输层,表示层,数据链路层,物理层,开放系统互连参考模型各层的功能…

CRM系统助力医疗机构数字化营销全链路,让获客和留存更简单

在数字经济背景下,医疗行业面临经营、管理、组织变革升级的迫切需求。伴随云计算、大数据、物联网、5G、人工智能等数字化技术的创新应用,加速推动了国内医疗机构数字化转型地落地。后疫情时代下,如何展望未来、寻找医疗健康行业重回增长轨道…