Docker之路(5.Docker镜像学习、镜像加载原理、镜像分层原理、通过commit提交镜像)

news/2024/4/23 18:40:10/文章来源:https://blog.csdn.net/wei18791957243/article/details/129178742

1.镜像是什么

镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内客,
包活代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来

如何得到镜像:

  • 从远程仓库下载
  • 朋友同事拷贝给你
  • 自己制作一个镜像DockerFile

2.Docker镜像加载原理

2.1 UnionFS( 联合文件系统)

UnionFS ( 联合文件系统):Union文件系统( UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改
作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一
个虚拟文件系统下(unite several directories into a single virtual
filesystem)。
Union 文件系統是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各
种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来 ,只能看到一个文件系统,联合加载会把各层文件系统叠加起来 ,这样最終的
文件系统会包含所有底层的文件和目录

2.2 Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统組成,这种层级的文件系統UnionFS。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统
统,在Docker镜像的最底层是bootfs。
这一层与我们典型的Linux/Unix系統是一样的,包含boot加载器和内核。当boot加载完成
之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system),在bootfs之上。
包含的就是典型 Linux 系统中的/dev, /proc, /bin,/etc 等标准目录和文件。rootfs就是
各种不同的操作系统发行版,比如Ubuntu, Centos等等。

在这里插入图片描述

3.Docker镜像分层的理解

我们拉去镜像时,看到的一层层的就是联合文件系统!

在这里插入图片描述

思考:为什么Docker镜像要采用这种分层的结构呢?

最大的好处,我觉得莫过于是资源共享了!
比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,
同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,
而且镜像的每一层都可以被共享.
查看镜像分层的方式可以通过 docker image inspect 命令!

所有的 Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时 ,就会在当前镜像层之上,创建新的镜像层。
举一个简单的例子 ,假如基于 Ubuntu Linux 16.04 创建•
一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python包
就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
该镜像当前已经包含 3个镜像层,如下圈所示( 这只是一个用于演示的很简单的例子)。
在这里插入图片描述

在添加额外的镜像层的同时 ,镜像始终保持是当前所有镜像的组合 ,理解这一点非常重要。
下图中举了一个简单的例子,每个镜像
层包含 3个文件 ,而镜像包含了来自两个镜像层的6个文件。
在这里插入图片描述
上图中的镜像层跟之前图中的路有区别 ,主要目的是便于展示文件。
下图中展示了一个稍微复杂的三层镜像,在外部石来整个镜像只有 6个文件,这是因为最上层中的文件?是文件5的一个更新版

在这里插入图片描述

这种情况下,上层镜像层中的文件爱盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。
Docker 通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。
Linux 上可用的存储引擎有 AUFS、Overlay2、Device Mapper、Btrfs 以及 ZFS。顾名思义,每种存储引擎都基于 Linux中对应的
文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的页部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

3. commit提交镜像

3.1 commit命令格式

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[版本号]

3.2 commit测试,使用tomcat测试

3.2.1 启动一个默认的tomcat

docker pull tomact
docker run -d --name tomcat01 -p 3355:8080 tomcat

3.2.2 发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的默认 webapps下面是没有文件的!

3.2.3 进入tomcat容器,将文件拷贝

docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps/

3.2.4 端口暴露出去后,查看tomcat页面

在这里插入图片描述

3.2.5 将修改或者操作后的容器通过commit命令提交为一个新的镜像

  • 提交之前
    在这里插入图片描述

  • 提交了之后

docker commit -a="tww" -m="测试commit命令" 83bc4f2e4870 tomcat_new:1.0

在这里插入图片描述
在这里插入图片描述

如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,
就好比我们以前学习VM时候,快照!

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

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

相关文章

UE4 手把手教你做插件(4)做一个可以拖入场景的小方块插件

0,前言 学习一下如何编写一个有actor的插件,能够将它拖入场景里面。 1,创建插件 (1)创建一个空白插件 添加之后vs里面就会多出一个目录: (2)给插件添加一个actor 创建完actor之后&am…

ubuntu本地访问nas

需求 本地磁盘空间太小,本地网络里有个nas,希望将nas作为数据盘挂载到本地使用。 方法1 基于sftp访问nas 首先nas设置时要打开sftp访问功能。 然后用ubuntu桌面访问服务器的功能登录sftp,类似如下指令 sftp://user192.168.0.100 ubuntu下…

DevData Talks | 对谈谷歌云 DORA 布道师,像谷歌一样度量 DevOps 表现

本期 DevData Talks 我们请到来自 Google Cloud 谷歌云的 DORA 研究团队的嘉宾 Nathen Harvey与 Apache DevLake、CNCF DevStream 的海外社区负责人 Maxim 进行对谈。如果您关注 DevOps 的话,也许对这个团队有所耳闻。 DORA 的全称是 DevOps Research and Assessme…

【运动控制】CNC三轴小线段路径规划

CNC三轴小线段路径规划 文章目录CNC三轴小线段路径规划一、项目说明二、具体实现1、速度规划2、小线段插补3、运动学逆解刀轴插补点4、差分处理得到实际的速度和加速度5、加速度滑动平均6、实现的效果如图所示三、Reference写在前面,本文是作为一个练手小项目的总结…

