流浪者、Docker、木偶、厨师

Vagrant, Docker, Puppet, Chef

我什至不明白标题中服务之间的基本区别。这些服务只是提供软件来帮助您 configure/organize/manage 您的 VM,还是它们也为您的 VM 运行 提供物理基础设施?换句话说,它们只是开发人员与 AWS、Rackspace 和 Azure 之间方便的接口吗?

不完全是。

Chef/Puppet就是"same",他们是配置管理。虽然您可以使用它们来管理虚拟机或 public/private 云,但大多数人并不倾向于那样使用它们。它们是配置管理。它们通常在启动虚拟机以使它们处于所需状态后发挥作用。也就是说,虚拟机上需要什么软件,需要添加什么用户,需要什么配置等。因此,它倾向于用于扩展基础架构。

Vag运行t,虽然也可以用来管理虚拟机和public/private云,但通常只用于一次性环境。它提供了一个用于创建虚拟机的内聚文件。它类似于 chef/puppet 那样,但不倾向于大规模使用。

Docker 是一个单独的野兽。它有几个组件,但主要用于 "bundling"(注意:它做的远不止这些,但这是 ELI5 的答案)软件并且需要一个主机系统(或基础设施)来 运行 .它为应用程序增加了一点安全性,但主要为 运行 上的应用程序提供了一致的 "OS"。

实际上,所有这些都可以在一个环境中使用。这是一个例子:

假设您有应用程序 FunTime。您有八位开发人员为此做出了贡献,FunTime 旨在 运行 在 AWS 上的可扩展基础设施上。它被设计成有一个前端(FunTime-Front)和一个后端(FunTime-API),并且需要postgres。 4 个开发人员在前端工作,4 个开发人员在后端工作。

我会做以下事情(有很多方法可以给这只猫剥皮,但这是一个例子):

我会为 FunTime-Front 和 FunTime-API 使用 Docker。我会使用 Vag运行t 为开发人员设置开发环境(以便他们可以调整各种组件)。 Vag运行t 将:在本地启动 VM(或在云上,如果需要),安装 docker,下载 FunTime-Front 和 FunTime-[=47= 的 docker 图像],安装 postgres,并用虚拟数据填充 postgres,为各种组件配置网络端口。

现在开发人员在他们的本地计算机上拥有完整的 FunTime 堆栈,而不必自己配置任何东西:他们只需键入 "vagrant up"。

在基础架构方面,我会使用 chef(或 puppet)来配置环境: 生产、阶段和开发(或任何需要的),然后厨师将在 "application" 服务器上安装 docker,在 postgres 服务器上安装 "postgres",应用安全设置等。以这种方式所有相关的服务器都是一样的。如果我需要更新服务器或添加补丁,配置管理将变得微不足道。

在所有情况下都将使用 Docker,这样环境(包括开发人员工作站)之间就没有应用程序差异。

这将确保您不会经常听到借口 "Well, it works on my local machine!"。此外,如果存在错误的部署,使用 Docker.

回滚应用程序将非常容易

我希望这能让您更深入地了解如何使用它们。

我会尝试像日常谈话一样推销,

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

Docker - 这里没有什么虚拟的,简单地想象一个真实的过程和所需的库被沙盒化,然后作为存档传送到服务器。资源使用由 运行 命令决定。

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

AWS/Rackspace/Azure - 是 IaaS 提供商。用简单的英语来说,他们会根据您的要求启动服务器并为您提供 ssh 访问权限。当然,他们提供的不止于此。

猜猜看,它们可以相互使用。

这些工具似乎使部署更容易,但根据经验,不要将它们一起使用,除非它可以为您和您的团队节省时间。有时,手动启动 EC2 并 scp 使用手动配置项目更容易。您可以稍后自动化。

Premature optimization is the root of all evil - Sir Tony Hoare

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

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

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

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