web-dev-qa-db-ja.com

VirtualBoxだけでなくVagrantを使うべきなのはなぜですか?

私は開発環境を作るためにVirtualBoxを長年使ってきました。

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

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

操り人形とシェフはVagrantの一部ではありません、彼ら自身のものは正しいですか?

それで、はい、それだけでVagrantがVirtualBoxよりも具体的にどのような利点を提供しますか?

225
John Hunt

これは大きな問題なので、3つのセクションに分けて説明します。

浮浪者

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

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

VMのロードおよびVirtualBox設定の設定を過ぎてソフトウェアをインストールしたりマシンをセットアップしたりすることはありません。 VirtualBoxのスクリプトエンジンと考えてください。

これが私がVirtualBoxだけでVagrantを使う理由のいくつかです。

1.簡単にマルチVMネットワークを設定

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

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

2.ソース管理

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

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

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

イメージスナップショットを使用するだけでなく、プロビジョニングソフトウェアを使用することには多くの議論があります。さらに議論を進めるために、Stephen Nelson-Smithの優れた記事 1日に100台のWebサーバーを構築する方法 を紹介します。

149
Adam Lukens

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

その1つのコマンドは

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

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

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

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

27
iconoclast

シェフや人形をVMプロビジョニングに統合できることが重要です。ほとんどのVagrantユーザーは、 'vagrant up'や 'vagrant destroy'よりもはるかに頻繁に 'vagrant provision'と時折 'vagrant reload'を実行しているとあなたに言うでしょう。これらのタスクは、実際の作業は仮想マシンのスピンアップ/ダウンではなく、事後にそれらを「管理」していることを示しています。

(とにかく、熟練したChefユーザーによって提起された)より良い質問を投げかけるのは、なぜVagrantを使用し、適切なプラグインでナイフしないのか(おそらく、しばらくするとvirtualboxプラグインになるでしょう)?たとえば、データバッグに格納されている引数値をナイフプラグインに渡す方が、巨大なVagrantfileを1つ使うよりも(インテリジェントで)柔軟で管理しやすいものです。私は通常、レシピの変更を続ける必要がないように、CPUの数、メモリの量、デプロイするOS、ホスト名、IP、ルートなどの動的なリソースをchef databag(s)に定義します。 ) ChefのWebインターフェースを介してデータバッグを編集することは、私がほとんどの後輩のオペレーターに与えることができる本当に簡単なデータ入力作業です。 Vagrantfileを使用すると、永遠にコードを修正しているかどうかを判断できます - コードが壊れます - これにより、運用スタッフに単純な変更を引き継がないことが保証されます。

事実ナイフはまだvirtualbox用のプラグインを持っていません(私はそれほど遠くない将来にそれを構想します)、vmware、xenserverそしてちょうどすべての主要な「クラウド」を含むほとんどの「エンタープライズ」仮想化製品のためのプラグインはすでにありますプロバイダも同様です。これは、仮想ボックスを超えて移動する準備ができている場合に、Vagrantが提供するものよりもナイフがはるかに優れていることを意味します。現時点では、Chefコミュニティは、virtualbox apisをナイフプラグインに統合しないことでvirtualboxユーザーをVagrantと一緒にさせてくれることをうれしく思います。引数を渡すためにデータバッグを使用することを可能にするナイフvagrantプラグインがあります。しかし、それはまだvagrantソフトウェアを必要とし、それは機能するためのモノリシックVagrantfileです。

それで、私は手足で出かけて、Vagrantが確かにナイフを持ったChefより「良くない」と言うでしょう。あなたがvirtualboxを主張し、おそらくデータバッグを使ってchefを管理するより「簡単」であるならば、管理するためにかなり単純な環境があれば必要です。

9
Andrew

これは、vagrantが単純化する2つの開発者用ユースケースです(「普通の」VirtualBoxを超えて)。これらのユースケースが前の回答で具体的に指摘されているのを見たことはありません。

  1. Vagrantは、開発プラットフォームと製造プラットフォームを可能な限り近くに保つという目的で役立ちます。理想的には、Vagrant VMのプロビジョニングに使用されるTHE SAMEスクリプトを使用して実稼働環境をプロビジョニングし、デプロイ時の驚きを最小限に抑えます。

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

はい、ここでも "普通の" VirtualBoxを使うことができます - しかしvagrantで使われている規約はこれらのシナリオを設定することをより簡単にします。

8
Ben XO

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

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

+アダムが言ったこと。

(私はまだChefやPuppetの用途を見つけていませんが…)

0
Chloe