我应该使用Vagrant还是Docker来创建一个隔离的环境?[闭门]

关闭。这个问题需要更加关注。它目前不接受答案。

<hr class=“my12大纲无baw0 bb bc-POWER-400”/

想改进此问题吗?编辑此帖子,更新问题,使其只关注一个问题。

四年前关闭

改进这个问题

我使用Ubuntu进行开发和部署,需要创建一个隔离的环境

为此,我正在考虑流浪汉或码头工人。这些解决方案的优缺点是什么,或者如何比较

免责声明:我写了Vagrant!但因为我写了Vagrant,我大部分时间都生活在DevOps的世界里,其中包括Docker这样的软件。我与许多使用Vagrant的公司合作,许多公司使用Docker,我看到了两者的相互作用。

在我说得太多之前,有一个直接的答案:在您的特定场景中(您自己单独工作,在Linux上工作,在生产中使用Docker),您可以坚持使用Docker并简化事情。在许多其他场景中(我将进一步讨论),这并不那么容易

直接将Vagrant与Docker进行比较是不正确的。在某些情况下,它们确实重叠,而在绝大多数情况下,它们并不重叠。实际上,比较Vagrant与Boot2Docker(可以运行Docker的最小操作系统)更合适.Vagrant在抽象方面比Docker高一级,所以在大多数情况下这不是一个公平的比较

Vagrant为开发目的启动运行应用程序/服务的东西。这可以在VirtualBox、VMware上运行。它可以像AWS、OpenStack一样远程运行。在这些应用程序中,如果您使用容器,Vagrant不在乎,并接受这一点:例如,它可以自动安装、下拉、构建和运行Docker容器。使用Vagrant 1.6,Vagrant可以基于docker的开发环境,并支持在Linux、Mac和Windows上使用docker与Vagrant具有相同的工作流程。Vagrant在这里不试图取代docker,而是采用docker实践

Docker专门运行Docker容器。如果您直接与Vagrant进行比较:它是一个更具体的(只能运行Docker容器),灵活性较低(需要Linux或Linux主机)解决方案。当然,如果您谈论的是生产或CI,那么就无法与Vagrant相比!Vagrant不生活在这些环境中,因此应该使用Docker

如果您的组织只为所有项目运行Docker容器,并且只有在Linux上运行的开发人员,那么好吧,Docker肯定可以为您工作

否则,我看不到单独使用Docker的好处,因为你失去了Vagrant提供的很多东西,这些东西有真正的业务/生产力好处:

  • Vagrant可以启动VirtualBox、VMware、AWS、OpenStack等机器。无论您需要什么,Vagrant都可以启动它。如果您使用Docker,Vagrant可以在其中任何一台机器上安装Docker,以便您可以使用它们

  • Vagrant是所有项目的单一工作流。换句话说,无论项目是否在Docker容器中,人们都必须学会运行项目。例如,如果将来有竞争对手直接与Docker竞争,Vagrant也可以运行该项目

  • Vagrant在Windows(回到XP)、Mac(回到10.5)和Linux(回到内核2.6)上工作。在这三种情况下,工作流程都是相同的。如果使用Docker,Vagrant可以启动一台机器(VM或remote),可以在这三个系统上运行Docker

  • Vagrant知道如何配置一些高级或非琐碎的东西,如网络和同步文件夹。例如:Vagrant知道如何将静态IP连接到计算机或转发端口,并且无论您使用什么系统(VirtualBox、VMware等),配置都是相同的对于同步文件夹,Vagrant提供多种机制将您的本地文件转移到远程计算机(VirtualBox共享文件夹、NFS、rsync、Samba[plugin]等)。如果您使用Docker,即使Docker带有没有Vagrant的VM,您也必须手动执行此操作,否则在这种情况下,他们将不得不重新发明Vagrant

  • Vagrant 1.6对基于docker的开发环境具有一流的支持。这不会在Linux上启动虚拟机,而是会在Mac和Windows上自动启动虚拟机。最终结果是,在所有平台上使用docker都是统一的,而Vagrant仍然处理诸如netw之类的繁琐细节工作、同步文件夹等

为了解决我听到的支持使用Docker而不是Vagrant的具体反论点:

  • “运动部件较少“-是的,如果每个项目都专门使用Docker,则可以。即使如此,Docker锁定也牺牲了灵活性。如果您决定在过去、现在或将来的任何项目中不使用Docker,那么您将拥有更多的活动部件。如果你用过“流浪者”,你就有一个活动的部分来支撑其余的部分

  • “它更快!”-一旦你有了可以运行Linux容器的主机,Docker肯定会比任何虚拟机都更快地运行容器。但启动虚拟机(或远程机)是一次性成本。一天中,大多数流浪用户从未真正破坏过他们的虚拟机。对于开发环境来说,这是一种奇怪的优化。在Docker非常出色的生产环境中,我理解快速旋转容器的必要性

我希望现在可以清楚地看到,把码头工人比作流浪汉是非常困难的,我认为这是不正确的。对于dev环境,Vagrant更抽象、更一般。Docker(以及您可以让它表现得像Vagrant的各种方式)是Vagrant的一个特定用例,忽略了Vagrant提供的所有其他功能

总之:在高度特定的用例中,Docker无疑是Vagrant的可能替代品。在大多数用例中,情况并非如此。流浪汉不会妨碍你使用码头工人;事实上,它尽其所能让这种体验更加顺畅。如果你发现这不是真的,我很乐意接受改进的建议,因为流浪汉的目标是在任何系统中都能同样出色地工作

希望这能把事情弄清楚

发表评论