zoukankan      html  css  js  c++  java
  • 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镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。 

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

     

  • 相关阅读:
    nginx 负载均衡
    nginX 安装 启动
    nginx 简介
    使用ASDM 管理 ciscoASA设备
    OSPF配置实验(一)
    VRRP
    HSRP 详解
    Rip 动态路由协议
    配置ASA防火墙 远程管理方式
    Oracle 重启监听
  • 原文地址:https://www.cnblogs.com/charon2/p/10425150.html
Copyright © 2011-2022 走看看