269 votes

Pourquoi devrais-je utiliser Vagrant au lieu de juste VirtualBox?

Je utilise VirtualBox depuis de nombreuses années pour créer un environnement de développement.

Beaucoup de mes collègues parlent de Vagrant et beaucoup de gens semblent très enthousiastes à ce sujet mais je n'arrive tout simplement pas à saisir les avantages.. il me semble que c'est une série de nouvelles commandes à apprendre pour faire les mêmes choses que je faisais avec Virtualbox.

Avec VirtualBox, j'installe et configure un environnement parfait, puis je peux le packager en tant qu'OVA ou autre et le partager avec d'autres utilisateurs du bureau. Vous pouvez prendre un instantané dans VirtualBox si quelque chose ne va pas.

Puppet et chef ne sont pas vraiment partie de Vagrant, ce sont des choses à part non?

Alors oui, quels avantages spécifiques Vagrant offre-t-il par rapport à VirtualBox seul?

18 votes

Deux ans plus tard, j'utilise maintenant Vagrant tous les jours pour le développement - c'est génial ! Mon équipe l'utilise et cela a résolu nos problèmes d'environnement de développement.

2 votes

Opinionated here : Si vous n'avez jamais eu de problème pour configurer des serveurs PXE, connaissez VBoxManage par cœur, savez comment configurer nfs en moins d'une minute, etc. et aussi aimez gérer directement les chaînes de construction.. il n'y a presque aucun point du tout. La valeur augmente avec chaque partie du puzzle que vous manquez. L'utilisation généralisée ne vient pas de l'intégration de puppet mais parce que les gens pourraient télécharger des images infestées de failles de sécurité directement sur internet. Peu importe ce qu'ils vous disent.

3 votes

J'ai également trouvé Vagrant beaucoup plus utile dans une équipe de plusieurs développeurs, alors qu'auparavant c'était juste moi. J'ai imposé Vagrant à mon équipe et j'ai découvert que c'est là que la valeur réside.

174voto

Adam Lukens Points 1834

C'est une grande question, donc je vais la diviser en trois sections.

Vagrant

