今すぐVagrantを始めよう

なにはなくともVagrantだぜ — 最近私はそう思っている。Vagrant(ベイグラント)は派手なソフトウェアではないが、IT技術者の学習と仕事のスタイルを大きく変革する可能性を持っている。デスクトップマシンとしてWindowsやMacを使っていて、Linuxサーバーにも触る機会がある人、そういう人ならVagrantを使わない手はない、使うべきだ。今すぐ使い始めよう。

Vagrant Logo

今や仮想環境は万人に開放された

Vagrantは、仮想環境の構築と制御を行うソフトウェアだ。あなたが今使っているそのコンピュータ内に、誰にも迷惑をかけずにいじり倒せる(壊したってかまわない)サーバマシンを生み出すことができる。その仮想サーバーマシンは、開発環境としても、Linuxソフトウェアやサーバー管理の学習や実験にも、自由に気兼ねなく使える。Vagrantによる仮想環境は、あなたの開発作業と学習・実験を大幅に加速する。

仮想マシンを実際に作り出すバックエンドは、VirtualBox(バーチャルボックス)を利用する。Vagrantは、他の仮想化バックエンド(Vagrantでは「プロバイダー」と呼ぶ)も幅広くサポートしている。だが、まずは「Vagrant + VirtualBox」の組み合わせから始めよう。

コマンドラインSSHクライアントの準備(Windowsのとき)

VagrantをWindowsで使うときは、事前に準備作業が必要だ。

Vagrantは、仮想マシンへのログインにSSH(Secure Shell)を使う。Windowsのデフォルト状態では、sshコマンドは存在しないので、次のようなことになる。

C:\Users\hiyama\Work>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use the PuTTY SSH client with the following
authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/Users/hiyama/.vagrant.d/insecure_private_key

C:\Users\hiyama\Work>

「sshコマンドが見つからないよ」と言われた。親切にも、SSHクライアントの導入方法がアドバイスされている。

  1. Cygwinをインストールする。
  2. MinGWをインストールする。
  3. Gitをインストールする。
  4. PuTTY SSHクライアントを使う。

CygwinとMinGWは、Windows上にLinuxに近いコマンドセットを揃えるソフトウェアだ。Cygwinのインストールは、http://cygwin.com/install.html に従えばいい。MinGWのインストールは、http://www.mingw.org/wiki/MSYShttp://www.mingw.org/wiki/Getting_Started に書いてある。が、これらはやや面倒かも知れない。

PuTTY(パティ)のSSHクライアントであるplink.exeを使うのが一番お手軽に思える。だが、Vagrant 1.4.3 では、plink.exeの起動がうまくいってない。

という次第で、ここでは、Git for Windowsをインストールすることにする。Git for Windowsをインストールすれば、sshコマンドをはじめとするLinux風コマンド群とGitが使えるようになるので一石二鳥だ。私の個人ブログ記事「WindowsにおけるGit利用環境は整った: Git for Windows と SourceTree for Windows」の「Git for Windowsのインストール」の節に従ってもらえればよい。Git for Windows のインストールで注意すべきは Adjusting your PATH environment の設定だけで、他はデフォルトのままでもよい。SourceTreeは今回の目的には必須ではないが、興味がある人は入れておいて損はない。

Git Bash

Git Bashのアイコンをクリックすれば、コンソール(黒い画面)が起動する。プロンプト(ドルマーク)に対して ssh とタイプして次のような表示となればOKだ。これでsshが使える。

hiyama@HIYAMA /c/Users/hiyama
$ ssh
usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

hiyama@HIYAMA /c/Users/hiyama
$

VirtualBoxとVagrantのインストール

VirtualBoxもVagrantもインストールは簡単だ。次のURLからインストーラー(バイナリパッケージ)をダウンロードして実行すればよい。

VirtualBox Downloads

Vagrant Downloads

VirtualBoxは、バージョンによってバグがあったり、Vagrantとの相性が悪かったりする。その場合は、https://www.virtualbox.org/wiki/Download_Old_Builds から古めのバージョンをダウンロードするとよい。

インストールが終わったら、まずはVirtualBoxを起動してみる。管理用のGUIウィンドウが出ればOK。Vagrantの確認は、Windowsなら先ほど入れた Git Bash のウィンドウ(Macならターミナル、いずれにしても黒い画面)から vagrant -v としてみる。バージョン番号が表示されればOKだ。

Vagrantマシンを起動する

Vagrantのトップページでは、次に3つのコマンドで仮想マシンをセットアップして起動できるとうたっている。

  1. vagrant box add
  2. vagrant init
  3. vagrant up

ここでは、 いきなり vagrant up してみよう。ただし、Vagrantfileという名前のファイル(最初は大文字、拡張子はない)を次の内容で作っておく必要がある。

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end
end