论文浅尝 | Deep Reinforcement Learning for Entity Alignment

笔记整理:陈鹏,天津大学硕士链接:https://aclanthology.org/2022.findings-acl.217.pdf动机实体对齐(Entity Alignment)的基本目标在于发现两个知识图谱间指向同一现实对象的实体对,以便将不同知识图谱连接起来&#x…

Interview系列 - 06 Java | ArrayList底层源码分析 | 遍历集合时如何删除集合中的元素

文章目录1. 底层源码分析01. 属性02. 构造方法03. 在数组的末尾添加元素 add(E e)04. 在数组的指定位置添加元素 add(int index, E element)05. 替换指定位置的元素 set(int index, E element)06. 获取指定索引位置处的元素 get(int index)07. 删除指定位置的元素 remove(int i…

华为OD机试真题 用 C++ 实现 - 众数和中位数 | 多看题,提高通过率

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

SpringCloud - Feign远程调用

目录 Feign的远程调用 RestTemplate方式调用存在的问题 介绍与初步使用 Feign的自定义配置 Feign运行自定义配置来覆盖默认配置,可以修改的配置如下: 配置Feign日志有两种方式: Feign性能优化 Feign底层的客户端实现: 连…

AI作画—中国画之山水画

山水画,简称“山水”,中国画的一种,描写山川自然景色为主体的绘画。山水画在我国绘画史中占有重要的地位。 山水画形成于魏晋南北朝时期,但尚未从人物画中完全分离。隋唐时始终独立,五代、北宋时趋于成熟,…

Linux多媒体子系统01:从用户空间使用V4L2子系统

1 V4L2应用编程基础1.1 概述V4L2应用编程需要使用如下系统调用,open(): 打开V4L2设备 close(): 关闭V4L2设备 ioctl(): 向V4L2设备驱动程序发送控制命令 mmap(): 将V4L2设备驱动程序分配的缓冲区内存映射到用户空间 read()或write(): 这2个系统调用是否支持取决于流…

领导催我优化SQL语句,我求助了ChatGPT。这是ChatGPT给出的建议,你们觉得靠谱吗

作为一个程序员,无论在面试还是工作中,优化SQL都是绕不过去的难题。 为啥?工作之后才会明白,随着公司的业务量增多,SQL的执行效率对程系统运行效率的影响逐渐增大,相对于改造代码,优化SQL语句是…

LeetCode-93. 复原 IP 地址

目录题目思路回溯法题目来源 93. 复原 IP 地址 题目思路 意识到这是切割问题,切割问题就可以使用回溯搜索法把所有可能性搜出来,和131.分割回文串就十分类似了。 回溯法 1.递归参数 startIndex一定是需要的,因为不能重复分割&#xff0c…

实战:手把手教你colossal-AI复现Chatgpt的流程

相信很多人都看了使用colossal-AI复现Chatgpt的流程的文章,但实际上看过了,不免有人发出“说得贼明白,就是自己做不出来”的感叹吧。本人公开一下实战过程,给有兴趣复现chatgpt流程的朋友一个参考。 一、环境搭建: 1…

ES6-ES11基本全部语法

在进入es6语法之前,先走一波es5遍历迭代Api,,它们的作用,应用场景,参数,以及返回值分别是什么。(forEach、map、some、every、filter)我们统一设定一个初始数组:let arra…

【likeshop多商户】电子面单商家直播上线啦~

likeshop多商户商城v2.2.0版本更新啦! 新增功能: 商家直播 单子面单 优化: 个人中心优惠券数量统计优化 修复: 秒杀商品待审核时,下单价格计算错误 个人中心修改头像后地址保存错误 「商家直播」 提升品牌知名度…

华为OD机试真题 用 C++ 实现 - 子序列长度 | 多看题,提高通过率

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

2-并发篇

线程有哪些状态 java的线程状态有6种: 操作系统中有5状态的说明 注意java的runnable对应了就绪、运行、阻塞I/O 线程池的核心参数 主要是说线程池的一个实习类 threadPoolExecutor.class 1.corePoolSize 核心线程数据(可以为0) 最多保…

JavaTCP通信程序

3 TCP通信程序 3.1 TCP通信原理 TCP通信协议是一种可靠的网络协议, 它在通信的两端名建立一个Socke对象, 从而在通信的两端形成网络虚拟链路一旦建立了 虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信Java对基于TCP协议的的网络提供…

Python-生成列表

1.生成列表使用列表前必须先生成列表。1.1使用运算符[ ]生成列表在运算符[ ]中以逗号隔开各个元素会生成包含这些元素的新列表。另外,如果[ ]中没有元素就会生成空列表示例>>> list01 [] >>> list01 [] >>> list02 [1, 2, 3] >>…

LeetCode 206. 反转链表

LeetCode 206. 反转链表 难度:easy\color{Green}{easy}easy 题目描述 给你单链表的头节点 headheadhead ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2&a…