VirtualBoxの代わりにVagrantを使用する必要があるのはなぜですか?


230

私は長年VirtualBoxを使用して開発環境を作成してきました。

私の同僚の多くはVagrantについて話しているので、多くの人がVagrantに非常に興奮しているように見えますが、その利点を理解できないようです。 Virtualboxでやったこと。

VirtualBoxを使用して、環境を完全にインストールおよび構成し、それをOVAなどとしてパッケージ化し、他のオフィスユーザーと共有できます。何か問題が発生した場合、VirtualBoxでスナップショットを取ることができます。

操り人形とシェフはVagrantの一部ではありません。彼らは自分たちのものですよね?

それで、はい、VagrantがVirtualBoxに対して単独で提供するメリットは何ですか?


11
2年後、私は現在Vagrantを毎日開発に使用しています-それは素晴らしいことです!私のチームはそれを使用し、開発環境の問題を解決しました。
ジョンハント

1
PXEサーバーのセットアップに問題がなかった場合は、VBoxManageを心から知り、nfsを1分以内にセットアップする方法などを知ってください。また、ビルドチェーンを直接管理することも好きです。ほとんど意味がありません。不足しているパズルの各部分で価値が上がります。広く使用されているのは、パペットの統合によるものではなく、人々がインターネットからすぐにセキュリティホールに感染した可能性があるためです。彼らが何を言っても関係ありません。
フロリアンハイグル

2
3.5年後、私は開発のために毎日dockerを使用しています。それは良いことですが、Vagrantとは別の獣です...要件に応じて、Vagrantはチームにとってより優れた開発プラットフォームであると信じています。
ジョンハント

5
4年後、dockerがひどいことを発見しました。長生きの放浪者。
ジョンハント

3
あなたのコメントはとても楽しいものになっています
フロリアンハイグル

回答:


151

これは大きな質問なので、3つのセクションに分けます。

放浪者

Vagrantは、次の方法で1つ以上の仮想マシンをセットアップするために使用されます。

  • 既製の画像(「ボックス」と呼ばれる)をインポートする
  • VM固有の設定(IPアドレス、ホスト名、ポート転送、メモリなど)の設定
  • PuppetやChefなどのプロビジョニングソフトウェアの実行

ソフトウェアをインストールしたり、VMを読み込んでVirtualBoxの設定を行ったりした後にマシンをセットアップすることはありません。VirtualBoxのスクリプトエンジンと考えてください。

VirtualBoxだけでVagrantを使用した理由は次のとおりです。

1.マルチVMネットワークを簡単にセットアップする

私が読んだVagrantパワーユーザーコンテンツのほとんどは、同時に複数のVMをセットアップすることに関するものです。Vagrantはこれらを設定するための単一の設定ファイルを提供し、1つのコマンドですべてを起動できるようにします。

192.168.1。*サブネット上の静的IPを使用して相互にネットワーク接続するように3つのVMを構成したとします。すでにそのサブネットを使用してIPアドレスを配布している場所にいることに気付き、VMが競合するようになりました。Vagrantでは、Vagrantfileを編集してVMをリロードできますが、VirtualBoxでは、各VMを起動して内部で変更しない場合は、各VMの設定を開く必要があります。

2.ソース管理

テキストファイルに設定を配置することにより、構成をソース管理下に置くことができます。先週いくつかの変更を行い、誤って画像を壊しましたか?変更を元に戻してVMをリロードするだけです。VirtualBoxスナップショットを使用してこれを実現できますが、Vagrantfileよりもはるかに多くのスペースを占有します。

3.さまざまなプラットフォーム

http://vagrantbox.esなどのサイトで多数のボックスを利用できます。これにより、さまざまなOSまたはディストリビューションを試して、同じプロビジョニングを適用して同様の環境をセットアップできます。これは、新しいプラットフォームのテストやサポートの追加に役立ち、VirtualBoxだけを使用すると時間がかかります。

プロビジョニングソフトウェアの使用とイメージスナップショットの使用には、多くの議論があります。追加の説明については、Stephen Nelson-Smithの優れた記事「1日で100台のWebサーバーを構築する方法」を参照してください。


8
それでも、なぜ開発環境でVagrantを使用する必要があるのか​​理解できません!なぜなら、それは高価です(VMWareを使用したい場合!)vagrantによって使用されるベースボックスのような仮想マシンを準備し、VMwareによってクローンを取得して別の仮想マシンをセットアップすることができます。何よりもまず、vmrunVMwareが提供するコマンドによって、IPアドレスの変更やゲストマシン内でのスクリプトの実行など、すべての仮想マシン設定を制御できます。
オグズジェリクデミール

