Relação entre Vagrant, Docker, Chef e OpenStack (ou produtos similares)?

Eu sou um desenvolvedor web, mas também estou interessado em algumas tarefas administrativas. Portanto, o novo movimento da administração pura para dev-ops é útil para mim.

De qualquer forma, Tenho alguns problemas para colocar algumas coisas em um relacionamento. Talvez não haja nenhum, então eu queria pedir ajuda para esclarecer.

Basicamente, o que eu quero colocar em relação é quatro tipos de software (do meu entendimento). Os produtos exatos não importam, você pode colocar qualquer software semelhante como uma alternativa:

  • Vagrant: do meu entendimento é automatizar a criação e o gerenciamento de VMs: configurá-los, iniciá-los e interrompê-los. Isso pode ser feito usando uma VM local ou remota, por exemplo, em uma plataforma de nuvem.
  • Docker: uma "VM leve", baseada em alguns conceitos do kernel do Linux, que pode ser usada para executar processos isoladamente, por exemplo, em um ambiente de hospedagem compartilhada na web.
  • Chef: uma ferramenta para configurar e configurar um sistema operacional, por exemplo, dentro de uma VM.
  • OpenStack: uma ferramenta que permite criar sua própria nuvem privada, portanto comparável a algo como AWS.

Pergunta # 1: minhas explicações estão certas ou estou errado com alguns (ou todos) desses consumos?

Pergunta # 2: Como eu poderia misturar todas essas ferramentas? Isso faria algum sentido?

Na minha imaginação e do meu ponto de compreensão, você poderia ir e

  • use o OpenStack para criar sua própria nuvem,
  • use o Vagrant para gerenciar as VMs executadas na nuvem,
  • use o Chef para configurar essas VMs
  • e, finalmente, use o Docker para executar processos dentro das VMs.

Está correcto? E se sim, você pode me dar um conselho sobre como começar a usar tudo isso (é bastante ao mesmo tempo, e ainda não sei por onde começar)?

Vamos usar suas respectivas páginas da web para descobrir sobre o que são todos esses projetos. Eu vou mudar a ordem em que você listou, apesar:

  • Chefe: Chef é uma plataforma de automação que transforma infraestrutura em código.

    Este é um software de gestão de configuração. A maioria deles usa o mesmo paradigma: eles permitem que você defina o estado você quer que uma máquina seja, no que diz respeito a arquivos de configuração, software instalado, usuários, grupos e muitos outros tipos de recursos. A maioria deles também fornece funcionalidade para empurrar alterações em máquinas específicas, um processo geralmente chamado orquestracao.

  • Vagabundo: Crie e configure ambientes de desenvolvimento leves, reprodutíveis e portáteis.

    Ele fornece um reproduzivel maneira de gerar máquinas totalmente virtualizadas usando a tecnologia VirtualBox ou VMWare da Oracle como provedor. 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 aprovisionamento.

  • Encaixe: Um projeto de código aberto para embalar, enviar e executar qualquer aplicativo como um contêiner leve

    A funcionalidade deste software se sobrepõe um pouco à do Vagrant, no qual fornece os meios para definir instalações de sistemas operacionais, mas difere muito na tecnologia usada para esse fim. Docker usa Linux containers, que não são máquinas virtuais em si, mas processos isolados em execução em sistemas de arquivos isolados. O Docker também pode usar um sistema de gestão de configuração para provisionar os contêineres.

  • OpenStack: Software de código aberto para a construção de 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 preliminar para as instalações de OpenStack é ambientes desencapados do multi-nó do metal, onde componentes diferentes pode ser usado em hardware dedicado para alcançar melhores resultados.

    Uma das principais funcionalidades do OpenStack é o suporte para muitas tecnologias de virtualização, desde totalmente virtualizado (VirtualBox, VMWare), até paravirtualizado (KVM/Qemu) e também contêineres (LXC) e até Modo de usuário Linux (UML).

Tentei apresentar esses produtos como componentes de uma arquitetura específica. Do meu ponto de vista, faz sentido primeiro ser capaz de definir suas necessidades em relação ao ambiente que você precisa (Chef, fantoche, Ansible, ...), então ser capaz de implantá-lo de forma controlada (Vagrant, Docker,...) e, finalmente, dimensioná-lo para o tamanho global, se necessário.

Quanto de toda essa funcionalidade você precisa deve ser definida no escopo do seu projeto.

Observe também que simplifiquei demais principalmente todas as explicações técnicas. Use os links referenciados para obter informações detalhadas.