Virtualization——虚拟化技术一直是计算机世界里面很重要的东西。 一般程序员听到这个词首先浮现出的就是Windows下面开着装着Linux系统的VMware。 而这个“装着Linux系统的VMware”就是我们口中的虚拟机(Virtual Machine)

虚拟机的主要好处是可以创建一个与主机操作系统不同的开发环境 (比如说一般的办公室都是Windows系统电脑)

但是开发的便利也会导致初始化一个这样的环境比较麻烦 而且当项目进行到一定程度,对环境本身一些变化有依赖的时候 从零开始创建虚拟机的开发环境会很繁琐 Vagrant就是一种用来解决这种繁琐的工具

Vagrant

根据官方的说法

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team

Vagrant本身不做虚拟机的工作,而是允许用户用VMware|VirtualBox|AWS来启动虚拟机镜像,他们管这叫Provider 当然了,镜像在Vagrant这里叫Box,而且很多公司已经做好了初始化的Box在这里可以直接用 Vagrant还提供了对Box的初始化脚本(Provisioning),这些初始化脚本可以用更多的脚本工具来完成对Box的配置

所以其实相比于传统的虚拟机,Vagrant是站在巨人的肩膀上,完成了自动化。

Docker

Docker项目的目标是实现轻量级的虚拟化方案,它和Virtual Machine最大的不同是Docker容器共享操作系统的内核 vm docker

所以Docker和传统虚拟机的对比是明显的:

特性 Docker Virtual Machine
启动 秒级 分钟级
大小 一般为MB 一般为GB
性能 近原生 弱于原生
单机支持量 上千个 一般几十个
内核 共享 独立

Vagrant vs Docker

讲道理的话,这两个不应该放在一起比较, 这两者的虚拟化级别并不是一个量级上的 而且这两者并不矛盾,假如你需要在Windows系统上搭载数个特定发行版的Linux系统,完全可以先用Vagrant + Virtual Machine再嵌数个Docker

硬要比较的话,假如你需要运行跨平台的虚拟,那就用Vagrant,否则,用Docker

最后再来张表对比一下吧:

特性 Virtual Machine Vagrant Docker
虚拟化 完全虚拟化 系统虚拟化
镜像管理 有,一般为GB 有,一般为MB
性能 弱于原生系统 弱于原生系统 接近原生系统
内核 独立 独立 共享

参考资料

  1. 《Docker —— 从入门到实践》
  2. Why Vagrant
  3. Docker不是虚拟机
  4. Shoud I use vagrant or docker