Create a gist now

Instantly share code, notes, and snippets.

Vagrant コトハジメ

Vagrant コトハジメ

更新:2013-07-30
バージョン:0.1.1
作者:@voluntas
URL:http://voluntas.github.io/

概要

Vagrant は最初、 VirtualBox を簡単にコマンドラインから扱うもでした。 しかし 最近では VMware Fusion に対応したり、EC2 に対応したりと色々出来るようになっています。ただここではあくまで VirtualBox と限定することにします。

コマンドもとてもシンプルですし、設定もかなりシンプルです。覚えて損の無いツールだと思います。

開発/検証環境を共有する際にサーバを立てるまでも無い場合はローカルで Vagrant(VirtualBox) がよさそうです。

インストール

Mac OS X:10.8.4
Vagrant:1.2.7
VritualBox:4.2.16
Vagrant
http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/Vagrant-1.2.7.dmg
VirtualBox
http://download.virtualbox.org/virtualbox/4.2.16/VirtualBox-4.2.16-86992-OSX.dmg

コマンドライン

主に使うのは以下の4つです。

  • vagrant init <box 名>
    • Vagrantfile を生成する
  • vagrant up
    • Vagrantfile に書かれている設定でインスタンスを起動する
  • vagrant halt
    • Vagrantfile に書かれているインスタンスを停止する
  • vagrant destroy
    • Vagrantfile に書かれているインスタンスを削除する

Vagrantfile については後ほど説明します。

ただ、一番最初に覚える必要があるのは上記のコマンドではありません。 インスタンス生成のために使うベースの box と呼ばれるテンプレートを用意する必要があります。

これは最終的には自分で作るのが理想ですが、まずは拾ってくることにします。 拾ってくるときの注意点ですが、変なところからは拾わないのが無難でしょう。

vagrant box

$ vagrant box add <path>

path はローカルでも http でも大丈夫です。これを使うことで ~/.vagrant に box がキャッシュされます。 一度キャッシュされたら他の box を使わない限りは box コマンドを使うことはありません。

この作業がおわったら次は環境構築のためのフォルダ作りです。1 Vagrantfile に付き 1 インスタンスなのでフォルダを分けていく必要があります。

例:

~/vagrant/<プロジェクト名>/

プロジェクト名をここでは spam としましょう。

~/vagrant/spam/
  • box の削除は vagrant box remove <box name> で出来ます。
  • box の一覧は vagrant box list で取得可能です。

vagrant init

ここで使う box はすでにキャッシュ済みだとします。

その場合は vagrant init <box 名> で Vagrantfile を生成します。 ここでは centos という box を使うことにします。

$ vagrant init centos

Vagrantfile が生成されます。色々設定は出来ますがまずは起動してみましょう。

vagrant up

インスタンスを起動するには vagrant up コマンドを使います。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centos64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2200 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /spam

vagrant ssh

インスタンスが起動したら。さっそくログインしてみましょう。 ログイン出来れば以下のような表示になるはずです。

$ vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

抜けるには exit で抜けられます。このインスタンスの状態を見るときは vagrant status コマンドを使います。

$ vagrant status
Current machine states:

default                  running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

vagrant reload

Vagrantfile を変更したときなどに使う再起動のコマンド vagrant reload を使ってみましょう。

せっかくなので Vagrantfile を編集してみます。 プライベートネットワークが持てるように変更してみます

Vagrantfile の変更:

