我什至不明白标题中服务之间的基本区别。这些服务只是提供软件来帮助您配置/组织/管理您的虚拟机,还是它们还提供物理基础设施供您的虚拟机运行?换句话说,它们只是开发人员与 AWS、Rackspace 和 Azure 之间的便捷接口(interface)吗?
最佳答案
不完全是。
Chef/Puppet 是“相同的”,它们是配置管理。虽然您可以使用它们来管理虚拟机或公共(public)/私有(private)云,但大多数人并不倾向于以这种方式使用它们。它们是配置管理。它们通常在启动虚拟机以使其处于所需状态后发挥作用。也就是说,虚拟机上需要什么软件,需要添加什么用户,需要什么配置等。因此,它倾向于用于扩展基础设施。
Vagrant 虽然也可用于管理虚拟机和公共(public)/私有(private)云,但通常仅用于一次性环境。它提供了一个用于创建虚拟机的内聚文件。这种方式类似于 Chef/puppet ,但不倾向于大规模使用。
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)来配置环境: 生产、阶段和开发(或任何需要的),然后 Chef 将在“应用程序”服务器上安装 docker,在 postgres 服务器上安装“postgres”,应用安全设置等。这样所有相关的服务器都是相同的。如果我需要更新服务器或添加补丁,配置管理将是微不足道的。
在所有情况下都将使用 Docker,以便环境之间没有应用程序差异,包括开发人员工作站。
这将确保您不会听到“嗯,它在我的本地机器上工作!”的借口。常常。此外,如果有一个糟糕的部署,使用 Docker 回滚应用程序将非常容易。
我希望这能提供更多关于如何使用它们的见解。
关于docker - Vagrant , docker , puppet , Chef ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471832/
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我
我有以下代码,它下载一个文件,然后将文件的内容读入一个变量。使用该变量,它执行一个命令。这个配方不会收敛,因为/root/foo在编译阶段不存在。我可以通过多个聚合和一个来解决这个问题ifFile.exist但我想用一个收敛来完成它。关于如何做到这一点有什么想法吗?execute'download_joiner'docommand"awss3cps3://bucket/foo/root/foo"not_if{::File.exist?('/root/foo')}endpassword=::File.read('/root/foo').chompexecute'join_domain'd
我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com
这是我在ChefRecipe中的一blockRuby:#ifdatadirdoesn'texist,moveoverthedefaultoneif!File.exist?("/vol/postgres/data")execute"mv/var/lib/postgresql/9.1/main/vol/postgres/data"end结果是:Executingmv/var/lib/postgresql/9.1/main/vol/postgres/datamv:inter-devicemovefailed:`/var/lib/postgresql/9.1/main'to`/vol/post
我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss
我正在为我正在处理的一些新ChefRecipe编写InSpec测试。我想利用Recipe使用的data_bags遍历数据包项。我不知道如何在我的InSpec测试中访问它们!这些Recipe使用了search、data_bag和data_bag_item方法。但是这些方法在我的InSpec测试中似乎不可用。我怀疑这些是ChefDSL特定的方法?data_bags的源代码受源代码控制,因此我可以在我的本地文件系统上访问它们的json。如何使用InSpec语法访问Chef_zero中的这些数据包?我在网上找到了几个示例,但我没有看到data_bags实际上是如何由chef_zero加载的,以
我有一个多机vagrant设置,其中包含一些我需要更改执行顺序的block。由于vagrant顺序是从外到内,最嵌套的block最后执行。我需要一种方法来使供应block更加嵌套,以便它们最后执行。我尝试添加mach.vm.define但这些block没有执行,我不明白为什么。正常执行,顺序错误Vagrant.require_version">=1.6.0"VAGRANTFILE_API_VERSION="2"require'yaml'machines=YAML.load_file('vagrant.yaml')Vagrant.configure(VAGRANTFILE_API_VER