Vagrant est utilisé pour configurer une ou plusieurs machines virtuelles en :

  • Important des images pré-faites (appelées "boxes")
  • Paramétrant des paramètres spécifiques à la machine virtuelle (adresse IP, noms d'hôtes, redirection de ports, mémoire, etc.)
  • Exécutant des logiciels de provisionnement comme Puppet ou Chef

Notez que cela n'installe pas de logiciels ni ne configure complètement la machine après le chargement de la machine virtuelle et la configuration de VirtualBox. Pensez-y comme un moteur de script pour VirtualBox.

Voici quelques raisons que j'ai rencontrées pour utiliser Vagrant plutôt que seulement VirtualBox.

1. Configuration facile de réseaux multi-machines virtuelles

La plupart du contenu d'utilisateurs avancés de Vagrant que j'ai lu parlait de la configuration de plusieurs machines virtuelles en même temps. Vagrant vous offre un fichier de configuration unique pour les configurer, vous permettant de lancer toutes ces machines avec une seule commande.

Disons que vous avez configuré trois machines virtuelles pour qu'elles soient en réseau les unes avec les autres en utilisant des adresses IP statiques sur le sous-réseau 192.168.1.*. Vous vous retrouvez dans un endroit qui utilise déjà ce sous-réseau pour distribuer des adresses IP, et vos machines virtuelles entrent en conflit. Avec Vagrant, vous pouvez simplement modifier le fichier Vagrantfile et recharger les machines virtuelles, alors qu'avec VirtualBox, vous devriez ouvrir les paramètres de chaque machine virtuelle, voire démarrer chaque machine virtuelle et les modifier à l'intérieur.

2. Contrôle de source

En mettant les paramètres dans un fichier texte, cela permet de mettre la configuration sous contrôle de source. Vous avez fait des changements la semaine dernière et avez accidentellement cassé l'image ? Il suffit de revenir aux anciens paramètres et de recharger la machine virtuelle. Vous pouvez faire cela avec des snapshots VirtualBox, mais cela prendra beaucoup plus d'espace que simplement un fichier Vagrantfile.

3. Diverses plateformes

Il y a un grand nombre de boxes disponibles sur des sites comme http://vagrantbox.es. Cela vous permet d'essayer différentes OS ou distributions, en appliquant le même provisionnement pour configurer des environnements similaires. Cela peut aider pour les tests ou pour ajouter du support à de nouvelles plateformes, et cela prendrait beaucoup de temps en utilisant seulement VirtualBox.

Il y a beaucoup d'arguments en faveur de l'utilisation de logiciels de provisionnement, ainsi que l'utilisation de snapshots d'image. Pour une discussion supplémentaire, je vous oriente vers l'excellent article de Stephen Nelson-Smith How to Build 100 Web Servers in a Day.

8 votes

Toutefois, je ne comprends pas pourquoi je devrais utiliser Vagrant dans un environnement de développement! Parce que c'est cher (si vous voulez utiliser VMWare!) Nous pouvons préparer une machine virtuelle comme des boîtes de base qui sont utilisées par Vagrant puis les cloner avec VMware pour configurer une autre machine virtuelle. Tout d'abord, nous pouvons contrôler tous les réglages de la machine virtuelle avec la commande vmrun offerte par VMware même les changements d'adresse IP ou l'exécution d'un script à l'intérieur de la machine virtuelle hôte!

3 votes

@OguzÇelikdemir C'est un point juste. Vagrant se contente de fournir une interface plus facile à VMWare pour créer une nouvelle machine. En réalité, il utilise vmrun pour la contrôler. J'avais toujours utilisé VirtualBox, donc je n'ai pas d'expérience avec l'arrière-plan de VMWare.

2 votes

@AdamLukens, Merci pour les commentaires détaillés. Ce que vous avez mentionné semble intéressant.. mais je me demande si vous connaissez la commande VboxManage? virtualbox.org/manual/ch08.html Pratiquement tout ce que vous avez mentionné peut être créé sous forme de script en passant l'ip/paramètre spécifique à vboxmanage controlvm ou une commande similaire dans un script shell et ensuite le contrôler par version.. Alors en quoi vagrant s'améliore-t-il par rapport à virtualbox?

30voto

iconoclast Points 3099

En plus de l'excellente réponse donnée par Adam, Vagrant relie tout ensemble. Bien que Chef et Puppet (et Salt et scripts shell et tout autre provisionneur que vous souhaitez utiliser) soient des choses séparées, Vagrant les relie toutes et les fait fonctionner avec juste un vagrant up.

Cette commande va :

  1. démarrer la machine virtuelle si c'est tout ce qui est nécessaire, mais elle va aussi
  2. créer la boîte à partir de votre boîte de base spécifiée si ce n'est pas encore fait, mais si vous n'avez même pas la boîte de base sur votre machine, elle va d'abord
  3. la récupérer depuis son URL et la télécharger sur votre machine.

Vous n'avez pas à penser à tout cela. Disons que vous passez à un projet différent, lancé par un collègue. Vous venez de vérifier le code de votre dépôt, et exécutez vagrant up, sans vous soucier de télécharger des ISO ou d'installer quoi que ce soit, ou de vous demander quelle version de quelle distribution vous devez utiliser pour ce client particulier, ou si vous avez une copie d'une machine virtuelle qui a déjà tout ce dont vous avez besoin.

Vous n'avez même pas à vous soucier de savoir s'ils ont configuré les choses en utilisant Chef ou Puppet ou simplement des scripts shell. (D'accord, vous pourriez devoir exécuter bundle install ou vous assurer d'avoir tout installé, mais ce n'est quand même pas un gros problème.)

En reliant tout ensemble et en fournissant une interface unifiée pour tout cela, cela peut rendre beaucoup plus facile tous les cas d'utilisation, sauf les plus simples. Au début, vous pouvez avoir l'impression de simplement réapprendre une nouvelle façon de faire ce que vous faites déjà, mais une fois que vous approfondirez l'utilisation de Vagrant, vous découvrirez que vous pouvez faire beaucoup plus avec beaucoup moins d'efforts. Cela en vaudra largement le temps investi initialement.

13 votes

Mais c'est beaucoup plus facile et plus rapide pour moi d'envoyer une image de VM préréglée à un développeur que pour lui d'installer Vagrant, d'apprendre à l'utiliser et de gérer les nombreux problèmes qui peuvent survenir, en particulier lors du support de boîtes Windows. Je ne comprends vraiment PAS du tout, d'ailleurs. Il semble n'y avoir que des fanboys.

7 votes

Installer Vagrant est incroyablement facile de nos jours. Quiconque ne peut pas l'installer ne peut pas être digne de confiance pour écrire du code. Avoir un Vagrantfile dans votre code source que le développeur vérifie est en réalité beaucoup plus facile que d'envoyer une machine virtuelle. Le Vagrantfile définit la configuration, y compris l'URL à partir de laquelle télécharger la VM de base (qu'il configure ensuite). Si vous n'avez pas besoin initialement de faire des changements de configuration, alors vous êtes prêt. Mais au fur et à mesure que vous travaillez sur votre projet, vous devrez probablement apporter des modifications. Faites-le dans votre Vagrantfile.

6 votes

Depuis que vous gardez le Vagrantfile avec votre code, tous les développeurs rejoignant le projet recevront automatiquement les modifications que vous apportez à votre VM, puisque vous les faites dans le Vagrantfile. Configurer votre Vagrantfile ne doit pas être difficile. Vous pouvez utiliser l'approvisionnement shell si vous trouvez que Chef et Puppet sont trop complets (ce qui est souvent le cas). Si vous pouvez entrer les commandes shell dans la VM, alors c'est un petit obstacle pour configurer les commandes d'approvisionnement shell dans le Vagrantfile. Cela demandera un petit effort initial et vous évitera beaucoup de maux de tête à long terme.

11voto

Ben XO Points 294

Voici deux autres cas d'utilisation pour les développeurs que Vagrant simplifie (par rapport à "plain" VirtualBox). Je n'ai pas vu ces cas d'utilisation spécifiquement mentionnés dans les réponses précédentes.

  1. Vagrant aide à maintenir les plateformes de développement et de production aussi proches que possible. Dans un monde idéal, vous provisionneriez l'environnement de production avec LES MÊMES scripts utilisés pour provisionner la VM Vagrant, minimisant ainsi les surprises au moment du déploiement.

  2. Tests d'intégration et intégration continue : Vagrant est facile à contrôler depuis les tests, et donc des ensembles de machines entières peuvent être facilement contrôlés à partir d'outils tels que Jenkins lors de l'exécution des tests.

Oui, "plain" VirtualBox peut également être utilisé ici - mais les conventions utilisées par Vagrant rendent plus simple la mise en place de ces scénarios.

1 votes

Je me contente sérieusement de copier les fichiers VMX et VMDK de Windows vers Linux. Peut-être que c'est différent dans le monde de virtualbox, mais j'en doute ! Qu'est-ce qui est plus facile ? Copier un fichier ou bidouiller avec des fichiers Vagrant et les innombrables problèmes qui peuvent survenir ?

6 votes

Pour mettre les choses au clair, Vagrant peut être considéré comme un langage de définition virtuel qui peut décrire les caractéristiques d'une machine virtuelle --indépendamment de savoir si elle est hébergée sous VirtualBox, VMware, Parallels, ou autre chose. Voyez comment Vagrant n'est pas "en concurrence avec" VirtualBox, mais fonctionne avec lui, voire au-delà.

0 votes

On utiliserait généralement un fichier Vagrantfile pour décrire comment une machine virtuelle doit être configurée pour un projet - le Vagrantfile serait commité au contrôle de source (git, etc.) avec le projet, pour le partager sur GitHub, etc. C'est bien plus petit à télécharger qu'un VMDK entier.

9voto

Andrew Points 209

La capacité d'intégrer Chef ou Puppet à la provision de VM est essentielle. La plupart des utilisateurs de Vagrant vous diront qu'ils exécutent 'vagrant provision' et occasionnellement 'vagrant reload' beaucoup plus souvent que 'vagrant up' ou 'vagrant destroy'. Ces tâches indiquent que le vrai travail ne consiste pas à démarrer/arrêter les VM, mais à les 'gérer' par la suite.

Posez-vous une question meilleure (posée par des utilisateurs compétents de Chef, en tout cas), pourquoi utiliser Vagrant et pas knife avec le plugin approprié (nous allons parler du plugin virtualbox, dans un instant) ? Par exemple, transmettre des valeurs d'argument stockées dans un databag à un plugin knife est (beaucoup) plus intelligent, flexible et gérable que de jongler avec un seul grand Vagrantfile. Je définis généralement mes ressources 'dynamiques' comme le nombre de CPUs, la quantité de mémoire, quel OS déployer, le nom d'hôte, l'IP, les routes, etc., dans des databags chef afin de ne pas avoir à modifier ma recette constamment ;-). Modifier un databag via l'interface web de Chef est une tâche de saisie de données vraiment facile que je peux confier aux opérateurs les plus juniors. Avec un Vagrantfile, vous modifiez constamment le code et croyez-le ou non - le code se casse - ce qui garantit pratiquement que vous ne confierez JAMAIS de simples modifications au personnel des opérations.

En dehors du fait que knife n'a pas encore de plugin pour virtualbox (bien que j'envisage un prochainement), il existe déjà des plugins pour la plupart des produits de virtualisation 'entreprise', y compris vmware, xenserver et à peu près tous les principaux fournisseurs de 'cloud', également. Cela signifie que knife est bien supérieur à ce que Vagrant offre si/quand vous êtes prêt à passer à autre chose que virtualbox. Pour l'instant, la communauté de Chef semble satisfaite de laisser les utilisateurs de virtualbox galérer avec Vagrant en n'intégrant pas les APIs de virtualbox pour un plugin knife. Il y a un plugin knife-vagrant qui permet d'utiliser des databags pour transmettre des arguments. Mais, il nécessite toujours le logiciel Vagrant et son Vagrantfile monolithique pour fonctionner.

Donc, je vais prendre un risque et dire que Vagrant n'est définitivement PAS 'meilleur' que Chef avec knife; mais nécessaire (pour l'instant) si vous insistez sur virtualbox et peut-être 'plus facile' que de gérer chef avec des databags, à condition que vous ayez un environnement assez simple à gérer.

2voto

systempuntoout Points 27584

Vagrant abstrait les machines virtuelles, ce qui vous permet de facilement passer d'une implémentation de machine virtuelle à une autre. Vous pouvez passer de Virtual Box à AWS ou Digital Ocean. C'est comme utiliser SQL au lieu d'un langage spécifique à une base de données.

Vagrant permet aux développeurs de configurer rapidement leur environnement avec une seule commande et c'est exactement le même que celui des autres. Ceci est important dans les grandes entreprises où les développeurs viennent et partent souvent. Cela peut réduire le temps de configuration de 3 jours à 1 heure.

+ Ce qu'Adam a dit.

(Je n'ai toujours pas trouvé d'utilisation pour Chef ou Puppet cependant...)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X