• Docker应用一:docker介绍


    Docker介绍与安装

    一、Docker与传统虚拟化区别

     直接看下图:

                    

            传统虚拟化实现架构                                   docker容器实现架构

    比较两图的差异,左图虚拟机的Guest OS层和Hypervisor层在Docker中被Docker Engine层所替代。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。 
    虚拟机实现资源隔离的方法是利用独立的OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的。例如,为了虚拟CPU,Hypervisor会为每个虚拟的CPU创建一个数据结构,模拟CPU的全部寄存器的值,在适当的时候跟踪并修改这些值。需要指出的是在大多数情况下,虚拟机软件代码是直接跑在硬件上的,而不需要Hypervisor介入。只有在一些权限高的请求下,Guest OS需要运行内核态修改CPU的寄存器数据,Hypervisor会介入,修改并维护虚拟的CPU状态。 
    Hypervisor虚拟化内存的方法是创建一个shadow page table。正常的情况下,一个page table可以用来实现从虚拟内存到物理内存的翻译。在虚拟化的情况下,由于所谓的物理内存仍然是虚拟的,因此shadow page table就要做到:虚拟内存->虚拟的物理内存->真正的物理内存。 
    对于IO设备虚拟化,当Hypervisor接到page fault,并发现实际上虚拟的物理内存地址对应的是一个I/O设备,Hypervisor就用软件模拟这个设备的工作情况,并返回。比如当CPU想要写磁盘时,Hypervisor就把相应的数据写到一个host OS的文件上,这个文件实际上就模拟了虚拟的磁盘。 
    对比虚拟机实现资源和环境隔离的方案,Docker就显得简练很多。Docker Engine可以简单看成对Linux的NameSpace、Cgroup、镜像管理文件系统操作的封装。Docker并没有和虚拟机一样利用一个完全独立的Guest OS实现环境隔离,它利用的是目前Linux内核本身支持的容器方式实现资源和环境隔离。简单的说,Docker利用namespace实现系统环境的隔离;利用Cgroup实现资源限制;利用镜像实现根目录环境的隔离。 
    通过Docker和虚拟机实现原理的比较,我们大致可以得出一些结论: 
    (1)Docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上Docker将会在效率上有优势,具体的效率对比在下几个小节里给出。在IO设备虚拟化上,Docker的镜像管理有多种方案,比如利用Aufs文件系统或者Device Mapper实现Docker的文件管理,各种实现方案的效率略有不同。 
    (2)Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个Docker容器只需要几秒钟。另外,现代操作系统是复杂的系统,在一台物理机上新增加一个操作系统的资源开销是比较大的,因此,Docker对比虚拟机在资源消耗上也占有比较大的优势。事实上,在一台物理机上我们可以很容易建立成百上千的容器,而只能建立几个虚拟机。

    二、docker组成

    1、docker镜像:

      用于创建容器的docker模版

    2、容器:

      独立运行的一个或者一组应用(即在镜像中运行应用)

    3、仓库:

      主要用来保存镜像,可以理解为代码版本仓库

  • 相关阅读:
    一篇文章看清楚JDK13的特性!
    【华为云技术分享】序列特征的处理方法之一:基于注意力机制方法
    【转载】PHP简单 对象(object) 与 数组(array) 的转换
    解决URL网址中遇到%2F或%5C(正反斜杠)等特殊符号导致URL重写失效出现404的问题
    hbuilder打包APP
    win7系统访问局域网中的wamp服务器
    hbuilder检测不到夜神模拟器 -- 解决办法
    hbuilder与夜神模拟器的链接
    webstorm(10.0.2)的端口号修改
    webstorm(10.0.2)设置测试服务器 -- 局域网内其他设备访问
  • 原文地址:https://www.cnblogs.com/ahaii/p/6898073.html
Copyright © 2020-2023  润新知