虚拟机和docker的异同

陈驰字新宇 陈驰字新宇     2022-09-03     755

关键词:

【摘要】各种虚拟机技术开启了云计算时代;而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢?

首先,大家需要明确一点,Docker容器不是虚拟机。

当我第一次接触Docker的时候,我把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Docker不停地给大家宣传,"虚拟机需要数分钟启动,而Docker容器只需要50毫秒"。

然而,Docker容器并非虚拟机,我们不妨来比较一下它们。

理解虚拟机

使用虚拟机运行多个相互隔离的应用时,如下图:

技术分享

从下到上理解上图:

  1. 基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。

  2. 主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。

  3. 虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。

  4. 从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。

  5. 各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。

  6. 应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

理解Docker容器

使用Docker容器运行多个相互隔离的应用时,如下图:

技术分享

  1. 主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker。

  2. Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。

  3. 各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

  4. 应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

对比虚拟机与Docker

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

docker,容器,虚拟机和红烧肉

Docker火了,有多火你自己看看下面的统计数据就知道了在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超过1000个产品开始使用docker。最... 查看详情

docker

虚拟机和容器:虚拟机有对硬件层的模拟和虚拟化;容器更多的是操作系统层面的虚拟化。容器的三个特点:容器具有不可变的特性,一次构建,到处执行;容器都非常轻量;容器的创建速度更快。DockerDocker并不等于容器(Contai... 查看详情

docker部署asp.netcore应用(代码片段)

...ocker前我们首先要简单了解一下容器的概念。MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序、必需的库或二进制文件以及完整的来宾操作系统,每台虚拟机都有一个单独... 查看详情

docker进阶学习(代码片段)

...0c;获取博客源码、数据结构与算法笔记、面试笔试题目录虚拟机和容器虚拟机和容器的区别认识Docker什么是DockerDocker的优点Docker的应用场景Docker核心Docker镜像Docker容器Docker仓库扩展问题Docker为什么快?安装D 查看详情

docker,容器,虚拟机和红烧肉

Docker火了,有多火你自己看看下面的统计数据就知道了在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超过1000个产品开始使用docker。最... 查看详情

docker学习笔记1(代码片段)

面试题传统虚拟机和Docker的区别?虚拟机虚拟机其实就是文件,不需要就删掉,操作系统和硬件之间逻辑不变虚拟机技术基于安装在主操作系统上的虚拟机管理软件,创建虚拟机还能虚拟出各种硬件,从操作系统资源占用多(内核,硬件,... 查看详情

docker-01-容器技术和docker简介

...浪费难于迁移和扩展可能会被限定硬件厂商2、之后出现虚拟化技术,虚拟机通过Hypervisor层实现资源的调度一个物理机可以部署多个app每个app运行在一个虚拟机里面虚拟化的优点:资源池:一个物理机的资源分配到了不同的虚拟... 查看详情

docker容器技术的核心原理(代码片段)

...离:Namespace2.2限制:Cgroup2.3rootfs2.4镜像分层3docker容器与虚拟机的对比1前言上图是百度的虚拟机和Docker容器的对比图,看着好像都差不多。那么虚拟机技术都这么成熟了,为什么Docker会火起来呢,Docker对比虚拟机等传统技术有什... 查看详情

docker从入门到实战

...器中,然后发布到主流的Linux、macOS、Windows机器上,实现虚拟化。Docker用Go语言写成,是一个重新定义了程序开发测试、交付和部署过程的开放平台。二:Docker与虚拟机的区别虚拟机和 查看详情

Java的虚拟机和CLR

】Java的虚拟机和CLR【英文标题】:Java\'sVirtualMachineandCLR【发布时间】:2010-10-0200:03:39【问题描述】:作为对名为DifferencesbetweenMSILandJavabytecode?的问题的一种跟进,Java虚拟机的工作方式与.NET框架公共语言运行时(CLR)有效吗?另外... 查看详情

虚拟机和liunx系统的装机

  虚拟机的安装   Linux系统的安装  Xshell的连接  查看详情

proxmox支持虚拟机和容器的虚拟化平台

ProxmoxVE是可以运行在虚拟机和容器的虚拟化平台。ProxmoxVE基于DebianLinux开发,并且完全开源。出于灵活性的考虑,ProxmoxVE同时支持两种虚拟化技术:KVM虚拟机和LXC容器。ProxmoxVE的一个重要设计目标就是尽可能简化管理... 查看详情

proxmox支持虚拟机和容器的虚拟化平台

ProxmoxVE是可以运行在虚拟机和容器的虚拟化平台。ProxmoxVE基于DebianLinux开发,并且完全开源。出于灵活性的考虑,ProxmoxVE同时支持两种虚拟化技术:KVM虚拟机和LXC容器。ProxmoxVE的一个重要设计目标就是尽可能简化管理... 查看详情

docker--------------实践(转载)

...治理等等系统。在容器化之前,基础设施主要以物理机和虚拟机为主。因此,我们私有云落地的主要工作是基础设施容器化,同时在应用的运维方面,兼用了之前的配套系统。利用之前的历史系统有利有弊,这些后面再谈。在这... 查看详情

虚拟机和无虚拟机 - 堆栈和跟踪

】虚拟机和无虚拟机-堆栈和跟踪【英文标题】:Virtualmachineandnonevirtualmachine-stackandtrace【发布时间】:2013-01-1405:24:14【问题描述】:我在这里阅读了很多问题,这些问题解释了堆栈和堆是什么,例如这个:Whatandwherearethestackandheap?... 查看详情

azurearm(10)arm模式下的虚拟机和classicmodel虚拟机的区别

...读,谢谢!   请读者注意,在AzureARM平台,有两种虚拟机模式:经典虚拟机和ARM虚拟机   ASM部署(经典虚拟机):  1.我们通过AzureClassicPortal: http://manage.windowsazure.cn,部署的都是ASM资源(经典虚拟机) 查看详情

虚拟机和真机桥接上网

 桥接:前提:你的宿主机必须能够上网的。。虚拟机和真机桥接:把虚拟机上网模式在设置中选择"桥接br0",然后重启,然后配置虚拟机的ip,网关(/etc/sysconfig/network),dns(/etc/resolv.conf)都设置真机一样(ip同一个网段),再重启n... 查看详情

虚拟机和物理机之间的传输的六种方法

1.在安装VMwaretools软件的情况下,物理机和虚拟机之间可以直接复制和粘贴;2.物理机硬盘直接共享给虚拟机 步骤:编辑虚拟机设置---->选项---->共享文件夹---->总是启用---->添加---->主路径选择---->完成3.网络共享 例... 查看详情