• docker 10 docker的镜像原理


    镜像是什么?

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

    UnionFs(联合文件系统)

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

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

    例如:

    [root@t-docker chenzx]# ls dir1
    a.txt  b.txt
    [root@t-docker chenzx]# ls dir2
    c.txt d.txt
    把dir1和dir2挂载到dir目录下,最终两个目录内容会显示在一个目录下:
    [root@t-docker chenzx]# ls dir
    a.txt  b.txt    c.txt d.txt

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

    典型的Linux文件系统由bootfsrootfs两部分组成,bootfs(boot file system)主要包含 bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后 bootfs就被umount了。 rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件

        画外音:ubuntu和centos的内核相同,只是rootfs布局不一样而已

    平时我们安装虚拟机的centos都是好几个G,为什么docker才200M?

    [root@t-docker chenzx]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              5182e96772bf        3 weeks ago         200MB
    

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

        画外音:docker为什么快,就是因为共有宿主机的内核。 

    以我们的pull为例,在下载的过程中,我们可以看到docker的镜像好像是在一层一层的下载。

    好了,有了上面分层的概念后,我们思考一个问题,为什么tomcat的镜像比centos镜像还大?

    [root@t-docker chenzx]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    tomcat              latest              690cb3b9c7d1        7 days ago          463MB
    centos              latest              5182e96772bf        3 weeks ago         200MB 

    这是因为Tomcat的镜像是由kernel、centos、jdk8、tomcat组成,所以比centos镜像大。 

        一句话, 分层最大的好处是:共享资源 。 

        比如,有多个镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。 

        镜像的特点: 镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层被称为容器层,容器层之下的层都是镜像层

     

  • 相关阅读:
    简单明了的带你理解springboot原理和三大核心注解
    Spring Boot(一):入门篇
    【Mysql优化】聚簇索引与非聚簇索引概念
    Mysql索引原理与优化
    Mysql全文索引的使用
    索引的优缺点,如何创建索引
    184 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 04 例:字符串与byte(即:字节)数组间的相互转换
    183 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下)
    182 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 02 String常用方法(上)
    181 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 01 String常用方法简介
  • 原文地址:https://www.cnblogs.com/charon2/p/10425150.html
Copyright © 2020-2023  润新知