Vamos usar suas respectivas páginas da web para descobrir sobre o que são todos esses projetos. Eu alterarei a ordem na qual você listou, no entanto:
-
Chef : Chef é uma plataforma de automação que transforma a infraestrutura em código.
Este é um software de gerenciamento de configurações . A maioria deles usa o mesmo paradigma: eles permitem que você defina o estado que você quer que uma máquina seja, com relação a arquivos de configuração, software instalado, usuários, grupos e muitos outros tipos de recursos. A maioria deles também fornece funcionalidade para enviar alterações para máquinas específicas, um processo geralmente chamado de orquestração .
-
Vagrant : crie e configure ambientes de desenvolvimento leves, reproduzíveis e portáteis.
Ele fornece uma maneira reprodutível de gerar máquinas totalmente virtualizadas usando o VirtualBox ou o VMWare da Oracle tecnologia como provedores . O Vagrant pode coordenar com um software de gerenciamento de configuração para continuar o processo de instalação onde o instalador do sistema operacional termina. Isso é conhecido como provisionamento .
-
Docker : Um projeto de código aberto para empacotar, enviar e executar qualquer aplicativo como um contêiner leve
A funcionalidade deste software sobrepõe-se um pouco com a do Vagrant, na qual ele fornece os meios para definir instalações de sistemas operacionais, mas difere muito na tecnologia usada para essa finalidade. O Docker usa contêineres do Linux , que não são máquinas virtuais em si, mas processos isolados executados em sistemas de arquivos isolados. O Docker também pode usar um sistema de gerenciamento de configurações para provisionar os contêineres.
-
OpenStack : software de código aberto para criar nuvens privadas e públicas.
Embora seja verdade que o OpenStack pode ser implantado em uma única máquina , tal implantação é puramente para prova de conceito, provavelmente não muito funcional devido a restrições de recursos.
O alvo principal para instalações do OpenStack são ambientes com vários nós de metal puro, onde os componentes diferentes podem ser usados em hardware dedicado para alcançar melhores resultados.
Uma funcionalidade chave do OpenStack é o suporte para muitas tecnologias de virtualização, desde totalmente virtualizada (VirtualBox, VMWare) a paraVMirtuada (KVM / Qemu) e também contêineres (LXC) e até Modo de usuário Linux (UML) .
Eu tentei apresentar esses produtos como componentes de uma arquitetura específica. Do meu ponto de vista, faz sentido primeiro definir suas necessidades com relação ao ambiente que você precisa (Chef, Marionete, Ansible, ...), e então poder implantá-lo de forma controlada (Vagrant, Docker , ...) e, finalmente, escalá-lo para o tamanho global, se necessário.
O quanto de toda essa funcionalidade você precisa deve ser definido no escopo do seu projeto.
Observe também que simplifiquei bastante todas as explicações técnicas. Por favor, use os links referenciados para informações detalhadas.