開発環境の構築・共有を簡単にするVagrant入門
Vagrantとは?
Vagrantは、開発環境の構築と共有を簡単に行うためのツールです。どこでも同じ環境を再現できるように仮想マシン環境を管理する機能と、Atlasを通して共有する仕組みが提供されています。
VagrantとAtlasの関係
Vagrantは、アプリケーションやシステム開発のバックエンドを簡単にパッケージ化し、共有するためのツールです。このパッケージ化された環境を、「box」と呼ばれる単位で管理します。このboxには、標準で対応しているVirtualBoxをはじめ、AWSなどの各種マシン・イメージに対応したプラグインを介してアクセスします。またboxを共有するための機能としてAtlasという名前のインターネット上のサービスが提供されています。なお、Atlasは以前VagrantCloudと呼ばれていたものですが、現在はHashiCorpの他のツール(Packer、Terraform、Consul)とも連携できるように拡張されています。
VirtualBoxとの違い
Vagrantは、yumやapt-getのようなコマンドの実行や、ChefやAnsible等のツールを使って自動的にアプリケーションやミドルウェアをセットアップするプロビジョニング機能を備えています。また、ネットワークの設定などVirtualBoxのGUIを通さず、VirtualBoxの設定ファイル上で管理することができます。そのため、自分の作業環境を別の場所で再現したり、あるいは、チームや社内で設定環境を共有したりする際に役立つでしょう。
Vagrantが管理できる仮想マシンは、VirtualBoxやVMwareのものだけでなく、AWS等のパブリック・クラウド上の仮想マシンも操作できます。Vagrantが各種の仮想マシンを操作するのに使うのが、プロバイダと呼ばれるものです。VirtualBox用のプロバイダが初めからインストールされていますが、それ以外にもVagrantのプラグイン機能を通して、様々なプロバイダを使い分けることができます。
今回は、Vagrantを使ってできることを具体的に見ていきます。
Vagrantのセットアップ
VagrantはMac OS X、Windows、Linuxに対応したパッケージが配付されています。自分の環境にあったものをダウンロードし、セットアップを行いましょう。またVagrantに加えて、VirtualBoxのダウンロードも必要です。
Vagrantのダウンロード
http://www.vagrantup.com/downloads.html
VirtualBoxのダウンロード
それぞれインストールが完了しますと、Vagrantが利用できるようになります。以降の操作では、Vagrantを使って仮想マシンの起動・停止を行いますが,その際にVirtualBoxの設定を行う必要はありません。
ここではVirtualBoxを使う前提で説明を進めますが、前述のようにVirtualBoxを使わずに、VMwareやパブリック・クラウドとの連携も可能です。
初めての仮想マシン起動と操作
それでは、実際に仮想マシンを起動し、ウェブサーバの自動設定や、SSHで仮想マシン内にログインしてみましょう。以下の手順で仮想マシンを起動します。
- 作業用ディレクトリでVagrantfileを作成し、仮想マシン・イメージ(box)を指定
- コマンドラインで「vagrant up」を実行
仮想マシンの環境設定
VagrantをインストールしたPC上の、任意のディレクトリで名称「Vagrantfile」という名前のファイルを作成します。ファイルにはリスト1のような内容を記述します。
1行目は、設定ファイルのバージョンが2であることを意味します。これは、将来の互換性を保持するためのものです。2行目の「config.vm.box」は、Vagrantが扱う「box」と呼ばれる仮想マシン・イメージの形式を指定します。ここでは「hashicorp/precise64」という名称のUbuntuが動作するboxを指定しています。
boxは、Atlas(旧VagrantCloud)で公開されているものや組織で共有しているものの他に、URLやファイル名のパスで指定することもできます。Atlasで公開されている boxイメージは、Vagrantfileで名前を指定するだけで自動的にダウンロードされます。その他のイメージ、例えばVagrantbox.esなどで配付されているboxは、「vagrant box add
Vagrantfileは新たに作成せずに、他の場所からコピーしてきても構いません。あるいは「vagrant init」コマンドの実行で、サンプルが記述されたVagrantfileが作成されますので、そちらを参考に設定を行うこともできます。
仮想マシンの起動
仮想マシンを起動するには、コマンドライン上で「vagrant up」コマンドを実行します(リスト2)。最初の実行時には、ローカルの環境にboxが存在しないのでAtlasからダウンロードが始まります。そのためネットワーク環境によっては、長い時間がかかるでしょう。しかし次回以降は、ローカルに保存しているboxを使って起動しますので、すぐに起動するようになります。
これで、仮想マシンが自動的に起動しました。先ほどの「vagrant up」を実行し、boxイメージのダウンロード後は、自動的にVirtualBoxを操作して仮想マシンが起動されていきます。VirtualBoxの画面を見ますと、自動的に仮想マシンが起動していることも確認できますが、通常はVirtualBoxを意識する必要はありません。
仮想マシンのログインと操作
仮想マシンにログインするには、「vagrant ssh」を実行します(リスト3)。成功するとvagrantアカウントでログインした状態となります。また、rootにスイッチするには「sudo su」と実行します。
この他にも、覚えておきたい基本的なコマンドがいくつかありますので、まとめて表にしておきます。
コマンド | 機能 |
---|---|
vagrant up | 仮想マシンを起動 |
vagrant ssh | 仮想マシンにログイン |
vagrant halt | 仮想マシンを停止 |
vagrant suspend | 仮想マシンを一時停止 |
vagrant status | 仮想マシンの起動状態を確認 |
vagrant destroy | 仮想マシンを破棄 |
このように、Vagrantがあれば単純な操作で開発環境を構築できて、すぐ開発に取り組むことができます。
プロビジョニング機能
Vagrantは、「vagrant up」で仮想マシンを起動したあと、自動的なコマンドの実行やアプリケーションの設定を行うプロビジョニング機能を備えています。この機能を活用することで、OSの初期設定や、アプリケーションのインストール作業を迅速かつ正確に行えるようになります。
プロビジョニング機能を使うには、Vagrantfile中で設定を記述します。リスト4の例は、dateコマンドの実行結果を出力するものです。
Vagrantfileにリスト4を追加した後に「vagrant up」を行いますと、OS起動時にdateコマンドが実行されます。既に仮想マシンが起動状態の場合は、コマンド「vagrant provision」でプロビジョニング部分だけを実行できます。反対に「vagrant up --no-provision」とオプションを追加することで、Vagrantfileに書かれたプロビジョニングを実行せずに起動することもできます。
さらにPC上にあるスクリプトの実行も可能です。例えばprovision.shを実行したい場合はリスト5のように記述します。
また、リモートにあるファイルの実行も可能です。リスト5の「provision.sh」の代わりに、GitHubなどウェブサーバのURLも指定できます(リスト6)。
そのほか、ChefやPuppetやAnsible等のプロビジョニング・ツールとも連携できます。詳細はドキュメントを参照してください。