Vagrant, Docker, Puppet, Chef

23
我甚至不了解标题中这些服务的基本区别。 这些服务只是提供软件来帮助您配置/组织/管理虚拟机,还是它们也提供物理基础设施来运行您的虚拟机? 换句话说,它们只是开发人员和AWS、Rackspace和Azure之间方便的接口吗?

1
听起来你也应该去看看 Ansible 和 Terraform,它们符合你的特定兴趣。 - Matt Schuchard
3个回答

58
并不完全正确。
Chef/Puppet是相同的,它们都是配置管理工具。虽然可以使用它们来管理虚拟机或公共/私有云,但大多数人不倾向于以这种方式使用它们。它们一般用于在虚拟机启动后将其设置为所需状态。也就是说,需要在虚拟机上安装哪些软件、需要添加哪些用户、需要进行哪些配置等。因此,它往往被用于扩展基础架构。
Vagrant虽然也可以用于管理虚拟机和公共/私有云,但通常只用于一次性环境。它提供了一个协调的文件来创建虚拟机。它与Chef/Puppet类似,但不倾向于大规模使用。
Docker是一种独立的东西。它有几个组件,但主要用于"打包"(注意:它做的远不止这些,但这是一个简单易懂的回答)软件,并需要一个主机系统(或基础架构)来运行。它为应用程序增加了一点安全性,但主要为应用程序提供了一个一致的"操作系统"。
在实践中,所有这些工具都可以在一个环境中使用。以下是一个例子:
假设你有一个名为FunTime的应用程序。有8个开发人员为此做出了贡献,FunTime被设计为在AWS上运行可扩展的基础架构。它被设计为有一个前端(FunTime-Front)和一个后端(FunTime-API),并需要postgres。4个开发人员负责前端,4个开发人员负责后端。
我会采取以下措施(有许多方法可以解决这个问题,但这是其中一种例子):
我将使用Docker来管理FunTime-Front和FunTime-API。我将使用Vagrant为开发人员设置开发环境(以便他们可以调整各个组件)。Vagrant将:在本地启动虚拟机(或在云上启动),安装docker,获取FunTime-Front和FunTime-API的Docker镜像,安装postgres,并用虚假数据填充postgres,配置网络端口到各个组件。现在,开发者可以在本地机器上拥有完整的FunTime堆栈,而不必自己配置任何内容:只需键入"vagrant up"即可。
在基础架构方面,我会使用chef(或puppet)来配置环境:生产、阶段和开发(或其他所需内容),然后chef会在"应用程序"服务器上安装docker,在postgres服务器上安装"Postgres",应用安全设置等。通过这种方式,所有相关的服务器都是相同的。如果我需要更新服务器或添加补丁,那么使用配置管理将变得非常简单。
在所有情况下,都将使用Docker,以便各个环境之间没有应用程序的差异,包括开发人员的工作站。
这将确保你不会经常听到“嗯,它在我的本地机器上运行良好!”的借口。此外,如果部署失败,使用Docker轻松回滚应用程序非常容易。
希望这提供了更多关于如何使用它们的见解。

1
这是一个相当准确的答案,应该被接受为正确答案。 - Matt Schuchard
谢谢,特别是提供示例。我记得昨天这里有一个不同的答案,评论也不同。但它们全部消失了,没有任何证据表明它曾经存在过。那是因为怀疑抄袭吗? - Joseph Johnston
我也这么认为。如果我没记错的话,它还包含了一些不准确的信息。但这可能只是我的问题。:-) 如果你需要进一步的帮助/澄清,请让我知道。 - Nick Burke

5

我会尝试用日常用语来解释:

Vagrant - 用于在同一项目中新开发人员的机器上快速创建开发环境,最好能在几分钟内完成。通常在virtualbox之上使用,但也可以与不同的机器提供商一起使用。

Docker - 这里没有虚拟化,简单地想象一个真实的进程和所需的库被隔离,然后作为归档文件发送到服务器上。资源使用取决于运行命令。

Chef/Puppet - 可以用于自动化你在bash中输入的任何内容,以设置你的项目(除了应用程序密钥等)。您可以使用它们构建docker镜像或vagrant环境,因此它们不一定存在于物理生产服务器上。请参见Packer

AWS/Rackspace/Azure - 是IaaS提供商。简单地说,它们按照您的要求启动服务器并为您提供ssh访问权限。当然,它们提供的功能不止这些。

你知道吗,它们可以相互使用。

这些工具似乎使部署变得更容易,但作为经验法则,请不要将它们全部混合使用,除非这样做可以为您和您的团队节省时间。有时,手动创建EC2并使用手动配置的scp项目会更容易。你可以以后再自动化。

过早优化是万恶之源 - Tony Hoare爵士


3

Chef : Chef是一种自动化平台,可将基础设施转换为代码。通常被称为配置管理软件。您可以使用不同的参数定义状态,例如配置文件、软件、工具、访问类型和资源类型等。此外,您还可以根据需要配置不同功能的不同机器。

Puppet : Puppet是一种工具,允许您抽象目标计算机的特定概念,并使配置过程更加操作系统无关。它允许独立安装软件包或在启动时运行后台服务。定义命令、需要安装的软件包、步骤依赖项、文件内容以及其他需要使计算机正常运行的东西。

Vagrant : Vagrant是一个项目,可帮助生成虚拟机。它起源于VirtualBox的命令行,类似于VM的Gemfile。您可以选择要启动的基本映像、网络、IP、共享文件夹,并将其全部放入文件中,任何人都可以重用该文件以生成相同配置的机器。Vagrant具有不同的扩展、配置选项和VM提供程序。您可以运行VirtualBox、VMware,它足够可扩展,可以在EC2上创建实例。

Docker : Docker允许将应用程序及其所有依赖项打包成标准化的软件开发单元。因此,它减少了开发人员、QA和测试之间的摩擦。它可以动态更改应用程序,每天添加新功能,将服务扩展到快速更改的问题区域。 Docker正在成为PaaS接口的激动人心的地方,无论是网络、发现还是服务发现,应用程序都不必关心底层基础设施。是的,Docker在生产中仍然存在问题(虽然所有主要公司已经将其基础架构迁移到Docker),但希望我们能看到这些问题的解决方案,因为Docker团队和贡献者正在努力解决这些问题。由于Docker卷驱动程序允许第三方容器数据管理解决方案为操作数据的容器提供数据卷,例如数据库、键值存储和其他有状态应用程序。您可以看到其中一个rexray作为卷插件,并提供高级存储功能。emccode/rexray。最终我们开始在图像和运行时之外达成共识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接