虚拟机和容器化的区别
虚拟机和容器化的区别
前言
随着容易化越来越流行,但是很多人对容器基本原理不是太了解,各种文档和产品介绍上也是把容器和虚拟机拿来做比较,导致很多人把容器化误认为是虚拟化的一个升级,这是完全错误的一个概念,从实现原理上来讲容器化和虚拟化是2个完全不同的技术,虚拟化≠容器化,只是2个技术的有想要达到的共同目的,任务隔离
1、虚拟技术
下图是应用程序在虚拟机上运行的示意图
让我们从下至上分析下各个层:
基础设施层
基础设施层,也就是宿主机层,可以是运行在机房的服务,也可是虚拟云上的虚拟机(如阿里云,Azure或者Amazon ),甚至可以是一台笔记本。
操作系统层
操作系统就是操作系统啦,我不信你不懂。
hypervisor层
hypervisor也称为虚拟机监视器(virtual machine monitor 、缩写VMM),虚拟机可以理解为一个封装在文件中的操作系统,我们还需要一个能运行这些文件程序,比较流行的hypervisor有MacOS上的HyperKit,window的Hyper-V和linux的KVM,还有VirtualBox 和d VMWare。
操作系统层
不需多说了吧,windows、Linux、MacOS……。
运行库层
这一层就是在操作系统上面安装的各种二进制文件和依赖库,比如你要运行python,拿你就需要安装python依赖库,运行java程序就需要安装JDK,其他的像C语言依赖库,ruby依赖库等等。
应用程序层
这一层就是你所运行程序的源代码或是编译后的文件,如果你想做程序间的隔离,你需要将他们运行在各自的虚拟机中。
2、容器技术
下图是程序在容器内运行的示意图
从架构示意图中可以明显的看出轻薄了,少了一层guest OS,我也从下至上分析下各层
基础设施层
这一层和上面虚拟机并没有什么不同,任何系统的运行都需要计算机的承载
操作系统层
任何可以运行docker的操作系统,主流的Linux发行版都支持docke,在Windows和MacOS上也有运行docker的方法
Docker daemon 层
这一层替换了虚拟化中的hypervisor层,他负责管理Docker的对象,如镜像、容器、数据卷、网络。
Docker daemon与其它Docker daemon交互以管理容器的服务。
运行库层
运行库层
和虚级化一样需要各种依赖库,只是他们被打包成了docker镜像,然后docker守护进程运行他们。
应用程序层
应用程序和他们的依赖库被打包到Docker镜像中,不同的应用被打包不同的镜像中,然后他们各自运行在不同的Docker中,他们是相互隔离的。
3、Docker和虚拟机对比
Docker daemon可以直接和主机操作系统通信,并负责为Docker容器分配资源;它还负责主机操作系统与容器,容器与容器之间的隔离。
容器的启动要快的多,通常是几毫秒就可以了,而虚拟机通常都需要数分钟
容器还可以节省大量磁盘空间和其他系统资源,因为他不需要额外的操作系统了;Docker不需要虚拟化,他是直接运行在操作系统上。
虽然容器化有很多优势,但是并不能否定虚拟机技术,在一些场景下虚拟机是无法被取代的。
虚拟技术对可以对整个资源和工作环境进行隔了。例如,云供应商使用虚拟机技术隔离不同的用户,docker更多是用来应用之间的隔离,最常见的是把一堆应用打包到各自镜像中运行,微服务架构常见的场景
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!