2、虚拟机会将虚拟硬件、内核(即 *** 作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种 *** 作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的 *** 作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的 *** 作系统,再搭建一层Runtime,然后供应用程序运行。
3、对于容器环境来说,不需要安装主机 *** 作系统,直接将容器层(比如LXC或libcontainer)安装在主机 *** 作系统(通常是Linux变种)之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。但是,每个容器化应用都会共享相同的 *** 作系统(单个主机 *** 作系统)。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。
4、相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的 *** 作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个 *** 作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容 *** 作系统内核的其他服务器当中,这样就会给迁移选择带来限制。因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包,所以每套容器都拥有自己的隔离化用户空间,从而使得多套容器能够运行在同一主机系统之上。我们可以看到全部 *** 作系统层级的架构都可实现跨容器共享,惟一需要独立构建的就是二进制文件与库。正因为如此,容器才拥有极为出色的轻量化特性。服务器通俗的讲就是一种空间,可以存放东西的空间,还有可以说服务器就是一台性能更高,计算能力更强,而且一直通着电的电脑。
说它是一种空间是因为服务器可以存放东西,一般服务器的用法就是运行项目,但其实可以用的方向很多,比如用于当做一个电子档案库,存放文件,或者用作是云端的一个硬盘去使用,部署FTP,上传下载文件。
为什么说服务器是电脑呢,其本质其实就是一台超级电脑,电脑是用来计算的,可以运行软件,存储数据,提供计算服务。但是往往都是使用服务器来提供计算和服务,原因就是因为我们日常用的网站,手机软件,需要持续不断的访问,或者说需要在任意的时间都可以持续的访问,如果仅仅是电脑的话,一方面散热能力不行,一方面持续的运行会加快寿命的缩短,所谓术业有专攻,所以服务器就主要用来运行程序。
专业一点说服务器就是提供服务的机器,如何提供服务,提供什么服务。这里的服务指的就是我们日常用的各种服务软件,那提供服务的方式举个例子,比如一个网站,就是先部署网站的数据库,运行网站的容器,例如tomcat,网站项目,java的话就是war包,然后启动起来之后就可以对外提供服务了。严格意义上Web服务器只负责处理>
我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。
虚拟机
先说说什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个 *** 作系统,每个 *** 作系统之间是隔离的。
说起来有些绕,那么我们看看虚拟机的架构图,就容易理解了。例如我们要在一台物理机器运行三个Java项目,彼此之间隔离。
从下往上看, 解释起来其实很简单:
最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;
Docker
再说说什么是Docker,找了一句官方的解释:Docker是开源的应用容器引擎。是不是又一头雾水?我们还是先看看Docker的架构图。
依然从下往上看:
Docker和虚拟机的区别
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
谢谢了!docker容器域虚拟机有什么区别呢?
docker容器: Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
虚拟机: 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟系统通过生成现有 *** 作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有 *** 作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类 *** 作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有 *** 作系统相同的环境,而虚拟机则可以模拟出其他种类的 *** 作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。 对比虚拟机与DockerDocker守护进程可以直接与主 *** 作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主 *** 作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从 *** 作系统,Docker可以节省大量的磁盘空间以及其他系统资源。说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。
docker解决的主要问题
有过后台开发经验的同学,一定遇到过下面这些问题:
那么,有了docker,这些问题都将不复存在。
什么是dockerDocker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
如果不好理解,我们再拿集装箱打个比方。
集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。
docker里的几个基本概念 与传统虚拟化的区别这里我们顺便讲一下传统虚拟化。
我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。
在IT行业从业多年,也算从看着时代从物理服务器走向虚拟化云计算时代,又准备进入Docker时代,作为下一代虚拟化技术,Docker正改变着整个行业开发、测试、部署应用的方式,至于虚拟化技术和docker技术到底有什么不同,下面来分析一下。
顾名思义,虚拟化技术是将物理资源以某种技术虚拟成资源池的形式,主要有一虚多和多虚一两种形式,比如个人电脑安装Vmware软件,可以在这个软件上安装其他Win系统、MacOS、Linux系统等,实现一台电脑/笔记本承载多个系统的优点,目前苹果笔记本用户双系统解决方案也以虚拟机为主,普通Windows用户可能需求量不大,而技术人员基本是必备软件了。
从企业层面来看,多虚一为主要形式,也就是将大量物理服务器集群虚拟化,形成一个资源池,在这个资源上创建各种不同的虚拟机,实现灵活部署。
其实docker和虚拟技术很像,但又有一些不同点,一方面是两个技术的层级上,虚拟机一般是底层硬件Hardware支撑,上层是虚拟管理系统Hypervisor层,在上层开启不同的VM业务,如果需要将这些业务进行隔离,需要每个VM启动客户机 *** 作系统,非常消耗资源。
Docker完全不同,底层有硬件和Host OS系统支撑,比如Windows/MacOS/Linux,中间抛去了臃肿的系统,而是以Docker守护进程代替,上层建立不同的容器,不同的应用镜像打包在不同的容器中,他们互相隔离。
docker设计小巧,部署迁移快速,运行高效,应用之间相互独立,管理人员可以看到所有容器的内容,虚拟化技术比较臃肿,不论什么应用都需要先创建新的系统,并且并非按照应用隔离,而是按照系统隔离,管理员无法看到系统内部信息。
举个例子,Docker就是手机中的各种APP,只需要一个系统就可以下载自己所需的应用,但是虚拟化技术相当于你的苹果手机安装一个庞大软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应用,比较麻烦。
但两者没有绝对的好坏,主要还是看应用场景,根据不同的需求选择不同的解决方案即可。
Docker与虚拟机介绍
虚拟机: 传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的 *** 作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用,每一个虚拟机包括应用,必要的二进制和库以及一个完整的用户 *** 作系统。
容器(Docker): 容器与的宿主机共享硬件资源及 *** 作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机 *** 作系统中,在用户空间以分离的进程运行。
虚拟机和容器都是在硬件和 *** 作系统以上的,虚拟机有Hypervisor层(“翻译”客户系统和宿主系统之间的指令),Hypervisor是整个虚拟机的核心所在。他为虚拟机提供了虚拟的运行平台,管理虚拟机的 *** 作系统运行。每个虚拟机都有自己的系统和系统库以及应用。
容器没有Hypervisor层,它是内核级的虚拟化,并且每个容器与宿主机共享硬件资源及 *** 作系统,因此Docker容器不存在Hypervisor层带来性能的损耗,因此可以实现更高的性能和效率。但是虚拟机技术也有其优势,能为应用提供一个更加隔离的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。
虚拟机是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离。从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用 Docker Engine 进行调度和隔离,所有应用共用主机 *** 作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近物理机原生性能。
Docker的优势持续部署与测试
更高效的利用系统资源
交付物标准化
应用隔离
高性能
最近刚好看了一部分docker的东西
先上图,vm与docker框架,直观上来讲 vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源 ,所以资源利用率相对docker低也是比较容易理解的
其次,openstack能够以10台/min的速度创建虚拟机,在docker面前就弱爆了,因为docker是利用宿主机的系统内核,所以可以做到在几秒钟之内创建大量容器,它们的 启动速度是在数量级上的差距 。
最后找了一个IBM测试案例,关于计算能力的,对于kvm为什么会有这么大的性能损失,一方面是因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。比如对于本次实验的平台,实际的CPU架构是2块物理CPU,每块CPU拥有16个核,共32个核,采用的是NUMA架构;而虚拟机则将CPU虚拟化成一块拥有32个核的CPU。这就导致了计算程序在进行计算时无法根据实际的CPU架构进行优化,大大减低了计算效率。
从计算机软件层级来看,docker和虚拟机的区别在于虚拟的软件层级不一样。虚拟机基于同一个硬件,模拟出不同的 *** 作系统;而docker基于同一个 *** 作系统,模拟出不同的运行时环境。我们依次来看:
1 先看看计算机的软件层次,从下到上依次为: *** 作系统内核、文件系统(运行时环境)、上层APP。
2 虚拟机运行在同一个硬件上,可以虚拟出不同的 *** 作系统。比如vmware可以在一台pc上既模拟出一个windows系统,同时也可以模拟出一台linux系统。 借助虚拟机,两个不同的 *** 作系统可以同时运行在同一个硬件之上。
3 而docker则运行在同一个 *** 作系统内核上,虚拟出不同的文件系统或者也可以叫做运行时环境。不同的运行时环境,其对应的文件系统也是不同的。比如java的运行时环境就要求文件系统里存在jdk,而golang的运行时环境则需要有go相关的底层库。在docker上既可以虚拟出一个java的运行时环境,也可以虚拟出go的运行时环境。甚至, 基于docker,你既可以虚拟出一个java-16的运行时候环境,也可以虚拟出一个java-18的运行时环境,而这两个运行时环境可以同时运行在同一个 *** 作系统之上 。
很高兴为您解答。
Docker悄无声息的来到我们身边,正在改变我们的开发、测试、部署应用的方式,那么,到底Docker和虚拟机VM有什么区别,我们通过一个图,再配上简明扼要的文字就很容易理解两者之间的区别。
首先要明确:Docker是一个开源的应用容器引擎,而VM是一个完整的 *** 作系统。
1、使用VM运行多个相互隔离的应用
解释:
可以看到,APP #1、APP #2、APP #3如果要独立运行,相互隔离,则需要安装三个 *** 作系统。如果一个虚拟 *** 作系统按1G算,总共需要占3G的存储空间,更槽糕的是,光运行这三个 *** 作系统就要耗费很大的内存和CPU。
2、使用Docker运行多个相互隔离的应用
DOCKER DAEMON:Docker守护进程,负责管理Docker容器。
Docker运行在主 *** 作系统之上,APP #1、APP #2、APP #3在Docker中是完全隔离的、相经独立的容器。跟VM相比,省去了庞大的 *** 作系统,耗费硬件资源较少。
除了以上架构上的差异之外,VM和Docker在启动时间上也有着很大的差距,VM启动大概需要2分钟的时间,而Docker启动则只需2秒。
随着互联网的发展,Docker的应用会越来越广,Build once,run anywhere,一次构建,到处运行。
docker是虚拟化软件运行环境。
虚拟机是虚拟化硬件。
层次不同。
虚拟机更消耗资源。但带来的是一个完整的可以不同于宿主机的 *** 作系统。因为和宿主机 *** 作系统不共享任何东西(包括硬件,内核,动态库,环境变量等),它的隔离性更好。
docker更轻量级,共享使用宿主机的硬件和内核,资源占用更少。它在宿主机内核基础上虚拟化了一个不同于宿主机的软件运行环境,比如动态库,环境变量等。可以说,docker和宿主机之间除了内核共享,其它都可以不同。
Docker容器启动、停止速度快rr Docker容器对资源需求较少rr Docker *** 作简单rr Dockerfile自动构建和部署方便
两者是包含和被包含的关系,主机是一个统称,所有服务器都是主机,但并非所有主机都是服务器。主机和服务器的主要差别在于,主机是连接到网络的计算机或其他设备,而服务器是连接到网络中提供服务的软件或硬件设备。
什么是计算机网络?
计算机网络是互连在一起,以通信和共享资源为目的的计算机的集合。而主机和服务器就是计算机网络中的两个术语。在计算机网络中定义的计算机,不仅仅只是台式机、笔记本电脑等,而是包括所有智能计算设备,比如智能手机、智能家电等。所以一般情况下,计算机和主机可以理解为等价的。
什么是主机?
狭义上的主机,一般是指台式机除掉显示器、鼠标键盘之外的那个容器,这个主机一般用于放置主板、电源、硬盘等硬件设备。
在广义上,任何可以连接到网络的计算机设备都是主机,包括但不限于台式机、笔记本电脑、智能手机等。网络上每个主机的地位是平等,每个主机都有一个IP地址,不同的主机通过IP地址进行识别和进行通信。
什么是服务器?
服务器也是主机,但服务器是向网络中的其他设备提供服务的软件或硬件设备。包括软件设备的原因,是虚拟机云主机也是主机。客户端是获得服务器服务的软件或硬件。一台服务器可以连接多个客户端,而一个客户端可以连接到多个服务器。客户端和服务端是相对,当一台服务器向另外一台服务器获取服务时,它也是客户端。
一般情况下,服务器用于一对多的情况下提供服务,所以它的硬件配置比普通计算机更好,比普通计算机运行更快、负载更高、价格更贵。
在一些小型公司,在费用紧缺的情况下,通常会使用普通台式机启用共享,为相同部门或不同部门之间共享资料,这时这台台式机就可以视为一台服务器,它在提供服务。
服务器按照提供服务的不同,可以分为Web服务器、文件服务器、数据库服务器、邮件服务器和应用程序服务器等。
主机和服务器的差异
所以可以总结一下,主机和服务器的区别:
定义上的差别主机是任何可以连接到网络的计算机设备,而服务器是向网络中的其他设备提供服务的软件或硬件设备。
功能上的差别服务器一般是指提供服务的主机
总结
主机是一个统称,所有服务器都是主机,但并非所有主机都是服务器。主机和服务器的主要差别在于,主机是连接到网络的计算机或其他设备,而服务器是连接到网络中提供服务的软件或硬件设备。
容器: 容器是轻量级的 *** 作系统级虚拟化,可以让我们在一个资源隔离的进程中运行应用及其依赖项 。运行应用程序所必需的组件都将打包成一个镜像并可以复用。执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存、CPU 以及磁盘,这就保证了容器内进程不能监控容器外的任何进程。容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,而是对进程进行封装隔离。
虚拟机:通常包含整个 *** 作系统及其应用程序,同时也需要运行一个 hypervisor 来控制虚拟机。
虚拟一套硬件后, 在其上运行一个完整 *** 作系统,在该系统上在运行所需应用进程
容量大小:
虚拟机:大小一般是几个G,
容器:容器是轻量级的而且大小在 M 以内
性能:
虚拟机:启动 *** 作系统以及初始化托管应用会花费几分钟的时间
容器:表现更加出色,并且几乎可以秒启动。
架构:
1 敏捷环境:容器技术最大的优点是创建容器实例比创建虚拟机示例快得多,容器轻量级的脚本可以从性能和大小方面减少开销。
2 提高生产力:容器通过移除跨服务依赖和冲突提高了开发者的生产力。每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步。
3 版本控制:每一个容器的镜像都有版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异等等。
4 运行环境可移植:容器封装了所有运行应用程序所必需的相关的细节比如应用依赖以及 *** 作系统。这就使得镜像从一个环境移植到另外一个环境更加灵活。比如,同一个镜像可以在 Windows 或 Linux 或者 开发、测试或 stage 环境中运行。
5 标准化: 大多数容器基于开放标准,可以运行在所有主流 Linux 发行版、Microsoft 平台等等。
6 安全:容器之间的进程是相互隔离的,其中的基础设施亦是如此。这样其中一个容器的升级或者变化不会影响其他容器。
1 复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器。
2 原生 Linux 支持:大多数容器技术,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中运行容器,在 Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性。
3 不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题。
*** 作系统容器 :如维基百科中所述,“ *** 作系统层虚拟化是一种计算机虚拟化技术,这种技术将 *** 作系统内核虚拟化,可以允许多个独立用户空间的存在,而不是只有一个。这些实例有时会被称为容器、虚拟引擎、虚拟专用服务器或是 jails(FreeBSD jail 或者 chroot jail)。从运行在容器中的程序角度来看,这些实例就如同真正的计算机。”
如上所述,容器共享宿主机的内核,但是提供用户空间隔离。我们可以像在宿主机 *** 作系统上一样,在容器中安装、配置以及运行应用程序。相似的是,分配给容器的资源仅对自己可见。就好比是,任何虚拟机不能获取其他虚拟机的资源。
当需要配置大量具有相同配置的 *** 作系统时, *** 作系统容器就会非常有用。因此,容器有助于创建模板,可以用于创建与另一个 *** 作系统类似风格的容器。
要创建 *** 作系统容器,我们可以利用容器技术,如 LXC,OpenVZ,Linux VServer,BSD Jails 和 Solaris 区域。
应用容器 :如维基百科所述,“应用程序虚拟化是从其所执行的底层 *** 作系统封装计算机程序的软件技术。一个完全虚拟化的应用,尽管仍像原来一样执行,但是并不会进行传统意义上的安装。应用在运行时的行为就像它直接与原始 *** 作系统以及 *** 作系统所管理的所有资源进行交互一样,但可以实现不同程度的隔离或者沙盒化。”
在这种情况下,术语 “虚拟化” 是指被封装的工件(应用程序),这与其在硬件虚拟化中的含义截然不同,其中它涉及被抽象的工件(物理硬件)。
应用程序容器旨在作为单个进程进行打包和运行服务,而在 OS 容器中,可以运行多个服务和进程。
容器技术如 Docker 和 Rocket 就是应用程序容器的示例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)