流浪汉,Docker,木偶,厨师

Jos*_*ton 18 puppet chef-infra vagrant docker

我甚至不理解标题中服务之间的基本区别.这些服务是仅提供软件来帮助您配置/组织/管理VM,还是为VM运行提供物理基础架构?换句话说,它们只是开发人员与AWS,Rackspace和Azure之间的便捷界面吗?

小智 47

不完全是.

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

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

Docker是一个独立的野兽.它有几个组件,但主要用于"捆绑"(注意:它远不止于此,但这是一个ELI5答案)软件,需要运行主机系统(或基础设施).它为应用程序增加了一点安全性,但主要为运行的应用程序提供了一致的"操作系统".

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

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

我会做以下(有很多方法来修饰这只猫,但这只是一个例子):

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

现在,开发人员在本地计算机上拥有完整的FunTime堆栈,并且不必自行配置任何东西:他们只需输入"vagrant up"即可.

在基础设施方面,我会使用厨师(或木偶)来配置环境:生产,舞台和开发(或任何需要的东西),然后厨师将在"应用程序"服务器上安装docker,在postgres服务器上安装"postgres" ,应用安全设置等.这样所有相关的服务器都是相同的.如果我需要更新服务器或添加补丁,那么配置管理将是微不足道的.

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

这样可以确保你没有听到"好吧,它可以在我的本地机器上运行!" 常常.此外,如果存在错误的部署,使用Docker回滚应用程序将非常容易.

我希望能更深入地了解如何使用它们.


hur*_*urk 5

我会尽量像在日常谈话中那样推销

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

Docker-这里没有虚拟的东西,只需想象一个真实的过程,然后将所需的库沙盒化,然后将其作为存档发送到服务器。资源使用情况取决于运行命令。

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

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

猜猜是什么,它们可以相互使用。

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

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