参考视频:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili笔记资料交流都在我们的平台:www.kuangstudy.com秦疆老师Java全栈系列课程之Docker讲解从Docker历史,概念,到命令的详解从使用到深入原理和网络,大量的实战,带你彻底掌握Docker!给你带来最全面的Docker讲解,学Docker,这一套课就够了!狂神说Java系列,努力打造通俗易懂的教程QQ交流群 : 664386224https://www.bilibili.com/video/BV1og4y1q7M4?p=18


1、什么是镜像

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


2、Docker镜像加载原理

UnionFS(联合文件系统)

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

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

应用打包成docker镜像。就可以


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等等。

Docker 的CentOS为何如此小?

对于一个精简的OS , rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一致的 rootfs会有差别,因此不同的发行版可以公用bootfs。。


3、分层的理解

在镜像下载的时候,可以看到日志的输出格式是一层一层的。

这样好处是在于可以进行资源共享,多个镜像都可以从一个相同的Base镜像构建而来,那么宿主机只需要再次攀升保留一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有的容器服务了,而且每一层都可以被共享。

比如通过命令查看镜像分层。

[root@VM-0-6-centos ~]# docker image inspect nginx:latest
[{"Id": "sha256:c919045c4c2b0b0007c606e763ed2c830c7b1d038ce878a3c0d6f5b81e6ab80b","RepoTags": ["nginx:latest"],"RepoDigests": ["nginx@sha256:1c13bc6de5dfca749c377974146ac05256791ca2fe1979fc8e8278bf0121d285"],"Parent": "","Comment": "","Created": "2022-03-01T14:00:05.875390518Z","Container": "62aea4acb75db8685ce9869daf8e2548b1fd56315a562ca80cef5502966ba9ca","ContainerConfig": {"Hostname": "62aea4acb75d","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.21.6","NJS_VERSION=0.7.2","PKG_RELEASE=1~bullseye"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"nginx\" \"-g\" \"daemon off;\"]"],"Image": "sha256:90bc50855dba56bcf29fb414e328f2bbe93d21ad4629139a2b0d37be1f139c9d","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"DockerVersion": "20.10.12","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.21.6","NJS_VERSION=0.7.2","PKG_RELEASE=1~bullseye"],"Cmd": ["nginx","-g","daemon off;"],"Image": "sha256:90bc50855dba56bcf29fb414e328f2bbe93d21ad4629139a2b0d37be1f139c9d","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"Architecture": "amd64","Os": "linux","Size": 141505630,"VirtualSize": 141505630,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/6f8bff7ee9acb5fb5a443f11c7784be4c20fd5c075ac7fbe8fb0f65b211bc371/diff:/var/lib/docker/overlay2/fdd486f035991787650b4541e6898e011e238a4b05601c6d7a6220aa4ffc0d4a/diff:/var/lib/docker/overlay2/9a4caa70a4879f0136d3704b0320a9f90fa7293473bd389b46ea02cbe68838c0/diff:/var/lib/docker/overlay2/2314ec9c843908303150e6345bde10780399803da77dc522e66bb8cfe5054a4b/diff:/var/lib/docker/overlay2/d5232a1a498ff374276f0c24796766ede1fc605671f64187f47a003d1f734e5b/diff","MergedDir": "/var/lib/docker/overlay2/a8f7a32b746805019fbd401cbf313b4411a8c811afd669dc2519c0a0792882bf/merged","UpperDir": "/var/lib/docker/overlay2/a8f7a32b746805019fbd401cbf313b4411a8c811afd669dc2519c0a0792882bf/diff","WorkDir": "/var/lib/docker/overlay2/a8f7a32b746805019fbd401cbf313b4411a8c811afd669dc2519c0a0792882bf/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:1401df2b50d5de5a743b7bac3238ef3b7ce905ae39f54707b0ebb8eda3ab10bc","sha256:57a9a0cdd450687265b5d49d47e8dc707f178772faa43a7b01c2299cd39113b7","sha256:3baebd9b50ad6c27671bb9748f3f44922650c46f04977a7857c0366390920afb","sha256:d3ae25fc9f7a917bcd2c3158eff7dc5fc848157e724efdb9af9ffe3771cda464","sha256:53db376e88c7ebd83d9b30e0d20ee818787c21d97c2bd365b02cf23487592007","sha256:e4b39f9495876939f14376f32d7c7ba83526636a8a8b52c008ab32ade9ba6e06"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]

所有Docker镜像都是起始于一个基础镜像层,当进行修改或者新增内容时,就会在当前镜像层之上,创建新的镜像层。

举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像, 这就是新镜像的第一层;

如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层 ;

如果继续添加一个安全补丁, 就会创建第三个镜像层。该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。.

添加镜像层同时,镜像始终保持是当前所有镜像的组合。

比如第一层是有1、2、3三个文件,第二层是有4、5、6三个文件,那么整个镜像是包含了两个镜像层的六个文件。

如果有修改的内容,加在第三层。会把原文件替换掉。

docker通过存储引擎的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。

Linux上可用的存储引擎有AUFS. Overay2. Device Mapper. Btrfs 以及ZFS.顾名思义,每种存端引拳都基于Linux 中对应的文件系统或名块设备技术,并且每种存储引擎都有其独有的性能特点
Docker在Windows.上仅支持windowsfilter -种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW[1].
系统显示相同的三层镜像。所有镜像层堆叠并合并,对外提供统-的视图。

特点:

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

Docker笔记第七节(镜像原理、分层)相关推荐

  1. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  2. Docker入门笔记(七)——镜像

    1. 镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行库.环境变量和配置文件. 所有的应用,直接打包d ...

  3. (docker笔记):镜像原理之联合文件系统、分层理解、commit 镜像

    目录 Docker 镜像讲解 什么是镜像? Docker 镜像加载原理 分层理解 commit 镜像 Docker 镜像讲解 什么是镜像? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和 ...

  4. linux内核镜像的分层,Docker镜像分层的原理详解

    base镜像 base镜像有两层含义: 不依赖其他镜像,从scratch构建 其他镜像可以之为基础进行扩展 所以,base镜像一般都是各种Linux发行版本的Docker镜像,比如:Ubuntu,De ...

  5. Docker笔记-02 镜像

    文章目录 1 获取镜像 1.1 pull子命令选项 2 查看镜像信息 2.1 使用images命令列出镜像 2.1.1 虚悬镜像 2.1.2 中间层镜像 2.1.3 列出部分镜像 2.1.4 以特定格 ...

  6. 【Docker镜像原理容器数据卷】

    文章目录 Docker镜像原理-commit镜像 一.镜像讲解 二.docker镜像加载原理 UnionFS (联合文件系统): 三.docker镜像分层 四.commit镜像 总结: 容器数据卷 五 ...

  7. docker 笔记(2) -- 镜像

    docker 笔记(2) -- 镜像 Ubuntu 14.04 无论如何,飞蛾扑火都是一种高贵的姿态. 参考 菜鸟教程 -- docker 额 当使用的镜像文件本地不存在时,则从远程镜像库中下载,默认 ...

  8. docker学习笔记(三)镜像

    参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(四)使用docker搭建环境 ...

  9. Docker镜像原理及容器数据卷

    什么是docker镜像? docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等):镜像不包含任 ...

最新文章

  1. 服务器微信了早上好,微信问候语早上好 微信早上好经典问候语
  2. 没有shell63号单元_苏教版15年级数学上册第七单元整理与复习+同步练习
  3. 添加删除程序里面没有添加IIS服务的选项
  4. Web 开发常备工具
  5. localhost或本机ip无法连接数据库问题解决与原因
  6. 摆脱臃肿--Unity3D安卓包减肥秘笈
  7. [bzoj2299][HAOI2011]向量
  8. Unlocker-最好的顽固文件删除工具使用说明
  9. Android将数据导出为excel文件的方法
  10. 硬盘的免费分区工具:简单、易用
  11. 如何使用报表工具设置页眉与页脚
  12. linux 命令行 英语词典
  13. 国盛源投资量化买卖一定会挣钱吗?量化买卖怎样挣钱的?
  14. ERP系统-应收应付子系统-应付/应收报表
  15. 当定频神器爱上多线程|ROS2定频话题发布Demo
  16. windows下tomcat8启动脚本代码剖析--catalina.bat
  17. 程序员女朋友礼物python代码_@程序员,用 Python 给女朋友准备个儿童节礼物可好?...
  18. java企业物流管理系统 (JSP物流公司管理系统毕业设计)
  19. 用51单片机演奏民歌茉莉花
  20. Word文档中同一行放置两个图片且标题在同一行的方法

热门文章

  1. 有情人终成眷属---为好友hualex2006.12.9结婚祝福
  2. 热电偶技术及热电偶仿真原理
  3. 考研数据结构 图的四种算法 ---- 来自天勤高分笔记
  4. 如何处理X-Lite和eyeBeam常见软电话故障及方法
  5. 克林顿的竞选活动:机器学习和Java是否可以防止它们无法处理大数据?
  6. Java学生成绩排序输出的三种不同方法
  7. ibm服务器维护重点,IBM服务器存储维护基础知识.pptx
  8. 三十天学会绘画pdf_三十天学会实用画法
  9. 闪讯在 OS X 10.10.4 上的使用姿势
  10. 二维码生成器二维码生成插件开发qrious源码