docker与虚拟机有何不同
docker与虚拟机有何不同
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器技术有很多种,Docker是目前最流行的一种,网易云也在使用Docker。服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。虚拟机技术通过Hypervisor层抽象底层基础设施资源,提供相互隔离的虚拟机,通过统一配置、统一管理,计算资源的可运维性,以及资源利用率都能够得到有效的提升。同时,虚拟机提供客户机操作系统,客户机变化不会影响宿主机,能够提供可控的测试环境,更能够屏蔽底层硬件甚至基础软件的差异性,让应用做到的广泛兼容。然而,再牛逼的虚拟化技术,都不可避免地出现计算、IO、网络性能损失,毕竟多了一层软件,毕竟要运行一个完整的客户机操作系统。容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。容器可以视为软件供应链的集装箱,能够把应用需要的运行环境、缓存环境、数据库环境等等封装起来,以最简洁的方式支持应用运行,轻装上阵,当然是性能更佳。Docker镜像特性则让这种方式简单易行。当然,因为共享内核,容器隔离性也没有虚拟机那么好。但是,更重要的是,通过Docker的特性,以容器化封装为基础,企业就可以很好地实现云原生(向云而生的架构),包括大家听得耳朵都起茧子的微服务架构、DevOps,让开发团队可以从苦逼的运维工作中解脱,让应用快速上线、快速迭代。微服务架构下,将系统拆分成多个服务,每个部分都可以独立开发测试部署,同时我们也可以只扩展需要扩展的部分,也就是变一个三头六臂的哪吒,而不是总要变三个孙悟空。微服务如何设计,基于容器的规模部署、高可用如何实现等,是另外的问题了。
一般来说,虚拟机都会有自己的kernel,自己的硬件,这样虚拟机启动的时候需要先做开机自检,启动kernel,启动用户进程等一系列行为,虽然现在电脑运行速度挺快,但是这一系列检查做下来,也要几十秒,也就是虚拟机需要几十秒来启动。
重新来理解虚拟机的概念,计算机科学家发现其实我们创建虚拟机也不一定需要模拟硬件的输入和输出,假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为 操作系统层虚拟化:Operating-system-level virtualization 也被叫做容器
让我们来回顾虚拟机的概念,在虚拟机的系统中,虚拟机认为自己有独立的文件系统,进程系统,内存系统,等等一系列,所以为了让容器接近虚拟机,也需要有独立的文件系统,进程系统,内存系统,等等一系列,为了达成这一目的,主机系统采用的办法是:只要隔离容器不让它看到主机的文件系统,进程系统,内存系统,等等一系列,那么容器系统就是一个接近虚拟机的玩意了
Reference
- https://www.zhihu.com/question/48174633/answer/218092411
- https://github.com/WeihanLi/TechNotes/issues/1
- https://zhuanlan.zhihu.com/p/22382728
Contact
Contact me:weihanli@outlook.com
docker与虚拟机有何不同的更多相关文章
- docker与虚拟机性能比较
http://blog.csdn.net/cbl709/article/details/43955687www.chenbiaolong.com 概要 Docker是近年来新兴的虚拟化工具,它可以和虚 ...
- docker与虚拟机的区别
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 为什么Docker比虚拟机快?
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu.内存利用率上Do ...
- Docker与虚拟机技术
最近docker技术在网络上非常火爆,各种技术下载中心总能看到一个以docker镜像方式下载的下载选项,而当你下载下来运行发现,这就是一个虚拟机嘛.究竟是不是呢?一起来看看. 我们先来看看传统意义上的 ...
- docker与虚拟机性能比较(转)
http://blog.csdn.net/cbl709/article/details/43955687 本博客来源于我的个人博客: www.chenbiaolong.com 欢迎访问. 概要 doc ...
- Docker与虚拟机
Docker与虚拟机 简述 Docker 在容器的基础上,进行了进一步的封装,从文件系统.网络互联到进程隔离等等,极大的简化了容器的创建和维护.使得 Docker 技术比虚拟机技术更为轻便.快捷.下面 ...
- Docker Toolbox虚拟机文件地址修改 以及镜像加速
Docker Toolbox虚拟机文件地址修改 默认情况下,docker-machine创建的虚拟机文件,是保存在C盘的C:\Users\用户名\.docker\machine\machines\d ...
- Docker 和虚拟机的区别
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- docker ,docker与虚拟机的区别
什么是Docker: 1.Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 L ...
随机推荐
- MiniProfiler监控Asp.Net MVC5和EF性能
1. 安装依赖包 在web项目打开nuget包管理器搜索 MiniProfiler.Mvc5和MiniProfiler.EF6安装. 2. 在Global.asax中添加配置代码 protected ...
- 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...
- 使用ML.NET预测纽约出租车费
有了上一篇<.NET Core玩转机器学习>打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型. 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程 ...
- 如何为ASP.NET Core的强类型配置对象添加验证
原文: Adding validation to strongly typed configuration objects in ASP.NET Core 作者: Andrew Lock 译文: La ...
- 前端笔记之JavaScript(八)关于元素&计算后的样式
一.获取元素方法(JS选择器) 1.1概述 得到id元素的方法 document.getElementById() 得到一个元素.事实上,还有一个方法可以得到标签元素,并且得到的是多个元素: docu ...
- Chapter 5 Blood Type——22
Suddenly the sidewalk disappeared from beneath me. My eyes flew open in shock. 突然我身下的人行道消失了.我飞快的睁开眼睛 ...
- nodejs搭建web项目
如果要使用cnpm可安装淘宝cnpm镜像(事实证明不建议使用,因为cnpm和npm有一些包不同步)npm install -g cnpm --registry=https://registry.npm ...
- 详解 Symbol 类型
ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制,保证 ...
- 【c#】RabbitMQ学习文档(一)Hello World
一.简介 RabbitMQ是一个消息的代理器,用于接收和发送消息,你可以这样想,他就是一个邮局,当您把需要寄送的邮件投递到邮筒之时,你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人的手里,不 ...
- 如何用sysbench做好IO性能测试
sysbench 是一个非常经典的综合性能测试工具,通常都用它来做数据库的性能压测,但也可以用来做CPU,IO的性能测试.而对于IO测试,不是很推荐sysbench,倒不是说它有错误,工具本身没有任何 ...