すぐ上の内容をテキストエディタにコピーして、Vagrantfileというファイル名でセーブする。.txtなどの拡張子が付いてしまったら名前を変更して拡張子は消す。Windowsだと警告が出るが、かまわず実行する。このVagrantfileを置く場所はどこでもよいが、迷ったら自分のホーム(Windowsなら、C:\Users\<ユーザー名>\)にしよう。

自分のホームにVagrantfileを作った場合なら、Git Bashやターミナルに対して cd と打ってから、vagrant up というコマンドを打つ。一般には、Vagrantfileがあるディレクトリ(フォルダー)をカレントディレクトリとして、vagrant up だ。

次のような状態になるだろう。これは私の環境での例だから、このとおりというわけではないけど。

hiyama@HIYAMA ~/tmp
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'precise32' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading box from URL: http://files.vagrantup.com/precise32.box
Progress: 17% (Rate: 512k/s, Estimated time remaining: 0:09:34)

http://files.vagrantup.com/precise32.box というファイルがダウンロードされるのだが、files.vagrantup.comサーバーと回線の状態により、かなり長時間かかるかもしれない。気長に待ちましょう。

コンピュータのBIOS設定によっては、「仮想化支援機構(VT-x/AMD-V)を有効化できません」というダイアログが出て処理が進まなくなることがある。このときは、BIOSの設定を変更して、「Intel(R) Virtualization Technology」を有効にしなくてはならない(その手順はコンピュータにより違う)。

特に問題がないなら、boxファイルのダウンロードの後にナニヤラカニヤラがあって、次のような状態になるだろう。

hiyama@HIYAMA ~/tmp
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...

... (省略) ...

Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant

hiyama@HIYAMA ~/tmp
$

おめでとう。はじめてのVagrantマシンが起動した!

仮想マシンのコンソールウィンドウも現れているはずだが、このウィンドウにフォーカスが行くと、すべてのキーボード操作がこのウィンドウに捕らえられるので、困ってしまうかもしれない。Windowsなら「右コントロールキー」、Macなら「左コマンドキー」で仮想マシン・ウィンドウからフォーカスを奪うことができる。

SSHで仮想マシンにログイン

起動した仮想マシンにログインしてみよう。vagrant ssh というコマンドを使う。パスワード入力なしに仮想マシンに入れる。

hiyama@HIYAMA ~/tmp
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
vagrant@precise32:~$

ログインが確認できたらすぐにexitしてしまってもかまわないが、w、 pwd、 ls なんてLinuxコマンドを打ってみるのもいいだろう。

vagrant@precise32:~$ w
 04:22:12 up 9 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
vagrant  pts/0    10.0.2.2         04:21    0.00s  0.33s  0.00s w
vagrant@precise32:~$ pwd
/home/vagrant
vagrant@precise32:~$ ls
postinstall.sh
vagrant@precise32:~$ exit
logout
Connection to 127.0.0.1 closed.

hiyama@HIYAMA ~/tmp
$

仮想マシンの電源OFFと削除

仮想マシンは、実際のコンピュータと同じように電源のON/OFFができる。今は電源ONの状態だから、電源OFFにしてみる。それには、vagrant halt とする。

hiyama@HIYAMA ~/tmp
$ vagrant halt
[default] Attempting graceful shutdown of VM...
DL is deprecated, please use Fiddle

hiyama@HIYAMA ~/tmp
$

と、こんな感じだ。もう一度 vagrant up で電源をONに(再起動)できる。

電源OFFではなくて、仮想マシンを完全に削除(廃棄処分)してしまうには、vagrant destroy だ。

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

hiyama@HIYAMA ~/tmp
$

仮想マシン上に保存していたデータはすべて消えるので要注意。ただし、長時間かけてダウンロードしたboxファイル(今回は http://files.vagrantup.com/precise32.box)は残っている。次に vagrant up するときに再ダウンロードは起きないので、その点はご心配なく。

そして、Vagrantライフへ

以上で、Vagrantマシンの生成から破棄までを体験した。Vagrantマシンは、「仮想」とはいいながら、本物のマシンとまったく同じように扱える。仮想マシンにソフトウェアをインストールして実行したり、様々な設定を変更したり、複数仮想マシンによるネットワーキングさえもできる。

Vagrantfileや関連するスクリプトを上手に書けば、vagrant up するだけで望みの環境がその場で立ち上がるのだ。仮想環境はクラウド上に展開することもできる。例えば、アマゾンのAWS上にVagrantマシン群を配備できる。クラウド・ホスティング・サービスDigitalOcean(デジタルオーシャン)への配備の例は「1円クラウド・ホスティングDigitalOceanを、Vagrantから使ってみる」を参照。

さてどうでしょう? 「IT技術者の学習と仕事のスタイルを大きく変革する可能性」を感じていただけただろうか。