【问题标题】:Vagrant, Docker, Puppet, Chef流浪者,码头工人,木偶,厨师
【发布时间】:2017-12-08 01:08:40
【问题描述】:

我什至不明白标题中服务之间的基本区别。这些服务是否只是提供软件来帮助您配置/组织/管理您的虚拟机,或者它们是否还为您的虚拟机提供运行的物理基础架构?换句话说,它们只是开发人员与 AWS、Rackspace 和 Azure 之间的便捷接口吗?

【问题讨论】:

  • 听起来你也应该看看 Ansible 和 Terraform 来满足你的特殊兴趣。

标签: docker vagrant chef-infra puppet


【解决方案1】:

不完全是。

Chef/Puppet 是“相同的”,它们是配置管理。虽然您可以使用它们来管理虚拟机或公共/私有云,但大多数人并不倾向于以这种方式使用它们。它们是配置管理。它们通常在启动虚拟机以使其处于所需状态后发挥作用。也就是说,虚拟机上需要什么软件,需要添加什么用户,需要什么配置等。因此,它倾向于用于扩展基础设施。

Vagrant 虽然也可用于管理虚拟机和公共/私有云,但通常仅用于一次性环境。它提供了一个用于创建虚拟机的内聚文件。这种方式类似于厨师/木偶,但不倾向于大规模使用。

Docker 是一头独立的野兽。它有几个组件,但主要用于“捆绑”(注意:它的功能远不止于此,但这是 ELI5 的答案)软件,并且需要在其上运行主机系统(或基础架构)。它为应用程序增加了一点安全性,但主要为应用程序运行提供了一致的“操作系统”。

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

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

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

我会将 Docker 用于 FunTime-Front 和 FunTime-API。我会使用 Vagrant 为开发人员设置开发环境(以便他们可以调整各种组件)。 Vagrant 将:在本地(或在需要时在云上)启动 VM,安装 docker,为 FunTime-Front 和 FunTime-API 下载 docker 映像,安装 postgres,并使用虚拟数据填充 postgres,将网络端口配置到各种成分。

现在,开发人员在他们的本地机器上拥有完整的 FunTime 堆栈,并且不必自己配置任何东西:他们只需键入“vagrant up”即可。

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

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

这将确保您不会听到“嗯,它在我的本地机器上工作!”的借口。常常。此外,如果有一个糟糕的部署,使用 Docker 回滚应用程序将非常容易。

我希望这能提供更多关于如何使用它们的见解。

【讨论】:

  • 这是一个明显更准确的答案,应该是公认的答案。
  • 谢谢,尤其是示例。我记得昨天在这里用不同的 cmets 给出了不同的答案。这一切都消失了,没有任何证据表明它曾经存在过。是因为涉嫌抄袭吗?
  • @JosephJohnston 我怀疑是这样。 IIRC,它还包含一些不准确的信息。但这对我来说可能有点烂。 :-) 如果您需要进一步的帮助/澄清,请告诉我。
【解决方案2】:

我会尝试像日常谈话那样进行推销,

Vagrant - 让开发环境在同一项目中的新开发者机器上启动,最好在几分钟内完成。通常在 virtualbox 之上使用,但可以与不同的机器提供程序一起使用。

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

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

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

你猜怎么着,它们可以相互使用。

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

过早的优化是万恶之源 - 托尼·霍尔爵士

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      相关资源
      最近更新 更多