专栏往期文章

  1. 《Docker是什么?Docker从介绍到Linux安装图文详细教程》
  2. 《30条Docker常用命令图文举例总结》

本期目录

  • 专栏往期文章
  • 1. Docker镜像介绍
  • 2. UnionFS介绍
  • 3. Docker镜像加载原理
  • 4. 为什么Docker镜像要采用分层结构
  • 5. 镜像只读, 容器可写

1. Docker镜像介绍

  • Docker 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境 (包括代码、运行时需要的库、环境变量和配置文件等) ,这个打包好的运行环境就是 image 镜像文件。只有通过这个镜像文件才能生成 Docker 容器实例 (类似 Java 中 New 一个对象出来) 。

2. UnionFS介绍

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

3. Docker镜像加载原理

  • Docker 的镜像实际上由一层层的文件系统组成,这种层级的文件系统称为联合文件系统 (Union File System, UnionFS) 。

  • bootfs (boot file system) 主要包含 bootloader 和 kernel ,Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是引导文件系统 bootfs 。这一层与典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs 。
  • rootfs (root file system) ,在 bootfs 之上。包含典型 Linux 系统中的 /dev/etc/var/bin/proc/usr/tmp 等标准目录和文件。rootfs 就是各种不同的 Linux 发行版,比如 Ubuntu 和 CentOS 等。

【面试题】平时安装进虚拟机的 CentOS 镜像都是 4.4 GB ,为什么 Docker 的镜像才只有 200 MB ?

  • 答:Docker 镜像仅包含运行所需的最小 runtime 环境,即仅需要 rootfs 即可。对于一个精简的 OS ,rootfs 可以很小,只需要包括最基本的命令、工具和程序库即可,因为底层直接共用 Host 主机的 kernel ,自己只需要提供 rootfs 即可。由此可见对于不同的 Linux 发行版,bootfs 基本是一致的,只有 rootfs 会有差别,因此不同的发行版可以共用 bootfs

4. 为什么Docker镜像要采用分层结构

  • 镜像分层最大的一个好处是共享资源,方便复制迁移,就是为了复用。
  • 比如多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在硬盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
    • 我的理解是,下载了 base Ubuntu 镜像,里面是没有 Vim 工具的,那么我可以在 base Ubuntu 镜像的基础上,增加 Vim 工具,再构建出一个带 Vim 的 Ubuntu 镜像,这个带 Vim 的 Ubuntu 镜像就和 base 镜像共享。

5. 镜像只读, 容器可写

  • 【重点理解】Docker 镜像都是只读的,Docker 容器是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部,这一层被称作 “容器层” ,容器层之下的都叫镜像层。

  • 所有对容器的改动,无论是增删改都只会发生在容器层中。只有容器是可写的,容器下面的所有镜像层都是只读的。

【Docker】Docker镜像是什么?浅谈对Docker镜像的理解相关推荐

  1. docker -v 挂载文件_浅谈关于docker中数据卷的操作,附带案例

    Volume数据卷的由来: Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层.如果运行中的容器修改了现有的一个已经存在的 ...

  2. 浅谈 我对 技术 的理解

    文章目录 1.浅谈 我对 技术 的理解 1.1 技术 是 什么? 1.2 技术的 两个 核心 构成 要素 1.2.1 知识 层面 1.2.2 智慧 层面(思考 层面) 1.3 技术 很难?学不明白? ...

  3. 浅谈对seo概念的理解

    个人认为与微信一样,搜索引擎有固定的用户群体,有人有流量的地方,就存在商机或者利益,seo的概念就是搜索引擎优化,其目的是在搜索引擎中获得精准用户,获得流量.从更深层次方面看,利用seo做自然排名获得 ...

  4. 浅谈阿里“中台”概念的理解

    https://www.toutiao.com/a6651015208934310414/?tt_from=mobile_qq&utm_campaign=client_share&ti ...

  5. 浅谈对html css的理解,HTML+CSS入门 CSS选择器 、属性和值浅谈

    body { font-size: 0.8em; color: navy; } 上面的意思是为body选择器设置font-size字体大小和color字体颜色. 所以基本的,当它作用与HTML页面时, ...

  6. 浅谈IO及不同的理解

    IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完 ...

  7. 浅谈我对JCS 的理解

    JCS 是Java 中缓存的一种实现,支持将数据缓存到内存和硬盘中,支持设置缓存对象的有效时长. 我认为可以这么理解JCS:客户端向服务器发出请求,服务器就先去缓存中查一下有没有客户端请求的数据,有则 ...

  8. 浅谈对JavaScript闭包的理解

    首先我们先来看一段代码 从上面的代码可以看出js都有一个特性特性,局部方法可以访问外部父类方法的属性,也就是说,子类或子方法可以访问父类的资源. 我们再来看一段代码 为什么我们打印出来的是undefi ...

  9. 浅谈数据库三大范式的理解

    首先声明一下,我的这个回答是个人工作总结,不适合考试答题昂. 欢迎关注我的博客. 前言:数据库设计其实不仅仅限制于三个范式,往下其实还有很多种,但对于大多数人来说,你又不搞科研,不造飞机大炮,掌握三大 ...

最新文章

  1. QIIME 2用户文档. 12数据筛选Filtering data(2019.7)
  2. Hadoop系列七:Hadoop之sqoop篇
  3. C# SQLite编程总结
  4. ECS vs K8S
  5. 机器学习(周志华)- 第2章模型评估与选择笔记
  6. android 控制word,Android使用POI进行Word操作(一)
  7. 11相机不流畅_小米11有望本月发布,小米10退位让贤,256GB版本跌至3799
  8. (王道408考研数据结构)第八章排序-第五节:归并排序
  9. No module named swigfaiss
  10. 关于电感开始饱和,开关过应力时开关的电流曲线的解释// 《精通开关电源设计》P53 图2-7
  11. win10语言不能安装计算机,解决win10添加语言包失败提示错误代码:0x800F0950的方法...
  12. 在数据库中添加Northwind数据库
  13. 手机声音同步到另一部手机_教你一招,手机耳机音量一键同步!
  14. 2023年深圳Java培训机构排名,不看后悔系列!
  15. 那些年啊,那些事——一个程序员的奋斗史 ——33
  16. 《数据库系统概念》一二章学习笔记
  17. 警告框处理与下拉框选择_Sinno_Song_新浪博客
  18. 爬虫实战——爬取杭电就业信息网招聘信息
  19. 科研中的部分依赖图(PDP)绘制
  20. 单源最短路径SSSP之松弛操作

热门文章

  1. 地图服务平台技术方案
  2. “Terra事件”再迎新进展 加密逃犯否认躲避当局,却下落不明?
  3. 中国现在开源系统cms 论坛排行榜
  4. .md文件是什么?.md如何打开?
  5. 商务工作人员用什么邮箱,超好用的商务邮箱申请攻略!
  6. VB.net学习笔记(六)VB.net的对象
  7. 字体设计中的表现手法(一)
  8. cab文件如何安装或者转换为exe文件?
  9. cod16与战网服务器连接中断,《使命召唤16》无法连接服务器怎么解决 服务器连接解决攻略...
  10. Nacos Go微服务生态系列(一) | Dubbo-go 云原生核心引擎探索