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

230

J'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 pas à en saisir les avantages. Il me semble que c'est une série de nouvelles commandes à apprendre pour pouvoir faire de même. choses que j'ai faites avec Virtualbox.

Avec VirtualBox, j’installe et configure parfaitement un environnement, puis je peux le conditionner sous forme de fichier OVA ou autre et le partager avec d’autres utilisateurs de bureau. Vous pouvez prendre un instantané dans VirtualBox si quelque chose ne va pas.

La marionnette et le chef ne font pas vraiment partie de Vagrant, c'est leur propre truc, n'est-ce pas?

Alors oui, quels sont les avantages spécifiques de Vagrant par rapport à VirtualBox?

John Hunt
la source
11
Deux ans plus tard, j'utilise Vagrant tous les jours pour le développement - c'est génial! Mon équipe l’utilise et cela résout nos problèmes d’environnement de développement.
John Hunt
1
opinionated here: Si vous n’avez jamais eu aucune difficulté à configurer les serveurs PXE, connaissez VBoxManage par cœur, savez comment configurer nfs en moins d’une minute, etc., et appréciez également la gestion directe des chaînes de construction. Il n’ya presque rien. La valeur augmente avec chaque partie du puzzle qui vous manque. L'utilisation répandue ne provient pas de l'intégration des marionnettes, mais du fait que les gens peuvent télécharger des images infestées par la faille de sécurité directement sur Internet. peu importe ce qu'ils vous disent.
Florian Heigl
2
3,5 ans plus tard, j'utilise maintenant chaque jour Docker pour le développement. C’est bien, mais une bête différente de vagabonde… En fonction de vos besoins, je pense que vagabond constitue toujours une meilleure plate-forme de développement pour les équipes. Il est tout simplement plus facile de travailler avec elle.
John Hunt
5
4 ans plus tard, j'ai découvert que Docker était terrible. Vive le vagabond.
John Hunt
3
vos commentaires font tellement plus amusant
Florian Heigl

Réponses:

151

C'est une grande question et je vais donc la diviser en trois parties.

Vagabond

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

  • Importation d'images prédéfinies (appelées "boîtes")
  • Définition de paramètres spécifiques à la machine virtuelle (adresse IP, noms d’hôte, redirection de port, mémoire, etc.)
  • Exécution de logiciels de provisioning comme Puppet ou Chef

Notez qu’il n’installe pas de logiciel et n’installe pas la machine après le chargement de la VM et la définition des paramètres de VirtualBox. Considérez-le comme un moteur de script pour VirtualBox.

Voici quelques raisons pour lesquelles j'ai vu l'utilisation de Vagrant sur VirtualBox uniquement.

1. Configurer des réseaux multi-VM avec facilité

La plupart du contenu utilisateur avancé de Vagrant que j'ai lu concerne la configuration simultanée de plusieurs ordinateurs virtuels. Vagrant vous donne un seul fichier de configuration pour les configurer, vous permettant de tous les lancer avec une seule commande.

Supposons que vous avez configuré trois ordinateurs virtuels pour qu'ils se connectent en utilisant des adresses IP statiques sur le sous-réseau 192.168.1. *. Vous vous trouvez dans un emplacement qui utilise déjà ce sous-réseau pour distribuer des adresses IP, et vos ordinateurs virtuels sont maintenant en conflit. Avec Vagrant, vous pouvez simplement éditer le fichier Vagrant et recharger les ordinateurs virtuels, tandis qu'avec VirtualBox, vous devez ouvrir les paramètres de chaque ordinateur virtuel, sinon démarrer chaque ordinateur virtuel et les modifier à l'intérieur.

2. Contrôle de la source

En mettant les paramètres dans un fichier texte, cela permet de placer la configuration sous contrôle de source. Vous avez apporté des modifications la semaine dernière et brisé accidentellement l'image? Il suffit d’annuler les modifications et de recharger la machine virtuelle. Vous pouvez accomplir cela avec des instantanés VirtualBox, mais cela prendra beaucoup plus d'espace qu'un fichier Vagrantfile.

3. Diverses plates-formes

Un grand nombre de cases sont disponibles sur des sites tels que http://vagrantbox.es . Cela vous permet d'essayer divers systèmes d'exploitation ou distributions, en appliquant le même provisionnement pour configurer des environnements similaires. Cela peut aider à tester ou à ajouter de la prise en charge de nouvelles plates-formes et ne prendrait que du temps à utiliser uniquement VirtualBox.

Il existe de nombreux arguments pour utiliser un logiciel de provisioning, ainsi que pour utiliser des instantanés d'image. Pour plus de discussion, je vous renvoie à l'excellent article de Stephen Nelson-Smith intitulé Comment construire 100 serveurs Web en un jour .

