今日の知見

Toshが諸々で得た知見を雑に書きます。

24日目: Vagrant で開発用サーバ構築 その1

ご挨拶

またまたご無沙汰しております。Toshでございます。
仕事のモチベーションを無理やり保ったり何やらでブログの更新が滞っておりましたorz
今はGW休暇中(5/1現在)なので、その間に「インチキせずに」穴埋めをやっていきます。
というわけで、今回のテーマは長くなりそうなので、何回かに分けますm(_ _)m

開発用サーバ構築に使用するものについて

Oracle VM VirtualBox(以下、VirtualBox)

まずは仮想環境用ソフトウェアがないとお話にならないということで、 VirtualBox を使用しようかと思います。
下記からダウンロード可能です。

Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle

Vagrant は初期の頃は VMWare にしか対応していなかったそうですが、現在は VirtualBox にも対応しておりますし、無償の範囲での機能の制限が VirtualBox にはないという理由で選びました。
あとは Tosh 自身が VMWare をちゃんと使ったことがないからですね(´・ω・`)

Vagrant

次に、本記事のメインとして、仮想環境構築ツールは Vagrant を使用します。
下記からダウンロード可能です。

Download - Vagrant by HashiCorp

仮想環境の構築・複製・配布などは Docker も有名ですが、Vagrant は下記の点で Docker との違いがみられます(Docker は触ったことないので自信なし)。

  • 利点
    • OS ごと切り分けられるので、VMカーネルが1つ壊れても他の環境に波及しない
    • 設定ファイルは Ruby のソースなので、引数による設定の切り分けとかが楽
    • 簡単な設定なら Ruby の知識は不要
  • 欠点
    • 設定が煩雑になりがち(な気がする)
    • VirtualBox 固有の設定を盛り込むならかなり面倒
      (設定の一部は 21日目に挙げております)
    • プロジェクト(環境)ごとに Box を作って OS を立ち上げるので、複数構築・起動はリソースを占有してしまう

Docker は共通の OS・カーネルを持ち、環境ごとに差分を持つので、AP サーバと DB サーバを分ける環境であればこちらの方がリソースを抑えて疑似的に再現できそうです。
今回は1つの環境でAP サーバと DB サーバを兼ねるつもりなので、Vagrant のほうが楽になる認識です。
※Docker についてはまたの機会にでもノシ

Packer

仮想環境構築支援ツールとして、Packer を使用します。
下記からダウンロード可能です(ダウンロード後、Path が通っているディレクトリに中身の実行ファイルを配備してください)。

Download Packer - Packer by HashiCorp

Vagrant にも provisioner としての機能はありますが、割と貧弱で、何もしなければシェルスクリプトしか使用できません(多分そのはず)。
Chef を導入すればそちらに provisioner としての機能を移譲することも可能ですが、今回はあえて Packer に provision をさせてみようかと。
Packer の provision の使いやすさは Vagrant とそれほど変わりありません(JSON 形式で設定するから好みが分かれる)が、これが真価を発揮するのは環境ごとのゴールデン・イメージ(ある程度セットアップしたイメージ)を簡単に複製するところだと思います。
AWS などのクラウドサービス用にイメージを複製する場合などは Packer を使用する価値があると思います。
他の利点等については実際に触りながら検証していきます(;・∀・)

ではでは、今回はこの辺で。
次回は実際に構築しながら書いていきます。