LOG

Vagrantで開発環境

Vagrantとは何か、VMとは何かという部分は割愛
VagrantのインストールからVM上に開発環境を作成するまでのメモ
バージョンは1.8.1

用語

box / ボックス仮想マシンを起動するためのテンプレート
自分で追加したりも出来る
provider / プロバイダ仮想化ソフトウェア(VirtualBoxとか)
※ VagrantではVMwareやAmazon EC2もプロバイダとして指定できる
provisioning / プロビジョニングソフトウェアのインストールや設定といった初期設定を行うこと
Vagrantfile仮想マシンの設定が書かれたファイル

構成図

構成図

Vagrantのboxを使ってVagrantfileやprovisonersを参考にVM上にVagrantマシンを構築する

インストール

16/1/21現在、Vagrantはインストーラーを使ってインストールするようになっているので、
gemでインストールしていた場合はアンインストールしておく

$ gem uninstall vagrant

使い方

Usage: vagrant [options] <command> [<args>]
コマンド
boxboxの管理(登録や削除など)
connect
destroyVagrantマシンの停止と破棄
global-status全てのVagrantマシンのステータスを表示
haltVagrantマシンの停止
helpコマンドの使い方、サブコマンドの表示
init初期化 → Vagrantfileを作成
loginATLASへのログイン
package実行中のvagrant環境をboxにする
pluginプラグインの管理(インストール、アンインストール、アップデートなど)
port
powershellpowershellでマシンに接続する
provisionプロビジョニングを行う
push
rdpRDPでマシンに接続
reloadVagrantマシンの再起動、Vagrantfileを読みなおす
resume一時停止しているvagrantマシンの復帰
share
snapshotスナップショットの管理(保存、復元など)
sshSSHでマシンに接続
ssh-config
statusVagrantマシンのステータスを表示
suspendVagrantマシンを一時停止
upVagrantの実行とプロビジョニングを行う
versionVagrantのバージョン表示

boxの追加

開発環境をVM上に作成するために、まずはboxをVagrantに追加する
以下のリンク先で必要なboxを探す

ATLASはVagrantと同じHashiCorpのサービスで<登録者名>/<box名>で表示される。
極力公式を使ったほうが良いかもしれない。

実際にvagrantにboxを追加するには

$ vagrant box add <box名> <boxのURL>

で追加出来る。
ただし、公式の方はURLではなく2つのコマンドが

$ vagrant init bento/centos-6.7; vagrant up --provider virtualbox

という具合「init」と「up」に1行で表示されている。今回はboxの追加のみを行いたいので
公式を利用する場合は、

$ vagrant box add <投稿者名>/<box名>
# ↓ bento/centos-6.7の場合
# $ vagrant box add bento/centos-6.7

とする。

boxの名前を変更したい

その場合は、boxのディレクトリ名を変更するだけで良い。
boxは「~/.vagrant.d/」に入っている。

boxを削除したい

$ vagrant box remove <box名>

初期化

プロジェクトのディレクトリを作成し、terminalでディレクトリに入り、Vagrantを初期化する

$ mkdir vagrant_test
$ cd vagrant_test
$ vagrant init <box名>

boxを作成する場合もあるので、<box名>は省略可能
既にあるboxを使うので今回は以下のように

$ vagrant init centos6.7

するとプロジェクトのディレクトリにVagrantfileが追加される。

これで「vagrant up」するとVMに仮想マシンが追加される。
ただこのままだと使いにくいのでVagrantfileに色々追記していく

設定出来る内容はVagrant日本語ドキュメント | Vagrantfile
公式を参照

以下の内容はVM → virtualbox、box -> bento/centos-6.7のもの。

Vagrant.configure(2) do |config|
    config.vm.define "web" do |web|
        # boxの指定
        web.vm.box = "centos6.7"
        # virtualboxのときだけマシン名変更
        web.vm.provider "virtualbox" do |v|
            v.name = "centos6.7"
        end
        # ネットワークの設定
        web.vm.network "private_network", ip: "192.168.33.10"
        # プロビジョニング (短いのでここに全て書く)
        web.vm.provision "shell", inline: <<-EOT
            # timezoneの変更
            cp -p /usr/share/zoneinfo/Japan /etc/localtime
            # iptables off
            /sbin/iptables -F
            /sbin/service iptables stop
            /sbin/chkconfig iptables off
            # Apache
            yum -y install httpd
            /sbin/service httpd restart
            /sbin/chkconfig httpd on
        EOT
    end
end

上記は「web」という名前を定義し、その中で設定を行っている。
これはVagrantのMULTI-MACHINEという複数のマシンを管理する機能で
これを利用すると「up」や「halt」をする際に定義名で名指しできる。以下のような感じ

$ vagrant up web
$ vagrant halt web

定義していない場合「default」として実行される。

また、プロビジョニングでhttpdをインストールしている。

補足
他にもVMのメモリやCPUの数などもVagrantfileで定義できる。
プロビジョニングの参考
Mac 上で Vagrant を使って CentOS + Apache をセットアップ by @hmukaida on @Qiita

動かしてみる

もし既に「up」しており、VMが起動中であれば一度「reload」し「provision」を実行する

$ vagrant reload web
$ vagrant provision web

まだ「up」してない場合は

$ vagrant up

でOK

これでブラウザでhttp://192.168.33.10にアクセスするとapacheの画面が表示される。

以上!