什么是 vagrant ? Vagrant 是一个跨平台的虚拟机构造工具,能够通过 vagrantfile 描述虚拟机并将其部署到 hypervisor 上。
什么是 docker ? Docker 是一个 linux 上的 linux container 构造工具,能够通过 dockerfile 来定义一个 container ,并将其部署到任何运行 docker 的主机上。
Vagrant 和 docker 都能够通过一个配置描述文件来构造一个运行环境,然而区别在于 vagrant 构造一个虚拟机需要几分钟而 docker 构造一个 linux container 只需要不到一秒钟。
事实上, container 和虚拟机之间的界限并不清晰,另外由于 docker 基于 linux 内核,所以如果你想在 OSX 上运行 docker,通常需要利用 vagrant 构造一个虚拟机并在其中运行 docker。这个步骤只需要几行命令:
$ mkdir ubuntu
$ cd ubuntu
$ vagrant init ubuntu
$ vagrant up
近期发布的 vagrant 1.5 版本加入了很多 新的特性 , 其中包含 vagrant cloud。Vagrant cloud 是一个 vagrant 的托管服务,能够用于发现、分享 vagrant box,并且能够管理 vagrant shares (反向代理你的 vagrant box 的所有端口)
译者注:vagrant share 能够让任何人从任何地方访问将本地的 vagrant 虚拟机。基本原理是在你的 vgrant 主机上(非虚拟机)开启一个本地代理, 本地代理会连接到 vagrant cloud 上的远程代理,后者与一个在 vagrant cloud 上的拥有公共 IP 的超小虚拟机关联,从而任何对公共 IP 的访问最终都被代理到本地的虚拟机。
对于 docker 来说最酷的地方莫过于使得构造和封装 linux container 环境变得可协作。用户可以通过
在一台笔记本上执行 docker commit
和 docker push
来分享本地的 container,任何人都可以通过 docker pull
和 docker run
构造出完全一样的 linux container 环境。这是一次革命性的变化,就如同将 linux 环境加入了 git 一样的版本控制系统。
这也是为什么 vagrant cloud 的意义非凡。Vagrant cloud 引入类似的协作机制,将虚拟机变的可以更方便的分享。和 docker pull
一样,
通过 vagrant box update
,你可以升级你的虚拟机,vagrant cloud 甚至可以托管你的私有虚拟机镜像。
现在再来看 vagrant 和 docker 之前的一些差异:
但是这意味着 docker 没有市场了吗?
不,docker 除了 docker commit
来分享之外还有更多的特性:
不过有明显迹象表明虚拟机将会在这些方面有所改善。
虚拟机和 linux container 的竞争十分激烈,二者在竞争中相互启发并走向技术的进步。比如 vagrant 作者的 serf 项目可以很方便地在 linux container 环境中使用。
从总体趋势来看 linux container 和虚拟机应该是会同时存在并协同工作的。一些创业公司已经支持原生的 linux container 托管了,openstack 也如同支持虚拟机一样支持 docker container 了。
我们拭目以待 vagrant 和 docker 能够更多的一起工作并且更好地发挥各自优势。
相比正文,Solomon Hykes在原文的评论更加有趣,以下为节选
译者十分认同 Solomon Hykes 的观点,目前的 docker 的发展趋势更多的是构造 app runtime,而非 vagrant 强调的 build time。尽管 docker 一开始是以 linux container 为切入点的,但是从 dotcloud 的角度来讲,更希望其成为一个能够提供更多 PaaS 功能(更关注 runtime )的平台。
或是邮件反馈可也:
askdama[AT]googlegroups.com
订阅 substack 体验古早写作:
关注公众号, 持续获得相关各种嗯哼: