虚拟机与Docker有何不同?

首先,大家需要明确一点,Docker容器不是虚拟机。 2014年,当我第一次接触Docker的时候,我把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Docker不停地给大家宣传,”虚拟机需要数分钟启动,而Docker容器只需要50毫秒”。 然而,Docker容器并非虚拟机,我们不妨来比较一下它们。 理解虚拟机 使用虚拟机运行多个相互隔离的应用时,如下图: ![](/uploads/article/2017/06/03/20170603141348_6768.jpg) #### 从下到上理解上图: * **基础设施(Infrastructure)**。它可以是你的**个人电脑**,数据中心的**服务器**,或者是**云主机**。 * **主操作系统(Host Operating System)**。你的个人电脑之上,运行的可能是**MacOS**,**Windows**或者某个**Linux**发行版。 * **虚拟机管理系统(Hypervisor)**。利用Hypervisor,可以在**主操作系统**之上运行多个不同的**从操作系统**。类型1的Hypervisor有支持MacOS的**HyperKit**,支持Windows的**Hyper-V**以及支持Linux的**KVM**。类型2的Hypervisor有VirtualBox和VMWare。 * **从操作系统(Guest Operating System)**。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个**从操作系统**,也就是3个**虚拟机**。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。 * **各种依赖**。每一个**从操作系统**都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装**libpq-dev**;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。 * **应用**。安装依赖之后,就可以在各个**从操作系统**分别运行应用了,这样各个应用就是相互隔离的。 ### [](https://blog.fundebug.com/2017/05/31/docker-and-vm/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#理解Docker容器)理解Docker容器 使用**Docker容器**运行多个相互隔离的应用时,如下图: ![](/uploads/article/2017/06/03/20170603141756_5797.jpg) 不难发现,相比于**虚拟机**,**Docker**要简洁很多。因为我们不需要运行一个臃肿的**从操作系统**了。 #### [](https://blog.fundebug.com/2017/05/31/docker-and-vm/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#从下到上理解上图-1)从下到上理解上图: * **基础设施(Infrastructure)**。 * **主操作系统(Host Operating System)**。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。 * **Docker守护进程(Docker Daemon)**。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。 * **各种依赖**。对于Docker,应用的所有依赖都打包在**Docker镜像**中,**Docker容器**是基于**Docker镜像**创建的。 * **应用**。应用的源代码与它的依赖都打包在**Docker镜像**中,不同的应用需要不同的**Docker镜像**。不同的应用运行在不同的**Docker容器**中,它们是相互隔离的。 ### [](https://blog.fundebug.com/2017/05/31/docker-and-vm/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#对比虚拟机与Docker)对比虚拟机与Docker **Docker守护进程**可以直接与**主操作系统**进行通信,为各个**Docker容器**分配资源;它还可以将容器与**主操作系统**隔离,并将各个容器互相隔离。**虚拟机**启动需要数分钟,而**Docker容器**可以在数毫秒内启动。由于没有臃肿的**从操作系统**,Docker可以节省大量的磁盘空间以及其他系统资源。 说了这么多Docker的优势,大家也没有必要完全否定**虚拟机**技术,因为两者有不同的使用场景。**虚拟机**更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而**Docker**通常用于隔离不同的应用,例如**前端**,**后端**以及**数据库**。
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2022

备案号:京ICP备15003423号-3