stream浪汉,docker工人,傀儡,厨师

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

不完全是。

厨师/木偶是“一样的”,他们是configurationpipe理。 虽然您可以使用它们来pipe理虚拟机或公共/私有云,但大多数人并不倾向于使用这种方式。 他们是configurationpipe理。 它们通常在虚拟机启动后进入操作状态。 也就是说,在虚拟机上需要什么软件,需要添加哪些用户,需要什么样的configuration等。因此,它往往被用于扩展基础设施。

Vagrant虽然也可以用来pipe理虚拟机和公共/私有云,但通常只用于一次性环境。 它为创build虚拟机提供了一个有凝聚力的文件。 这种方式与厨师/傀儡类似,但并不倾向于大规模使用。

Docker是一个单独的野兽。 它有几个组件,但主要用于“捆绑”(注意:它不仅仅是这个,而是一个ELI5答案)软件,并且需要运行一个主机系统(或基础设施)。 它为应用程序增加了一点安全性,但大多为应用程序运行提供了一致的“操作系统”。

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

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

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

我会使用Docker for FunTime-Front和FunTime-API。 我会使用Vagrant为开发者设置一个开发环境(以便他们可以调整各种组件)。 Vagrant会:在本地启动虚拟机(如果需要的话在云上),安装docker,下载FunTime-Front和FunTime-API的docker镜像,安装postgres,填充虚拟数据的postgres,configuration各种networking端口组件。

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

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

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

这将确保你没有听到这样的借口:“那么,它在我的本地机器上运行!” 常常。 另外,如果有一个拙劣的部署,回滚应用程序将非常容易与Docker。

我希望能够提供更多关于如何使用它们的信息。

我会试图像日常谈话中那样,

Vagrant – 为了使开发环境能够在同一个项目中在新的开发者机器上快速启动,最好在几分钟之内完成。 通常在virtualbox的顶部使用,但可以与不同的机器提供商一起使用。

Docker – 这里没有什么虚拟的东西,简单的想象一下真正的stream程,需要的库被沙箱化,然后作为一个存档发送到服务器。 资源使用是根据运行命令决定的。

厨师/木偶 – 可用于自动化您在bash中input的任何东西以进行项目设置(应用程序密钥等除外)。 您可以使用它们来构build泊坞窗图像或stream浪环境,因此它们不一定必须存在于物理生产服务器上。 见派克 。

AWS / Rackspace / Azure – 是IaaS提供商。 用简单的英语,他们旋转服务器,你需要和给你的SSH访问。 当然,他们提供的不止于此。

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

这些工具似乎使部署更容易,但作为一个经验法则,不要一起使用它们,除非它会为您和您的团队节省时间。 有时候,手动启动EC2并手动configurationscp项目会更容易。 您可以稍后自动化。

不成熟的优化是一切罪恶的根源 – 托尼·霍尔爵士

厨师 :厨师是一个自动化平台,将您的基础设施转化为代码。 它通常被称为configurationpipe理软件。 您可以使用不同的参数来定义状态,例如configuration文件,软件,工具,访问types和资源types等。另外,您可以根据需要configuration具有不同function的不同机器。

木偶 :木偶是一个工具,可以让你抽象的目标机器的具体概念,使configuration过程更多的操作系统不可知论者。 它允许安装一个包或独立启动后台服务。 定义一个命令,打包那些需要安装的程序,步骤依赖关系,文件内容以及其他一些你需要使机器正常运行的事情。

Vagrant :Vagrant是一个帮助产生虚拟机的项目。 它以VirtualBox的命令行开始,类似于VM的Gemfile。 您可以select基础映像,networking,IP,共享文件夹,并将其放在一个文件中,任何人都可以重复使用,以产生相同的configuration机器。 Vagrant有不同的扩展,configuration选项和虚拟机提供商。 您可以运行VirtualBox,VMware,并且可以扩展到能够在EC2上创build实例。

Docker :Docker允许将一个具有所有依赖的应用程序打包到一个标准的软件开发单元中。 因此,它减less了开发人员,质量保证和testing之间的摩擦。 它dynamic地改变你的应用程序,每天增加新的function,扩展服务,快速改变问题领域。 Docker把自己置于一个激动人心的地方,作为PaaS的接口,无需关心底层基础架构,就能实现联网,发现和服务发现。 是的,他们在生产中仍然是docker工人的问题(以为所有的主要公司已经把他们的基础设施迁移到docker工人),但是,希望我们能够看到这些问题的解决scheme,作为docker工作人员和贡献者在这些问题上努力工作。 由于Docker Volume驱动程序允许第三方容器数据pipe理解决scheme为运行数据的容器(如数据库,键值存储区和其他有状态的应用程序)提供数据卷。 正如你所看到的,rexray,作为卷插件,并提供先进的存储function。 emccode / rexray我们终于开始同意不仅仅是图像和运行时。