Adam Lukens
la source
8
Pourtant, 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 telle que des boites de base utilisées par vagant puis cloner par VMware pour configurer une autre machine virtuelle. D'abord et avant tout, nous pouvons contrôler tous les paramètres de la machine virtuelle à l'aide d'une vmruncommande proposée par VMware, même les changements d'adresse IP ou l'exécution d'un script à l'intérieur de la machine invitée!
Oğuz Çelikdemir
3
@ OğuzÇelikdemir C'est un bon point. Vagrant offre à VMWare une interface plus simple pour l'installation d'une nouvelle machine. En coulisse, il utilise vmrunpour le contrôler. J'avais toujours utilisé VirtualBox et n'ai donc aucune expérience du backend VMWare.
Adam Lukens
1
@AdamLukens, Merci pour les commentaires détaillés. Ce que vous avez mentionné semble intéressant .. mais je me demande si vous êtes au courant de la VboxManagecommande? virtualbox.org/manual/ch08.html Quasiment tout ce que vous avez mentionné peut être créé comme un script en passant l'IP / paramètre spécifique vboxmanage controlvmou une commande similaire dans un script shell et le contrôle de version .. Alors , comment vagrantaméliorer plus virtualbox?
alpha_989
@ alpha_989 Je suis d'accord. Il semble n'y avoir aucun point unique pour utiliser Vagrant. Juste pour plus de commodité.
Niklas Rosencrantz
27

En plus de l'excellente réponse donnée par Adam, Vagrant lie tout. Bien que Chef et Puppet (et les scripts Salt et shell, ainsi que tout autre fournisseur que vous souhaitez utiliser) soient des objets distincts, Vagrant les lie tous ensemble et les fait fonctionner avec a vagrant up.

Cette commande sera

  1. il suffit de démarrer la machine virtuelle si c'est tout ce qui est nécessaire, mais ça va aussi
  2. créez la boîte à partir de votre boîte de base spécifiée si cela n’est pas encore fait, mais si vous n’avez même pas la boîte de base sur votre machine, elle sera d’abord
  3. récupérez-le à partir de son URL et téléchargez-le sur votre machine.

Vous n'avez pas à penser à tout ça. Supposons que vous basculiez vers un projet différent, démarré par un collègue. Vous ne faites que extraire le code de votre dépôt et le lancer vagrant up, sans vous soucier de télécharger des fichiers ISO ou d'installer quoi que ce soit, ni de vous demander quelle version de la distribution vous devez utiliser pour ce client particulier, ou si vous avez déjà une copie d'un ordinateur virtuel. vous avez besoin.

Vous n'avez même pas besoin de vous demander s'ils ont configuré les choses à l'aide de Chef ou de Puppet ou simplement de scripts shell. (D'accord, vous devrez peut-être effectuer une opération bundle installou vous assurer que tout est installé, mais ce n'est pas grave.)

En liant tous les éléments et en fournissant une interface unifiée pour tout cela, il est beaucoup plus facile de simplifier tous les cas d'utilisation, à l'exception des plus simples. Au début, vous aurez peut-être l’impression de réapprendre une nouvelle façon de faire ce que vous faites déjà, mais une fois que vous aurez approfondi votre utilisation de Vagrant, vous découvrirez que vous pouvez faire beaucoup plus avec beaucoup moins d’efforts. Cela vaudra bien l'investissement de temps initial.

iconoclaste
la source
8
Mais il est beaucoup plus facile et rapide pour moi d'envoyer à un développeur une image de machine virtuelle prédéfinie que d'installer le vagabond, d'apprendre à l'utiliser et de résoudre les nombreux problèmes qui surviennent, en particulier lors de l'assistance. boîtes de fenêtres. Je ne comprends vraiment pas non plus. Semble être rien que des fanboys.
hopeseekr
5
L'installation de Vagrant est incroyablement facile ces jours-ci. Toute personne qui ne peut pas l’installer ne peut pas être invitée à écrire du code. Avoir un fichier Vagrant dans votre code source que le développeur vérifie est en réalité beaucoup plus facile que d'envoyer un ordinateur virtuel. Le fichier Vagrant définit la configuration, y compris l'URL à partir de laquelle télécharger la machine virtuelle de base (qu'il configure ensuite). Si vous n'avez pas besoin initialement de modifier la configuration, vous êtes prêt. Mais au fur et à mesure que vous travaillez sur votre projet, vous devrez probablement apporter des modifications. Faites cela dans votre Vagrantfile.
iconoclast
5
Puisque vous conservez le code Vagrantfile avec votre code, tous les développeurs rejoignant le projet obtiendront automatiquement les modifications apportées à votre machine virtuelle, car vous les apportez dans le fichier Vagrant. Configurer votre Vagrantfile n'a pas besoin d'être difficile. Vous pouvez utiliser le provisionnement de shell si vous trouvez que le chef et la marionnette sont excessifs (ce qui est souvent le cas). Si vous pouvez entrer les commandes du shell dans la VM, la configuration des commandes de provisioning du shell dans le fichier Vagrant ne constitue plus un obstacle. Cela demandera un petit effort en amont et vous épargnera beaucoup de maux de tête à long terme.
iconoclast
4
et quand avez-vous besoin de changer quelque chose sur les 50 ordinateurs?
iconoclaste
4
Les discussions ici portent vraiment sur une optimisation prématurée. Ne pas utiliser vagant si vous n'en avez pas besoin. Utilisez vagant lorsque la création de machines virtuelles devient fastidieuse.
lundi
9

