Je ne comprends même pas la différence fondamentale entre les services dans le titre. Ces services fournissent-ils simplement des logiciels pour vous aider à configurer/organiser/gérer vos machines virtuelles, ou fournissent-ils également une infrastructure physique pour que vos machines virtuelles fonctionnent? En d'autres termes, ne s'agit-il que d'interfaces pratiques entre les développeurs et AWS, Rackspace et Azure?
Pas exactement.
Chef/Puppet sont les mêmes, c'est la gestion de configuration. Bien que vous puissiez les utiliser pour gérer des machines virtuelles ou des clouds publics/privés, la plupart des gens n'ont pas tendance à les utiliser de cette façon. Il s'agit de gestion de configuration. Ils entrent généralement en jeu après le démarrage d'une machine virtuelle pour les mettre dans l'état souhaité. C'est-à-dire, quel logiciel est nécessaire sur la machine virtuelle, quels utilisateurs doivent être ajoutés, quelle configuration est nécessaire, etc. Ainsi, il a tendance à être utilisé pour faire évoluer l'infrastructure.
Vagrant, bien qu'il puisse également être utilisé pour gérer des machines virtuelles et des clouds publics/privés, n'est généralement utilisé que pour des environnements uniques. Il fournit un fichier cohérent pour créer une machine virtuelle. Il est similaire au chef/marionnette de cette façon, mais n'a pas tendance à être utilisé à grande échelle.
Docker est une bête distincte. Il a plusieurs composants, mais il est principalement utilisé pour le "regroupement" (Remarque: il fait beaucoup plus que cela, mais c'est une réponse ELI5) et nécessite un système hôte (ou une infrastructure) pour fonctionner. Il ajoute un peu de sécurité aux applications mais fournit principalement un "OS" cohérent pour une application sur laquelle s'exécuter.
En pratique, tous ces éléments peuvent être utilisés dans un environnement. Voici un exemple:
Disons que vous avez l'application FunTime. Vous avez huit développeurs qui contribuent à cela, et FunTime est conçu pour être exécuté sur une infrastructure évolutive sur AWS. Il est conçu pour avoir un front-end (FunTime-Front) et un back-end (FunTime-API), et nécessite des postgres. 4 développeurs travaillent sur le front-end, quatre développeurs travaillent sur le backend.
Je ferais ce qui suit (il existe de nombreuses façons d'écorcher ce chat, mais c'est un exemple):
J'utiliserais Docker pour FunTime-Front et FunTime-API. J'utiliserais Vagrant pour mettre en place un environnement de développement pour les développeurs (afin qu'ils puissent modifier divers composants). Vagrant pourrait: démarrer le VM localement (ou sur un cloud si nécessaire), installer le docker, dérouler les images du docker pour FunTime-Front et FunTime-API, installer postgres et remplir les postgres avec données factices, configurer les ports réseau pour les différents composants.
Maintenant, le développeur dispose de la pile FunTime complète sur sa machine locale et n'a plus à se soucier de configurer quoi que ce soit lui-même: il peut simplement taper "vagabond".
Du côté des infrastructures, j'utiliserais chef (ou marionnette) pour configurer les environnements: production, scène et développement (ou tout ce qui est nécessaire), puis chef installerait docker sur les serveurs "application", "postgres" sur les serveurs postgres , appliquez les paramètres de sécurité, etc. De cette manière, tous les serveurs associés sont identiques. Si j'avais besoin de mettre à jour un serveur ou d'ajouter un patch, ce serait trivial avec la gestion de la configuration.
Dans tous les cas, Docker serait utilisé pour qu'il n'y ait pas de différence d'application entre les environnements, y compris la station de travail des développeurs.
Cela garantirait que vous n'entendez pas l'excuse "Eh bien, cela fonctionne sur ma machine locale!" très souvent. De plus, s'il y a un déploiement raté, restaurer l'application serait TRÈS facile avec Docker.
J'espère que cela donne un peu plus de détails sur la façon dont ils pourraient être utilisés.
Je vais essayer de lancer comme dans les conversations quotidiennes,
Vagrant - Pour faire tourner les environnements de développement sur la machine du nouveau développeur dans le même projet, idéalement en quelques minutes. Habituellement utilisé au-dessus de virtualbox mais peut être utilisé avec différents fournisseurs de machines.
Docker - Rien de virtuel ici, imaginez simplement un processus réel et les bibliothèques requises sont mises en bac à sable, puis expédiées au serveur sous forme d'archive. L'utilisation des ressources est décidée lors de l'exécution de la commande.
Chef/Puppet - Peut être utilisé pour automatiser tout ce que vous tapez dans bash pour effectuer la configuration de votre projet (sauf les clés d'application, etc.). Vous pouvez les utiliser pour créer des images de docker ou des environnements vagabonds, de sorte qu'ils ne doivent pas nécessairement exister sur le serveur de production physique. Voir Packer .
AWS/Rackspace/Azure - sont des fournisseurs IaaS. En anglais simple, ils font tourner les serveurs à votre guise et vous donnent l'accès ssh. Bien sûr, ils fournissent plus que cela.
Devinez quoi, ils peuvent être utilisés les uns dans les autres.
Ces outils semblaient faciliter le déploiement, mais en règle générale, ne les utilisez pas tous ensemble, sauf si cela vous fera gagner du temps pour vous et votre équipe. Parfois, il est beaucoup plus facile de faire tourner un EC2 à la main et scp
votre projet avec une configuration manuelle. Vous pouvez automatiser plus tard.
L'optimisation prématurée est la racine de tout mal - Sir Tony Hoare
Chef: Chef est une plateforme d'automatisation pour transformer votre infrastructure en code. Il est généralement appelé logiciel de gestion de la configuration. Vous pouvez définir l'état avec différents paramètres comme vos fichiers de configuration, s/w, outils, types d'accès et types de ressources, etc. Vous pouvez également configurer différentes machines avec différentes fonctionnalités en fonction de vos besoins.
Puppet: Puppet est un outil qui vous permet d'abstraire des concepts spécifiques de la machine cible et de rendre le processus de configuration plus indépendant du système d'exploitation. Il permet d'installer un package ou d'exécuter un service d'arrière-plan au démarrage indépendamment. Définissez une commande, les packages que vous devez installer, les dépendances des étapes, le contenu des fichiers et d'autres choses dont vous auriez besoin pour que la machine soit opérationnelle sans problème.
Vagrant: Vagrant est un projet qui aide à la création de machines virtuelles. Cela a commencé comme une ligne de commande de VirtualBox, quelque chose de similaire à Gemfile pour les VM. Vous pouvez choisir l'image de base pour commencer, réseau, IP, partager des dossiers et tout mettre dans un fichier que tout le monde peut réutiliser pour générer la même machine configurée. Vagrant a différentes extensions, options de provisioning et fournisseurs VM. Vous pouvez exécuter un VirtualBox, VMware et il est suffisamment extensible pour pouvoir créer des instances sur EC2.
Docker: Docker, permet de regrouper une application avec toutes ses dépendances dans une unité standardisée de développement logiciel. Ainsi, il réduit la friction entre développeur, assurance qualité et tests. Il modifie dynamiquement votre application, en ajoutant de nouvelles fonctionnalités chaque jour, en étendant les services pour changer rapidement les zones problématiques. Docker se place dans un endroit excité en tant qu'interface avec le PaaS, que ce soit la mise en réseau, la découverte et la découverte de services avec des applications n'ayant pas à se soucier de l'infrastructure sous-jacente. Oui, ce sont toujours des problèmes avec docker en production (pensant que toutes les grandes entreprises ont déjà migré leur infrastructure vers docker), mais, espérons-le, nous verrons les solutions à ces problèmes, car l'équipe docker et les contributeurs travaillent dur sur ces problèmes. Le pilote Docker Volume permet aux solutions tierces de gestion des données de conteneurs de fournir des volumes de données pour les conteneurs qui fonctionnent sur des données, telles que la base de données, les magasins de valeurs-clés et d'autres applications avec état. Comme vous pouvez le voir, rexray, en tant que plugin de volume et fournit des fonctionnalités de stockage avancées. emccode/rexray Nous commençons enfin à nous mettre d'accord sur plus que des images et des temps d'exécution.