3
@OğuzÇelikdemirそれは公正な点です。Vagrantは、新しいマシンの立ち上げに関して、VMWareに簡単なフロントエンドを追加しただけです。舞台裏では、それvmrunを制御するために使用しています。私は常にVirtualBoxを使用していたため、VMWareバックエンドの経験はありません。
アダムルーケンズ14

1
@AdamLukens、詳細なコメントをありがとう。あなたが言ったことはおもしろいように聞こえますが、VboxManageコマンドを知っているのでしょうか?virtualbox.org/manual/ch08.html あなたが言及したほとんどすべてが固有のIP /パラメータ渡すことでスクリプトとして作成することができるvboxmanage controlvmシェルスクリプトまたは類似のコマンドをしてから...だから、どのようにバージョンコントロールvagrantを超える改善virtualbox
alpha_989

@ alpha_989同意します。Vagrantを使用するためのユニークなポイントはないようです。便宜上。
ニクラスローゼンクランツ

27

アダムからの優れた答えに加えて、Vagrantはすべてを結び付けます。ChefとPuppet(およびSaltとシェルスクリプト、および使用したいその他のプロビジョナー)は別のものですが、Vagrantはそれらをすべて結び付けて、aだけで動作するようにしvagrant upます。

その1つのコマンドは

  1. 必要なだけの場合はVMを起動しますが、
  2. 指定されたベースボックスがまだ作成されていない場合は、指定されたベースボックスからボックスを作成しますが、マシンにベースボックスがない場合は最初に作成します。
  3. URLから取得して、マシンにダウンロードします。

そのすべてについて考える必要はありません。同僚が始めた別のプロジェクトに切り替えようとしているとしましょう。レポジトリからコードをチェックアウトして実行するだけで、vagrant upISOのダウンロードやインストールを心配したり、特定のクライアントに使用する必要があるディストリビューションのバージョンや、すでにすべてを取得しているVMのコピーがあるかどうかを心配したりする必要はありませんあなたが必要です。

ChefやPuppetを使用して設定したのか、単にシェルスクリプトを使用して設定したのかを心配する必要さえありません。(わかりましたので、bundle installすべてをインストールしたかどうかを確認する必要があるかもしれませんが、それでも大したことではありません。)

すべてを結び付け、すべてに統一されたインターフェースを提供することにより、最も単純なユースケース以外のすべてをはるかに簡単にすることができます。最初は、あなたがすでにやっていることを行うための新しい方法を再学習しているように感じるかもしれませんが、Vagrantの使用を深く理解すると、はるかに少ない労力でより多くのことができることがわかります。初期投資に見合うだけの価値があります。


8
しかし、私が開発者に事前設定のVMイメージを送信するのは、浮浪者をインストールし、それを使用する方法を学び、特にサポートするときに発生する無数の問題に対処するよりもはるかに簡単で迅速ですWindowsボックス。私も本当にそれを取得しません。ファンボーイ以外の何物でもないようです。
hopeseekr 14年

5
Vagrantのインストールは、最近では信じられないほど簡単です。それをインストールできない人は誰でもコードを書くことを信用できないでしょう。開発者がチェックアウトするVagrantfileをソースコードに含めることは、実際にはVMを送信するよりもはるかに簡単です。Vagrantfileは、ベースVMのダウンロード元のURLを含むセットアップを定義します(ベースVMはそれから構成します)。最初に構成を変更する必要がない場合は、設定は完了です。ただし、プロジェクトで作業するときは、変更を加える必要があります。Vagrantfileでそれを行います。
iconoclast 14年

5
Vagrantfileをコードと共に保持しているため、プロジェクトに参加しているすべての開発者は、Vagrantfileで行っているため、VMに加えた変更を自動的に取得します。Vagrantfileの構成は難しくありません。ChefとPuppetが過剰である(多くの場合そうである)場合は、シェルプロビジョニングを使用できます。VMでシェルコマンドを入力できる場合、Vagrantfileでシェルプロビジョニングコマンドを設定するのは小さなハードルです。わずかな先行投資が必要であり、長期的には頭痛の種を大幅に減らすことができます。
iconoclast 14年

4
50台すべてのコンピューターで何かを変更する必要がある場合
iconoclast

4
ここでの議論は、実際には時期尚早な最適化に関するものです。あなたがそれを必要としないなら、浮浪者を使わないでください。VMの作成が面倒になっている場合は、Vagrantを使用してください。
cammil

9

