虚拟机与Docker有何不同?

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

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

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

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

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

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

理解虚拟机

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

虚拟机与Docker有何不同?

从下到上理解上图:

  • 基础设施(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,都会需要安装对应的依赖库。
  • 应用 。安装依赖之后,就可以在各个 从操作系统 分别运行应用了,这样各个应用就是相互隔离的。

理解Docker容器

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

虚拟机与Docker有何不同?

不难发现,相比于 虚拟机 , Docker 要简洁很多。因为我们不需要运行一个臃肿的 从操作系统 了。

从下到上理解上图:

  • 基础设施(Infrastructure) 。
  • 主操作系统(Host Operating System) 。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。
  • Docker守护进程(Docker Daemon) 。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
  • 各种依赖 。对于Docker,应用的所有依赖都打包在 Docker镜像 中, Docker容器 是基于 Docker镜像 创建的。
  • 应用 。应用的源代码与它的依赖都打包在 Docker镜像 中,不同的应用需要不同的 Docker镜像 。不同的应用运行在不同的 Docker容器 中,它们是相互隔离的。

对比虚拟机与Docker

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

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

如果你对Docker感兴趣的话,不妨学习一下 Dive Into Docker course 。

责任编辑:未丽燕 来源: Fundebug博客
相关推荐

2018-05-03 14:48:22

Docker容器虚拟机

2015-08-10 09:47:24

SDS存储虚拟化

2012-02-29 09:50:52

云计算虚拟化

2021-12-02 14:10:34

ChromeChromium浏览器

2019-10-28 11:47:15

Docker虚拟机操作系统

2010-04-27 13:58:09

云计算虚拟化

2020-09-25 18:10:06

Python 开发编程语言

2023-06-03 00:04:10

容器虚拟机VM

2023-12-12 11:45:54

云服务数据科学家云计算

2021-07-02 15:28:55

LTE5G网络

2017-01-13 16:26:56

开发

2011-02-24 11:13:04

2018-05-31 08:17:53

RAIDNAS重叠

2018-11-14 22:14:59

2023-04-17 17:56:38

5G

2015-08-20 14:29:38

Docker虚拟机

2019-08-27 16:23:41

Docker虚拟化虚拟机

2011-12-21 09:01:28

云计算编程开发

2010-07-28 10:09:01

2010-08-06 18:23:43

DB2常用函数
点赞
收藏

51CTO技术栈公众号