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和传统虚拟机的对比是明显的:

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

Vagrant vs Docker

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

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

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

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

参考资料

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