狂神说-Docker基础-学习笔记-05 Docker镜像原理

视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?p=19

镜像是什么

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

所有的应用,直接打包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镜像原理的更多相关文章

  1. [Docker] docker 基础学习笔记1(共6篇)

    巩固一下yum: yum本身是centos自带的软件,可以删掉然后再重新安装. yum本身可以配置yum源,网络的,本地的都可以.之后安装docker需要配置一个扩展源.   从163的网址里边下载好 ...

  2. [Docker] docker 基础学习笔记3(共6篇)

    首先我们安装好了ssh server之后, 我们需要将这个容器commit,然后启动这个被commit的image. 启动方式: docker run -d -p 2222:22 /usr/sbin/ ...

  3. [Docker] docker 基础学习笔记2(共6篇)

    febootstrap 是一个自制image的一个第三方的工具,好像他们现在都要用这个.   安装还是挺方便的. yum -y install febootstrap   febootstrap -i ...

  4. [Docker] docker 基础学习笔记6(共6篇)

    这个迁移指的是docker整个系统的迁移,而不是说images存储位置迁移 docker info 查看docker的各项配置   首先做文件的迁移 使用rsync软件将docker的文件夹整体迁移到 ...

  5. [Docker] docker 基础学习笔记5(共6篇)

    docker 配置文件的位置: centos : /etc/sysconfig/docker ubuntu: /etc/default/docker   现在比如我自己电脑上已经装好了docker,但 ...

  6. [Docker] docker 基础学习笔记4(共6篇)

    离线安装nginx   apache 如何启动war包   linux 离线升级内核   nginx和Apache的使用   nginx 的负载均衡配置 是如此的简单,比weblogic的要简单100 ...

  7. xml基础学习笔记05

    Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档   * Xpatn.Xquery,是专门用来查询xml的语言   * 查询xml非常快   Xpatn.Xquery,是专门用来 ...

  8. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  9. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  10. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

随机推荐

  1. Java开发环境安装笔记

    目录 JDK的版本 Java 8 Java 9 Java 11 (LTS) Java 17 (LTS) Java 21 JDK的环境变量设置 JAVAHOME 和 PATH 环境变量 JAVAPATH ...

  2. 11-canvas绘制折线图

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  3. MySQL数据库基本操作包括MySQL过程、MySQL声明

    MySQL数据库 操纵数据库 查看数据库 show databases; 创建数据库 create database <database_name>; 删除数据库 drop databas ...

  4. 痞子衡嵌入式:在IAR开发环境下将尽可能多的代码重定向到RAM中执行的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将尽可能多的代码重定向到RAM中执行的方法. 最近和同事在讨论一个客户案例,客户 APP 工程是基于 IAR 开发环境 ...

  5. 构建 OpenWrt

    OpenWrt 是一款路由器操作系统.如果你想要给自己的路由器安装 OpenWrt 的话,一般来说使用别人已经构建好的 OpenWrt 固件就够用了.当然如果你闲得没事干,那么也可以自己构建固件. P ...

  6. 在 macOS 上安装 fish

    安装 fish brew install zsh 将默认 shell 切换为 fish 由于 Homebrew 安装的 fish 不在标准 shell 列表 /etc/shell 里,因此要先将 fi ...

  7. iptables 命令使用帮助总结

    本文为博主原创,转载请注明出处: 1.iptables 命令帮助参数 root@controller1:~# iptables --help iptables v1.6.1 Usage: iptabl ...

  8. [Udemy] AWS Certified Data Analytics Specialty - 5.Visualization

    QuickSight SPICE是 QuickSight 的加速技术

  9. 我对互联网和网站运作的理解 – Domain, DNS, Hosting 介绍

    前言 一直没有写过关于互联网和网站运作的原理相关文章. 这篇就稍微介绍一下它们. 1. 电脑文件 网站是由许多网页组成的, 网页就是电脑里的 file. extension 是 .html 类似于 . ...

  10. CSS & JS Effect – Hamburger Menu

    效果 参考: Youtube – Responsive Navigation Menu Bar + Hamburger Menu Toggle - Only with CSS Youtube – Ma ...