关于Docker技术说明以及虚拟机技术说明对比
Posted @Kerry~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Docker技术说明以及虚拟机技术说明对比相关的知识,希望对你有一定的参考价值。
Docker技术说明
为什么会出现docker
例如我们开发一个App,项目初期是在本地搭建运行环境,当项目完成了,我们需要把代码、war等包提交给运维或者测试,那测试那边需要部署一套环境进行测试、运维那边也是需要部署一套环境进行上线,这时候往往就会出现一种情况:“在我本地运行是没有问题,在你这里就出现了问题”又或者“线下是没有问题,线上不行”,这样会导致程序一上线就崩溃,这个时候,大家就会想到了虚拟机(VMware),我们把虚拟机中的镜像文件或者整个虚拟机打包就可以了,但是想想一个虚拟机少有几个G,如果每个项目都虚拟机式部署,那么需要多大的内存,docker就是在这种背景下应运而生,Docker是一种容器技术,主要是为了解决运行环境以及配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术,实现资源和系统环境的隔离。
单个项目:解决运行环境以及配置一致问题。
多个项目:需要系统环境隔离,资源隔离问题。
科普一下虚拟机:云计算底层的基石就是虚拟机技术。云计算厂商购买回来一堆硬件搭建好数据中心后,使用虚拟机技术就可以将硬件资源进行切分,相当于把它们切割成为一个个文件夹,进行出售给用户使用。
虚拟机 VS docker 对比
虚拟机和 docker 最终都是实现资源和系统环境的隔离。但是大家实现的方式不一样。
先说一下关于 Host OS 、 Hypervisor 、Guest OS等概念。
Host OS是服务器虚拟化中的一个概念,有一种虚拟化技术是在物理机器上安装操作系统,然后在这个操作系统上安装Hypervisor(虚拟化CPU、内存、IO设备、硬件一套操作系统)虚拟化软件,这样就可以在物理机上虚拟化出若干分区,可以分别安装不同的操作系统。那么在这个物理机器上安装的操作系统就叫做Host OS,对应的安装在虚拟分区上的操作系统叫做Guest OS。
Guest OS:VM(虚拟机)里的的系统(OS);
Host OS:物理机里的系统(OS);
简单理解:
Hypervisor 帮你模拟虚拟环境的并且管理虚拟机,Guest OS理解为 Centos 系统。
虚拟机利用独立的Guest OS 操作系统,实现资源和环境隔离。
Docker没有独立的 Guest OS和 Hypervisor ,利用宿主机的内核,不需要和虚拟机一样重新加载操作系统内核。
(简单的理解:就是docker 共用一套的操作系统内核,虚拟机就是每一次都需要重新加载一套新的)
虚拟机的缺点
- 笨重,占内存,光是安装一个操作系统(OS)就几个G了 ;
- 启动速度慢,虚拟机启动分钟级别;
- 增加无关紧要的硬件 Hypervisor层 Hypervisor虚拟的整套软件、硬件、cpu等;
- 独立的 Guest OS ,实现环境隔离,增加了cpu、内存、资源消耗;
- 简单说明一下Guest OS是操作系统,Hypervisor是物理机器硬件资源管理器(管理虚拟机)
- 下面是虚拟机的架构图 和 docker架构图对比
docker和虚拟机对比:
区别 | Docker | 虚拟机VM |
---|---|---|
操作系统 | 与宿主机共用OS | 独立的虚拟机OS |
存储大小 | 镜像小 | 镜像庞大 |
启动效率 | 秒级 | 分钟级别 |
硬件 | 不需要加载 | 需要加载 |
运行性能 | 性能消耗小 | 操作系统较大,消耗了内存和cpu |
快 | 不需要Guest OS和 Hypervisor | 需要Guest OS和 Hypervisor |
通过docker和虚拟机实现原理的比较,我们大致可以得出一些结论:
( 1)docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有优势。
(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。另外,现代操作系统是复杂的系统,在一台物理机上新增加一个操作系统的资源开销是比较大的,因此,docker对比虚拟机在资源消耗上也占有比较大的优势。
(3)docker容器没有自己的内核,使用的宿主机内核,而且没有进行硬件虚拟,因此容器比传统虚拟机更为轻便。
(4)容器之间隔离、容器之间的进程不会相互影响。
docker是什么
docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。
因此我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,程序员再也无法施展表演才华了,不会再有“在我的环境上可以运行”,真正实现“build once, run everywhere”。
此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。
docker的理念
解决环境差异、一处打包、处处运行,解决跨平台运行环境问题。
docker能做什么
Linux Container 虚拟化容器技术,不是模拟一个完整的操作系统,相当于在以前的虚拟机系统做一个减法,只需要内核部分。可以理解为docker 就是一个精细版、精简版、小型的Linux系统,只需要内核部分。
(1)弹性容量,大规模调度。
(2)高效运行
(3)持续化集成。
以上是关于关于Docker技术说明以及虚拟机技术说明对比的主要内容,如果未能解决你的问题,请参考以下文章