docker容器与虚拟机有啥区别?

author author     2023-03-03     512

关键词:

参考技术A

我们单位最近在推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,这些问题都将不复存在。

什么是docker

Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

如果不好理解,我们再拿集装箱打个比方。

集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。

docker里的几个基本概念 与传统虚拟化的区别

这里我们顺便讲一下传统虚拟化。

我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。

在IT行业从业多年,也算从看着时代从物理服务器走向虚拟化云计算时代,又准备进入Docker时代,作为下一代虚拟化技术,Docker正改变着整个行业开发、测试、部署应用的方式,至于虚拟化技术和docker技术到底有什么不同,下面来分析一下。


01 什么是虚拟化?

顾名思义,虚拟化技术是将物理资源以某种技术虚拟成资源池的形式,主要有一虚多和多虚一两种形式,比如个人电脑安装Vmware软件,可以在这个软件上安装其他Win系统、MacOS、Linux系统等,实现一台电脑/笔记本承载多个系统的优点,目前苹果笔记本用户双系统解决方案也以虚拟机为主,普通Windows用户可能需求量不大,而技术人员基本是必备软件了。


从企业层面来看,多虚一为主要形式,也就是将大量物理服务器集群虚拟化,形成一个资源池,在这个资源上创建各种不同的虚拟机,实现灵活部署。


02 什么是Docker

其实docker和虚拟技术很像,但又有一些不同点,一方面是两个技术的层级上,虚拟机一般是底层硬件Hardware支撑,上层是虚拟管理系统Hypervisor层,在上层开启不同的VM业务,如果需要将这些业务进行隔离,需要每个VM启动客户机操作系统,非常消耗资源。



Docker完全不同,底层有硬件和Host OS系统支撑,比如Windows/MacOS/Linux,中间抛去了臃肿的系统,而是以Docker守护进程代替,上层建立不同的容器,不同的应用镜像打包在不同的容器中,他们互相隔离。


03 虚拟化与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-1.6的运行时候环境,也可以虚拟出一个java-1.8的运行时环境,而这两个运行时环境可以同时运行在同一个操作系统之上

很高兴为您解答。

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自动构建和部署方便

docker跟一般的虚拟机有啥区别

Docker和虚拟机有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣势:1、Docker启动快速属于秒级别,虚拟机通常需要几分钟去启动;2、Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交... 查看详情

docker与虚拟机有何不同

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

docker和虚拟机有什什么区别?

...要的二进制和库,以及一个完整的用户操作系统。2、Docker:容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态 查看详情

docker容器与虚拟机区别

...轻量级的虚拟化,实现进程和资源的隔离。从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用DockerEngine进行调度和隔离 查看详情

在 Azure 中,两个适用于 Windows 的数据科学虚拟机有啥区别?

】在Azure中,两个适用于Windows的数据科学虚拟机有啥区别?【英文标题】:InAzure,whatisthedifferencebetweenthetwoDataScienceVirtualMachinesforWindows?在Azure中,两个适用于Windows的数据科学虚拟机有什么区别?【发布时间】:2017-10-0305:44:02【问... 查看详情

docker跟一般的虚拟机有什么区别

这是StackOverflow上的一个问题及其回答的翻译(原文:Docker.io跟一般的虚拟机有什么区别?)。原文主要回答了三个问题:1.Docker.io的基本原理是什么?2.为什么在docker中部署软件很方便?3.docker是如何保存系统镜像的?前两个问... 查看详情

容器云是什么意思?与堡垒机有什么区别?

容器云是什么意思?与堡垒机有什么区别?对于这两个问题,有很多运维小伙伴都不是很了解,因此我们小编就来给大家详细科普一下啦!让更多运维小伙伴知道啦!容器云是什么意思?容器云是以容... 查看详情

docker 镜像的大小和虚拟大小有啥区别?

】docker镜像的大小和虚拟大小有啥区别?【英文标题】:Whatisthedifferencebetweenthesizeandthevirtualsizeofthedockerimages?docker镜像的大小和虚拟大小有什么区别?【发布时间】:2016-10-2407:59:30【问题描述】:我有一个私有注册表,用于存储... 查看详情

docker系列之一:初见docker

什么是docker?docker是目前linux最流行的容器技术,Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样优点:占用资源... 查看详情

k8s与docker有啥关系

简要介绍:  官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。  官方定义2:k8s是一个开源的容器集群管理系统... 查看详情

k8s与docker有啥关系

.../haha-9527/p/10463466.html 简要介绍:  官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。  官方定义2:k8s是一个开... 查看详情

在 Docker 中,容器和镜像有啥区别? [复制]

】在Docker中,容器和镜像有啥区别?[复制]【英文标题】:InDocker,what\'sthedifferencebetweenacontainerandanimage?[duplicate]在Docker中,容器和镜像有什么区别?[复制]【发布时间】:2014-02-2506:07:31【问题描述】:Docker中的容器和镜像有什么区... 查看详情

初学docker容器(代码片段)

初学docker容器docker是什么docker与虚拟机的区别docker使用场景docker的原理docker三个统一和docker三大组件docker引擎docker-server配置文件docker的部署(20版)docker镜像操作docker是什么docker是一种轻量级的虚拟机在linux容器中运行应... 查看详情

docker深入浅出系列|容器初体验(代码片段)

原文:Docker深入浅出系列|容器初体验目录Docker深入浅出系列|容器初体验教程目标预备工作容器与虚拟化技术什么是Docker为什么要用Docker事例什么是容器镜像和容器容器与虚拟机的区别Vagrant与Docker的区别Docker引擎和架构Docker的镜... 查看详情

Docker 和 Python virtualenv 有啥区别?

】Docker和Pythonvirtualenv有啥区别?【英文标题】:What\'sthedifferencebetweenDockerandPythonvirtualenv?Docker和Pythonvirtualenv有什么区别?【发布时间】:2018-12-0103:58:24【问题描述】:根据我对Docker的了解,它是一种用于虚拟环境的工具。在他... 查看详情

docker常见面试题(个人整理)

一、通用问题1、Docker和虚拟机有啥不同?答:Docker是轻量级的沙盒,在其中运行的只是应用,虚拟机里面还有额外的系统。2、Docker安全么?答:Docker利用了Linux内核中很多安全特性来保证不同容器之间的隔离,并且通过签名机... 查看详情

docker

...建,到处执行;容器都非常轻量;容器的创建速度更快。DockerDocker并不等于容器(Container)Docker是以容器技术为核心的一套应用的构建,分发,执行的体系和生态。Docker生态的组成部分DockerEngineDockerHubDockerMachineD 查看详情

容器云是什么意思?与堡垒机有什么区别?

容器云是什么意思?与堡垒机有什么区别?对于这两个问题,有很多运维小伙伴都不是很了解,因此我们小编就来给大家详细科普一下啦!让更多运维小伙伴知道啦!容器云是什么意思?容器云是以容... 查看详情