La capacité à intégrer un chef ou une marionnette à l’approvisionnement en ordinateurs virtuels est essentielle. La plupart des utilisateurs de vagabonds vous diront qu'ils utilisent beaucoup plus souvent une «provision vagabonde» et parfois un «rechargement vagabond» que «vagabond» ou «détruire vagabond». Ces tâches indiquent que le vrai travail ne consiste pas à monter / descendre des machines virtuelles, mais à les "gérer" après coup.

Pour poser une meilleure question (de toute façon posée par des utilisateurs chevronnés de Chef), pourquoi peut-on utiliser Vagrant et non couteau avec le plugin approprié (vous obtiendrez immédiatement le plugin virtualbox)? Par exemple, transmettre les valeurs d'arguments stockées dans un sac de données à un plugin knife est (beaucoup) plus intelligent, flexible et facile à gérer que de jongler avec un fichier Vagrantfile géant. En général, je définis mes ressources «dynamiques» comme le nombre de processeurs, la quantité de mémoire, le système d'exploitation à déployer, le nom d'hôte, l'adresse IP, les routes, etc., dans la ou les fiches de données du chef, de sorte que je n'ai pas besoin de modifier sans cesse ma recette; - ) L’édition d’un label de données via l’interface Web de Chef est une tâche de saisie de données très simple que je peux confier aux opérateurs les plus jeunes. Avec Vagrantfile, modifiez votre code pour toujours et croyez-le ou non - des ruptures de code - ce qui garantit que vous ne ferez PAS de simples changements au personnel des Opérations,

Mis à part le fait que couteau ne dispose pas encore de plug-in pour virtualbox (bien que j'en envisage un dans un avenir rapproché), il existe déjà des plug-ins pour la plupart des produits de virtualisation «entreprise», y compris vmware, xenserver et à peu près tous les principaux «clouds». fournisseur, ainsi. Cela signifie que knife est de loin supérieur à ce que propose Vagrant si / quand vous êtes prêt à aller au-delà de la virtualbox. Pour le moment, la communauté Chef semble heureuse de laisser les utilisateurs de virtualbox boiter avec Vagrant en n'intégrant pas les apis virtualbox pour un plugin couteau. Il existe un plugin couteau-vagrant qui permet l'utilisation de sacs de données pour passer des arguments. Mais, il nécessite toujours un logiciel vagabond et son fonctionnement monolithique, Vagrantfile.

Donc, je vais sur une branche et dire que vagabond n'est certainement pas «meilleur» que le chef avec un couteau; mais cela est nécessaire (pour le moment) si vous insistez sur la virtualbox et peut-être "plus facile" que de gérer le chef avec des sacs de données, à condition de disposer d'un environnement assez simple à gérer.

Andrew
la source
8

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

  1. Vagrant contribue à maintenir les plates-formes de développement et de production aussi proches que possible. Dans un monde idéal, vous devez approvisionner l'environnement de production avec les scripts THE SAME utilisés pour approvisionner la machine virtuelle Vagrant, minimisant ainsi les surprises lors du déploiement.

  2. Tests d'intégration et intégration continue: Vagrant est facile à contrôler à partir de tests. Par conséquent, des piles complètes de machines multiples peuvent être facilement contrôlées à l'aide d'outils tels que Jenkins lors de l'exécution de tests.

Oui, "plain" VirtualBox peut également être utilisé ici - mais les conventions utilisées par vagrant facilitent la configuration de ces scénarios.

Ben XO
la source
1
Je viens sérieusement de copier les vmx et vmdk de Windows à Linux. Peut-être que c'est différent dans le monde de la virtualbox, mais j'en doute! Quoi de plus facile? Copier un fichier ou jouer avec des fichiers vagabonds et une multitude de problèmes qui peuvent mal tourner?
hopeseekr
6
Vagrant peut être considéré comme un langage de définition virtuel pouvant décrire les caractéristiques d’une machine virtuelle, qu’il soit hébergé sous VirtualBox, VMware, Parallels ou peu importe. Voyez comment Vagrant n'est pas une "concurrence pour" VirtualBox, mais fonctionne avec ou au-delà.
MarkHu
On utiliserait généralement un fichier Vagrant pour décrire comment une machine virtuelle doit être configurée pour un projet - le fichier Vagrant serait dédié au contrôle de source (git, etc.) avec le projet, pour le partage sur GitHub, etc. Il est beaucoup plus petit à télécharger. qu'un VMDK entier.
Ben XO
0

Vagrant abstrait les machines virtuelles afin de vous permettre de changer facilement d'implémentation de machine virtuelle. Vous pouvez passer de Virtual Box à AWS ou à Digital Ocean. C'est comme utiliser SQL au lieu d'un langage de requête spécifique à la base de données.

Vagrant permet aux développeurs de configurer rapidement leur environnement avec une seule commande, qui est identique à celle de tous les autres. Ceci est important dans les grandes entreprises où les développeurs vont et viennent souvent. Cela peut réduire le temps d'installation de 3 jours à 1 heure.

+ Ce qu'a dit Adam.

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

Chloe
la source