シェフまたはパペットをVMプロビジョニングに統合できることが重要です。ほとんどのVagrantユーザーは、「Vagrant Up」または「Vagrant destroy」よりも頻繁に「Vagrant Provision」を実行し、「Vagrant reload」を実行することを頻繁に通知します。これらのタスクは、実際の作業がVMのスピンアップ/ダウンではなく、事後の「管理」であることを示しています。

(とにかく、熟練したシェフのユーザーによって提起された)より良い質問を提起することが、適切なプラグインでVagrantを使用し、ナイフを使用しない理由かもしれません(すぐにvirtualboxプラグインに到達します)。たとえば、データバッグに保存された引数値をナイフプラグインに渡すことは、1つの巨大なVagrantfileをジャグリングするよりも(方法)よりインテリジェントで、柔軟で、管理しやすいです。私は通常、CPUの数、メモリの量、デプロイするOS、ホスト名、IP、ルートなどの「動的な」リソースをchefデータバッグで定義し、レシピを変更し続ける必要がないようにします;- )。Chef Webインターフェースを使用してデータバッグを編集することは、最も簡単なオペレーターに提供できる非常に簡単なデータ入力タスクです。Vagrantfileを使用すると、コードを永久に変更し、信じられないかもしれません-コードブレーク-運用スタッフに簡単な変更を渡さないことを保証します。

ナイフにはまだvirtualbox用のプラグインがありませんが(あまり遠くない将来に1つを思い描いていますが)、vmware、xenserver、およびほぼすべての主要な「クラウド」など、ほとんどの「エンタープライズ」仮想化製品用のプラグインがすでにありますプロバイダーも同様です。これは、ナイフがvirtualboxを超えて移動する準備ができている場合にVagrantが提供するものよりもはるかに優れていることを意味します。現時点では、Chefコミュニティは、virtualbox apiをknifeプラグインに統合しないことで、virtualboxユーザーがVagrantとともにぐったりすることを喜んでいます。引数を渡すためにデータバッグを使用できるようにする、ナイフを浪費するプラグインがあります。ただし、Vagrantソフトウェアが必要であり、機能するにはモノリシックVagrantfileです。

だから、私は四肢に出かけて、Vagrantは間違いなくナイフを持つシェフよりも「良い」ではないと言います。しかし、(今のところ)管理するのが非常に簡単な環境であれば、virtualboxを主張し、おそらくデータバッグでシェフを管理するよりも「簡単」な場合に必要です。


8

ここでは、2つの開発者が(「プレーン」VirtualBoxを介して)浮浪者を単純化するユースケースを示します。以前の回答では、これらのユースケースが具体的に示されていませんでした。

  1. Vagrantは、開発プラットフォームと本番プラットフォームをできるだけ近くに保つことを目的としています。理想的な世界では、Vagrant VMのプロビジョニングに使用するのと同じスクリプトを使用して運用環境をプロビジョニングし、展開時の驚きを最小限に抑えます。

  2. 統合テストと継続的統合:Vagrantはテストから簡単に制御できるため、テスト実行時にJenkinsなどのツールからマルチマシンスタック全体を簡単に制御できます。

はい、「プレーン」なVirtualBoxもここで使用できますが、vagrantで使用される規則により、これらのシナリオのセットアップがより簡単になります。


1
私は真剣にWindowsからLinuxにvmxとvmdkをコピーします。Virtualboxの世界では違うかもしれませんが、私は疑っています!簡単なことは何ですか?ファイルをコピーしたり、vagrantfilesをいじったり、うまくいかない無数の問題がありますか?
hopeseekr 14年

6
より細かく言えば、Vagrantは、VirtualBox、VMware、Parallels、またはwhat-have-youでホストされているかどうかに関係なく、仮想マシンの特性を記述することができる仮想定義言語と考えることができます。VagrantがVirtualBoxとの「競合」ではなく、それと連携するか、それを超えて機能するかをご覧ください。
MarkHu

通常、Vagrantfileを使用して、仮想マシンをプロジェクトに設定する方法を記述します。Vagrantfileは、GitHubなどで共有するために、プロジェクトでソース管理(gitなど)にコミットされます。 VMDK全体よりも。
ベンXO

0

Vagrantは仮想マシンを抽象化するため、仮想マシンの実装を簡単に切り替えることができます。Virtual BoxからAWSまたはDigital Oceanに切り替えることができます。データベース固有のクエリ言語の代わりにSQLを使用するようなものです。

Vagrantを使用すると、開発者は1つのコマンドだけで環境をすばやくセットアップでき、他のすべてのコマンドとまったく同じです。これは、開発者が頻繁に出入りする大企業で重要です。セットアップにかかる時間を3日から1時間に短縮できます。

+アダムが言ったこと。

(私はまだシェフやパペットの使用を見つけていません...)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.