我会尝试用日常用语来解释:
Vagrant - 用于在同一项目中新开发人员的机器上快速创建开发环境,最好能在几分钟内完成。通常在virtualbox之上使用,但也可以与不同的机器提供商一起使用。
Docker - 这里没有虚拟化,简单地想象一个真实的进程和所需的库被隔离,然后作为归档文件发送到服务器上。资源使用取决于运行命令。
Chef/Puppet - 可以用于自动化你在bash中输入的任何内容,以设置你的项目(除了应用程序密钥等)。您可以使用它们构建docker镜像或vagrant环境,因此它们不一定存在于物理生产服务器上。请参见Packer。
AWS/Rackspace/Azure - 是IaaS提供商。简单地说,它们按照您的要求启动服务器并为您提供ssh访问权限。当然,它们提供的功能不止这些。
你知道吗,它们可以相互使用。
这些工具似乎使部署变得更容易,但作为经验法则,请不要将它们全部混合使用,除非这样做可以为您和您的团队节省时间。有时,手动创建EC2并使用手动配置的scp
项目会更容易。你可以以后再自动化。
过早优化是万恶之源 - Tony Hoare爵士
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。最终我们开始在图像和运行时之外达成共识。