おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

Vagrantを使ってみた

Vagrantを使ってみた時の備忘録です。

Vargarntとは(?_?)

仮想マシンを簡単にセットアップするためのツール
実験的に環境をサクッと作ってぶっ壊す時に便利。本番環境に移行させたい時にも重宝する。
チームで環境設定を共有したい時にも便利らしい。ぼっち開発だからよく分からない。
仮想マシンを作成するために別途、仮想化ソフトウェア(Virtulbox / EC2 / VMware)をインストールする必要がある。

今回はMac Airに環境構築を行った。

流れ

  1. Virtualboxをインストールする
  2. vagrantをインストールする
  3. boxを取得する
  4. 仮想マシンの初期化をする
  5. 仮想マシンと戯れる
  6. box化する

環境のインストール

Virtualbox公式サイトにしたがってダウンロード、インストールする。
f:id:orange_lily27:20150517030506p:plain

Vagrantを公式サイトにしたがってダウンロード、インストールする。 f:id:orange_lily27:20150517032159p:plain

boxを取得する

公式サイトのbox配布ページからboxを入手する。
以下のコマンドでboxを取得できる。
vagrant add box 保存するboxにつける名前 配布URL

今回はubuntu14.04(trusty) 64bit版を取得した。

vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

取得したboxはホームフォルダ以下の場所に保存される。
ホームフォルダ/.vagrant.d/boxes

仮想マシンの初期化をする

  1. 仮想マシン作成にあたりディレクトリを作成し、移動する
mkdir myUbuntuVM
cd myUbuntuVM
  1. 仮想マシンの初期化する
vagrant init trusty64

上記のコマンドを行うことで仮想マシンの設定ファイルVagrantfileが出来上がる。

f:id:orange_lily27:20150517045253p:plain
VirtualBox上に仮想マシンが自動的に作成されている

  1. 仮想マシンの起動
vagrant up

仮想マシンへのssh接続

仮想マシンへの接続はマシン起動後vagrant sshとすればよい。 Windowsの場合にはデフォルトではsshクライアントは入っていないのでPuTTYなりCygwinなりを別途入れる必要がある。

そういえばPuTTYはこんな騒動もあったけ...

せっかくなので、webサーバーをインストールしてみた。
sudo apt-get install apache2
起動。
service apache2 start
/var/www/htmlにindex.htmlを作成した。

一旦、仮想マシンから抜けてVagrantfile中の以下のプライベートネットワークの部分をコメントアウト

f:id:orange_lily27:20150519162330p:plain

マシンを再起動しVagrantfileの変更を有効にする。
ホストマシンのブラウザから192.168.33.10へアクセス。

f:id:orange_lily27:20150519163122p:plain

アクセス出来ました。

共有フォルダについて

ホストマシンのmyUbuntuVM(vagrant initしたディレクトリ)と仮想マシンの/vagrantが共有されている。 /vagrantと編集を行いたいディレクトリにシンボリックリンクなんか張っておくと便利。
例えばln -fs /vagrant /var/www/htmlとすると、ホストマシンから仮想マシンのwebサーバー上の編集が直でできることになる。

プロビジョニングについて

まず、プロビジョニングって何ですの(?_?)ってところから。
wikipedia先生に聞いてみる。よくわからん。

とりあえず環境設定をあらかじめ定義、自動で行ってくれるサービスくらいの知識理解にとどめておくことにする。そしてchefなにそれ料理作ってくれるの(?_?)みたいな状態なので、vagrantではchefとかpuppetも使えるみたいだけど今回はシェルスクリプトを利用する。

Vagrantfile中に

config.vm.provision :shell, :inline => "echo Test Provisioning"

と記述する。

f:id:orange_lily27:20150519181039p:plain

成功。

なお、プロビジョニングは初回のvagrant upでしか実行されない。
起動中の仮想マシンに対してプロビジョニングを行いたい場合はvagrant provisionとすればよい。

プロビジョニングを別ファイルから読み込ませたい時はVagrantfile中に

config.vm.provision :shell, :path => "provision.sh"

と記述すればよい。シェルスクリプト側は
provision.sh

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2

とすると仮想マシン作成時にwebサーバーが自動的にインストールされる。

box化

現在の仮想マシンの設定を新たにbox化したい場合はvagrant packageとすればよい。
けっこう時間はかかるがホスト側にpackage.boxができる。

システム側に作成したパッケージを追加したい場合は
vagrant add パッケージ名 package.boxとするとホームフォルダ/.vagrant.d/boxesにboxが追加される。

Vagrantコマンド

コマンド 説明
vagrant add box 名前 box配布URL box取得
vagrant box list 取得したboxの一覧を表示
vagrant box remove box名 box削除
vagrant init box名 仮想マシンの初期化
vagrant up 仮想マシンの起動
vagrant halt マシンの終了
vagrant status 現在のマシンの状態を確認する
vagrant suspend マシンの一時停止
vagrant resume マシンの再開
vagrant destroy マシンの削除
vagrant reload マシンの再起動
vagrant ssh マシンへの接続
vagrant provision プロビジョニングの更新
vagrant package 現在の仮想マシンのbox化

追記

上記のvagrant環境構築ををubuntuではなくCentOSで実施したところ
CentOS7だとホストから仮想マシンへのネットワークが上手くいかないらしい。
とりあえずの回避方法はCentOS6を使う。

CentOSのbox一覧