config.vm.network :private_network, ip: "192.168.33.20"
$ vagrant relaod
[default] Attempting graceful shutdown of VM...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /spam
$ vagrant ssh
Last login: Mon May  6 15:33:01 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ ifconfig | more
eth0      Link encap:Ethernet  HWaddr 08:00:27:C9:39:9E
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fec9:399e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:459 errors:0 dropped:0 overruns:0 frame:0
          TX packets:365 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:42074 (41.0 KiB)  TX bytes:34144 (33.3 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:65:F0:36
          inet addr:192.168.33.20  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe65:f036/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:1082 (1.0 KiB)

無事 eth1 として NAT が追加されていることが確認出来ます。

vagrant halt

インスタンスを停止するには vagrant halt コマンドを使います。

$ vagrant halt
[default] Attempting graceful shutdown of VM...

vagrant destory --force で強制終了が出来ます

vagrant destroy

インスタンスの再起動は vagrant reload ですが、ここではインスタンスを削除してみましょう。 vagrant destroy コマンドを使います。本当に削除するかどうかを確認してきます。

$ vagrant destroy
Are you sure you want to destroy the 'default' VM? [y/N] y
[default] Destroying VM and associated drives...

vagrant destory --force で強制削除が出来ます

vagrant ssh-config

便利なコマンドとして vagrant ssh-config コマンドがあります。 普通に ssh してログインします。--host を指定することでデフォルトの default から変更が出来ます。

$ vagrant ssh-config --host spam >> ~/.ssh/config
$ ssh spam
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

vagrant suspend | resume

また停止と起動以外にも vagrant suspend と vagrant resume コマンドがあります。これは仮想インスタンスのサスペンドとレジュームそのままです。

起動しっぱなしだと CPU や色々食べてしまいます。個人的には halt してしまった方がいい気がしますが ... 。そのためこれらのコマンドはあまり使ってないです。

$ vagrant suspend
[default] Saving VM state and suspending execution...

$ vagrant ssh
VM must be running to open SSH connection. Run `vagrant up`
to start the virtual machine.

$ vagrant resume
[default] Resuming suspended VM...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!

$ vagrant ssh
Last login: Mon May  6 15:19:15 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

vagrant plugin

vagrant plugin というコマンドがあります。これはその名の通りプラグインが追加できます。 私が使ってるプラグインは一つだけですがこちらを実際にインストールして使ってみましょう。

vagrant plugin install <plugin name> でインストールできます。 コマンドを追加する形式の場合は vagrant のコマンド一覧に追加されます。

今回の場合は list コマンドが追加されています。

$ vagrant plugin install vagrant-list
Installing the 'vagrant-list' plugin. This can take a few minutes...
Installed the plugin 'vagrant-list (0.0.6)'!

$ vagrant
Usage: vagrant [-v] [-h] command [<args>]

    -v, --version                    Print the version and exit.
    -h, --help                       Print this help.

Available subcommands:
     box
     destroy
     halt
     init
     list
     package
     plugin
     provision
     reload
     resume
     ssh
     ssh-config
     status
     suspend
     up

For help on any individual command run `vagrant COMMAND -h`

$ vagrant list
ALL:
6147d590-dfbc-4439-afa1-d1f788fa7aa8: vagrant_1367853370 (Red Hat (64 bit))
RUNNING:
6147d590-dfbc-4439-afa1-d1f788fa7aa8: vagrant_1367853370 (Red Hat (64 bit))

この vagrant list コマンドは VirtualBox に存在するインスタンスの一覧を取得してくれます。 実際は VirtualBox を起動すればいいのですが、コマンドから簡単に取得できるようにするツールです。

残念なのは VMware Fusion など他のタイプには対応していません。

vagrant plugin install vagrant-vbox-snapshot

Url:https://github.com/dergachev/vagrant-vbox-snapshot

VirtualBox にはスナップショット機能があります。

それを vagrant コマンドから気軽に使えるようにするのがこのプラグインです。

vagrant 1.1 以上に対応しています。

# スナップショットを名前を指定して取得します
$ vagrant snapshot take <name>

# 一番最新のスナップショットに戻します
$ vagrant snapshot back

# スナップショット一覧を表示します
$ vagrant snapshot list

# スナップショットを削除します
$ vagrant snapshot delete <name>

# 指定したスナップショット(名前)に戻します
$ vagrant snapshot go <name>

かなり気軽に使えますので是非つかってみてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment