狂神说-Docker基础-学习笔记-05 Docker镜像原理
狂神说-Docker基础-学习笔记-05 Docker镜像原理
镜像是什么
镜像是一种轻量级,可执行的独立软件包,用来打包运行环境和基于运行环境开发的软件,镜像包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来。
如何得到镜像
- 从远程仓库下载
- 从他人处获得
- 自己制作
Docker镜像加载原理
UnionFS(联合文件系统)
UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特征:一次加载多个文件系统,但从外面看起来只使用一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统——UnionFS
各个镜像的组成可以想象成如下图片所示
bootfs(boot file system)主要包含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等
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的Kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以共用bootfs——这就是Docker镜像只有几百MB甚至更少的原因
对于分层的理解
分层的镜像
在我们去拉取镜像的时候,观察日志的输出,可以看到是一层一层在下载!
这样的分层结构,最大的好处应该就是资源共享了。如上图所示,我在拉取Redis镜像是,如果有之前拉取的镜像中包含相同的适用于本镜像的层级就不会重新下载,而是选择进行复用。
理解
所有的Docker镜像都起始于一个基础镜像层,当进行修改或者增加新的内容是,就会在当前镜像层之上,创建新的镜像层。
如图所示,基于一个UbuntuOS创建了一个镜像,这是第一层镜像;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加安全补丁,就会创建第三个镜像层。
在添加额外的镜像层的同时,镜像始终保存是当前所有镜像的组合。
可以想象成如下图示的样子。
每个镜像包含三个文件,而镜像包含了来自两个镜像层的6个文件。
要是对上图的镜像进行更新,更新的位置是文件5,而扫描已有镜像发现存在另一镜像层中的文件7就是文件5的更新版本,那么就不用再另外下载了,现在就由来自三个镜像层的6个文件组成新的镜像。
如果需要抽取出该镜像那么,需要抽取所有文件的就是下图所示的文件了
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层会被加载到镜像的顶部——这一层就是通常所说的容器层,容器之下都是镜像层。
对容器进行操作、配置,如果将容器层和原来的镜像层进行打包,可以得到一个新的镜像。
狂神说-Docker基础-学习笔记-05 Docker镜像原理的更多相关文章
- [Docker] docker 基础学习笔记1(共6篇)
巩固一下yum: yum本身是centos自带的软件,可以删掉然后再重新安装. yum本身可以配置yum源,网络的,本地的都可以.之后安装docker需要配置一个扩展源. 从163的网址里边下载好 ...
- [Docker] docker 基础学习笔记3(共6篇)
首先我们安装好了ssh server之后, 我们需要将这个容器commit,然后启动这个被commit的image. 启动方式: docker run -d -p 2222:22 /usr/sbin/ ...
- [Docker] docker 基础学习笔记2(共6篇)
febootstrap 是一个自制image的一个第三方的工具,好像他们现在都要用这个. 安装还是挺方便的. yum -y install febootstrap febootstrap -i ...
- [Docker] docker 基础学习笔记6(共6篇)
这个迁移指的是docker整个系统的迁移,而不是说images存储位置迁移 docker info 查看docker的各项配置 首先做文件的迁移 使用rsync软件将docker的文件夹整体迁移到 ...
- [Docker] docker 基础学习笔记5(共6篇)
docker 配置文件的位置: centos : /etc/sysconfig/docker ubuntu: /etc/default/docker 现在比如我自己电脑上已经装好了docker,但 ...
- [Docker] docker 基础学习笔记4(共6篇)
离线安装nginx apache 如何启动war包 linux 离线升级内核 nginx和Apache的使用 nginx 的负载均衡配置 是如此的简单,比weblogic的要简单100 ...
- xml基础学习笔记05
Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档 * Xpatn.Xquery,是专门用来查询xml的语言 * 查询xml非常快 Xpatn.Xquery,是专门用来 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
随机推荐
- 【EF Core】自动生成的字段值
自动生成字段值,咱们首先想到的是主键列(带 IDENTITY 的主键).EF Core 默认的主键配置也是启用 Identity 自增长的,而且可以自动标识主键.前提是代表主键的实体属性名要符合以下规 ...
- PyTorch的TensorBoard用法示例
原文: https://www.emperinter.info/2020/07/30/tensorboard-in-pytorch/ 缘由 自己上次安装好PyTorch以及训练了一下官方的数据,今天看 ...
- RabbitMq 初学五大模式 通俗易懂 超详细 【包含案例】
RabbitMQ五种工作模式 HelloWorld 简单模式 WorkQueues 工作队列模式 Publish/Subscribe 发布/订阅模式 Routing 路由模式 Topic 通配符模式 ...
- 在VS Code中使用Snippet Craft扩展提高编码效率
Snippet Craft 一个VS Code代码片段管理插件 功能 创建和插入代码片段 在编辑器区域右键菜单中点击插入Snippet,或在代码片段视图中点击条目,则会将代码片段插入到当前激活文档的光 ...
- 计算机二级c语言学习总结
咱就是说,还有一周多久要进行计算机二级考试了,咱开始在b站上找一些视频进行学习.毕竟咱c语言实战经验自认为是完全足够应付计算机二级了,所以,咱现在的学习目标是先把计算机二级的大概知识过一遍,进行查漏补 ...
- Mybatis骚操作-通用查询工具类
老项目大多都有对JDBC进行了封装,可以直接执行SQL的工具类,在做项目升级改造的时候(这里仅指整合mybatis),要么全部调整成dao-xml的形式(会有改动代码多的问题,而且看代码时需要xml和 ...
- ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本
2019年8月,华为在开发者大会上正式发布鸿蒙系统. HarmonyOS 鸿蒙系统是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在 ...
- DOM & BOM – Input File, Drag & Drop File, File Reader, Blob, ArrayBuffer, File, UTF-8 Encode/Decode, Download File
前言 之前写过 2 篇关于读写文件和二进制相关的文章 Bit, Byte, ASCII, Unicode, UTF, Base64 和 ASP.NET Core – Byte, Stream, Dir ...
- java 线程、进程及相关知识点 《笔记一》
一.线程.进程 线程,就是是进程的一个单位,程序最小执行单位. 进程,就是一个执行中的应用程序:由此可见,进程是由很多线程组成的: 线程生命周期,就是管杀也管埋的过程,生老病死: 线程的5个状态: 新 ...
- Windows系统环境变量
添加环境变量: 添加系统变量,机器要重新启动 添加用户变量,机器不用重启: 一般添加环境变量都添加在用户变量中,但只针对这一用户生效 为了使的所有用户都能正常使用软件,通常添加系统变量