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

2024-01-06

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

为此,我正在考虑 Vagrant 或 Docker。这些解决方案有何优缺点,或者如何比较?


免责声明:我写了 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的开发环境 http://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html,并支持在 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 可以启动一台可以在所有这三个系统上运行 Docker 的机器(VM 或远程)。

  • Vagrant 知道如何配置一些高级或重要的事情,例如网络和同步文件夹。例如:Vagrant 知道如何将静态 IP 附加到机器或转发端口,并且无论您使用什么系统(VirtualBox、VMware 等),配置都是相同的。对于同步文件夹,Vagrant 提供了多种机制来获取本地文件传输到远程计算机(VirtualBox 共享文件夹、NFS、rsync、Samba [插件] 等)。如果你使用 Docker,甚至使用没有 Vagrant 的 VM 的 Docker,你将必须手动执行此操作,否则在这种情况下他们将不得不重新发明 Vagrant。

  • Vagrant 1.6 拥有一流的支持基于docker的开发环境 http://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html。这不会在 Linux 上启动虚拟机,并且会在 Mac 和 Windows 上自动启动虚拟机。最终结果是,使用 Docker 在所有平台上都是统一的,而 Vagrant 仍然处理诸如网络、同步文件夹等繁琐的细节。

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

  • “它的移动部件较少” - 是的,如果您在每个项目中专门使用 Docker,则可以。即便如此,它还是牺牲了 Docker 锁定的灵活性。如果您决定不在任何项目中使用 Docker,无论是过去、现在还是将来,那么您将面临更多的变化。如果您使用过 Vagrant,您就会拥有一个支持其余部分的移动部分。

  • “更快了!” - 一旦您拥有可以运行 Linux 容器的主机,Docker 运行容器的速度肯定比启动任何虚拟机都要快。但启动虚拟机(或远程计算机)是一次性成本。在一天中,大多数 Vagrant 用户从未真正销毁他们的虚拟机。这是对开发环境的奇怪优化。在生产中,Docker 真正发挥作用的是,我了解快速启动/关闭容器的需要。

我希望现在大家能够清楚地看到,将 Docker 与 Vagrant 进行比较是非常困难的,而且我认为这是不正确的。对于开发环境来说,Vagrant 更抽象、更通用。 Docker(以及让它表现得像 Vagrant 一样的各种方式)是 Vagrant 的一个特定用例,忽略了 Vagrant 提供的所有其他功能。

结论:在高度特定的用例中,Docker 无疑是 Vagrant 的可能替代品。在大多数用例中,事实并非如此。 Vagrant 不会妨碍您使用 Docker;它实际上尽其所能让这种体验更加顺畅。如果您发现这不是真的,我很乐意接受建议来改进事情,因为 Vagrant 的目标是与任何系统同样良好地工作。

希望这能解决问题!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用 Vagrant 还是 Docker 来创建隔离环境? [关闭] 的相关文章

随机推荐