Vagrant のインストールから仮想環境立ち上げまでを、オプションなどと共にちょっと細かく追ってみた
こんにちは。@at_grandpaです。
前回宣言したとおり、Vagrant について書こうと思います。
Vagrant は御存知でしょうか。
Vagrant とは、簡単に言うと「仮想環境を容易に構築できるツール」です。
コマンド一つで VirtualMachine 上に仮想環境を立ち上げることができ、
コマンド一つでその仮想環境を電源OFFにしたり破棄できたりします。
詳しくは、公式サイトかその他のサイトを参照してください。
今回はこのVagrantのインストールから、仮想環境立ち上げまでを、
主要コマンドのオプションと共に ちょっと細かく 追っていこうと思います。
備忘も兼ねて。
※かなり長くなってしまったので、サクッと終わらせたい方はほぼ最後までスクロールし、「まとめ」まで飛ばしてください
環境
OSとRubyGems
今回の環境は以下のようになっています。
- Mac OS X 10.7.5
- gem -v => 2.0.3
gem は Ruby のライブラリ群です。
あまり Ruby には詳しくないのでググりました。
RubyGems は (Ruby に特化した apt-get と同じようなパッケージングシステムで)
ライブラリの作成や公開、インストールを助けるシステムです。
RubyGems はRuby1.9以降に標準添付されています。
MacOSXの標準搭載のRubyは1.8.7なので、私は2.0.0にアップデートしました。
(後から調べると、Macにも RubyGems が標準で入っているみたいですが)
アップデートに関しては、このあたりが参照できると思います。(Macportsです)
後々、Chef-Soloを触ります。Chef-solo は Ruby1.9 以降で動作するので、
このタイミングでバージョンをアップしておくのが良いでしょう。
VirtualBox
Vagrant で立ち上げる仮想環境は VirtualBox を使用したものです。
以下から環境に合ったものをインストールしてください。
私の場合は、
- VirtualBox 4.2.18 for OS X hosts [x86/amd64]
でした。インストールの説明は割愛させていただきます。
Vagrantのインストール
インストール方法はいくつかありますが、ここでは先ほどのRubyGemsを用いてインストールします。
※注:RubyGemsでインストールされるVagrantのバージョンは1.0.7です
バージョンが少し古いですが、今回はこちらのバージョンで進めさせていただきます。
2013-09-27 時点でのVagrantの最新バージョンは1.3.3です。
こちらから参照できます。
http://downloads.vagrantup.com/
ここにはdmgファイルもあるので、最新版をGUIでインストールしたい方はどうぞ。
追記:いろいろ調べてみると、Vagrant1.1 以降は RubyGems での配布を行っていないみたいです。
RubyGemsでインストール
簡単です。以下のコマンドでインストールします。
$ sudo gem install vagrant
依存関係のあるものもいくつかインストールされます。もしアンインストールしたい場合は、
$ sudo gem uninstall vagrant
とすれば良いです。が!
綺麗にするには 依存関係のライブラリも手動で アンインストールしないといけませんので注意してください。
インストールが完了すればvagrant
コマンドが使えるようになります。
バージョンを確認しましょう。
$ vagrant -v Vagrant version 1.0.7
インストール先はこちらです。
$ which vagrant /opt/local/bin/vagrant
PATHを通していない方は通してください。
vagrant
コマンドは、サブコマンドを用いる形です。
$ vagrant hoge fuga ...
hoge の部分がサブコマンドで、それに続く fuga が引数になります。
git と同じようなものです。
各コマンドは -h オプションでマニュアルが見れますので、参考にしたい方はそちらを。
以上でインストールは終わりです。
次はいよいよ開発環境を立ち上げてみましょう。
Vagrantを用いてVirtualBox上に仮想環境を立ち上げる
boxファイルからOS設定ファイルを生成する
Vagrantで仮想環境を構築するには、仮想環境のOSの核となる boxファイル が必要です。
以下からboxファイルのURLを取得できます。
私は CentOS-6.3-x86_64-minimal.box を選択しました。
中には壊れているファイルもあり、 Vagrant init
コマンドでエラーが出ることがあります。
その時は別のboxファイルを用いてください。
このboxファイルを用いて、仮想環境の設定ファイルを生成します。
それには vagrant box
コマンドを使用します。
$ vagrant box -h Usage: vagrant box <command> [<args>] Available subcommands: add list remove repackage
よく見るとサブコマンドのさらにサブコマンドがあります。
今回使用するのは add
コマンドです。
$ vagrant box add -h Usage: vagrant box add <name> <url> -f, --force Overwrite an existing box if it exists. -h, --help Print this help
■ \<name>:
・通称 box-name
・ダウンロードしたboxファイルごと、つまりOSの設定ごとにbox-nameとして名前を付けられる
■ \<url>:
・boxファイルのURL
・ローカルにあるboxファイルならそのPATH
このような使い方をします。実際に開発環境の設定ファイルを作成しましょう。
$ vagrant box add cent_os ~/vagrant/CentOS-6.4-x86_64-v20130427.box
「cent_os」というbox-nameで、CentOS-6.4-x86_64-v20130427.boxを用いてOS設定ファイルを作成
ここで一つ注意があります。
\<url>の部分に「http://〜」のURLを用いるとvagrantがboxファイルをダウンロードして実行してくれるのですが、
このダウンロードが非常に遅い!
少なくとも私の環境はそうでした。他サイトでも報告されています。
ですので、例のようにブラウザからダウンロードしてローカルパスを用いる方法をおすすめします。
さて、vagrant box add
コマンドを実行したら何が起こるのでしょうか。
このコマンドは、 ~/.vagrant.d ディレクトリを作成しています。
$ tree -d ~/.vagrant.d/ ~/.vagrant.d/ ├── boxes │ └── cent_os ├── gems └── tmp
~/.vagrant.d/boxes 以下に、box-nameのディレクトリがあり、ここに設定ファイルが入っています。
編集することはほぼ無いので、このような構成とだけ覚えておけばよいでしょう。
boxesのディレクトリはどんどん追加できます。
$ vagrant box add cent_os2 ~/vagrant/CentOS-6.4-x86_64-v20130427.box ... $ tree -d ~/.vagrant.d/ ~/.vagrant.d/ ├── boxes │ ├── cent_os │ └── cent_os2 ├── gems └── tmp
複数のbox-nameを扱うことができ、立ちあげたいOSをbox-nameで指定することができます。
Vagrant init コマンドで Virtual Machine (VM) の設定ファイルを作成する
上記までで、OSの設定ファイルが作成されました。
次はこれを用いてVMの設定ファイルを作成します。
VMの設定ファイルを作成するコマンドは、 vagrant init
コマンドです。
$ vagrant init -h Usage: vagrant init [box-name] [box-url] -h, --help Print this help
■[box-name]:
・OSの設定ごとに名づけた box-name がここに入る
■[box-url]:
・boxファイルのURLも指定できる
・しかし、後述する vagrant up コマンドの際にダウンロードするので若干遅い
■どっちがいいの?:
・[box-name]だけだと、~/.vagrant.d/boxes を検索し、一致するbox-nameがあればそれを用いて設定ファイルを作成
・[box-name][box-url] と指定すると、box-nameを新しく設定し、立ちあげ時にURLのファイルをダウンロードする
では実行してみましょう。新しいディレクトリを作成してください。
$ mkdir test_dir $ cd test_dir $ vagrant init cent_os A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. $ ls Vagrantfile
Vagrantfile というファイルができあがっています。
このファイルは、「指定したbox-nameのOS」で立ち上がるVMの設定ファイルです。
中にはネットワークの設定や、指定しているbox-nameなどが記載されています。
Vagrantfileは今後いろいろと書き換えていきます。
まずはネットワークの設定をしましょう。
vimなどのエディタでVagrantfileを開き、23行目あたりにある以下の行のコメントを外してください。
# config.vm.network :hostonly, "192.168.33.10" # この行の先頭コメントを外す
・ホストとゲストの間を「Host Only Network」で接続する際に用いるIP
・Host Only Network → ホストとゲスト間を仮想のLANで接続する方式
これで、ホストコンピュータと仮想マシンが接続されます。
以上で、VMの設定ファイルの作成は終わりです。
次はいよいよVMの立ち上げです。
VMの起動とシャットダウン
Vagrantfileの設定が終わったら、 vagrant up
コマンドでVMを立ち上げます。
$ vagrant up -h Usage: vagrant up [vm-name] [--[no-]provision] [-h] --[no-]provision Enable or disable provisioning --provision-with x,y,z Enable only certain provisioners, by type. -h, --help Print this help
■ [vm-name]:
・VirtualMachine の名前
■ [--[no-]provision]:
・provisonを実行するかどうか
■ [--provision-with x,y,z]:
・provisionのタイプ別実行
vm-nameはVMの名前を表します。vagrantは複数のVMを簡単に立ち上げられるのも特徴です。
その際に判別するための名前がvm-nameです。
複数のVMを立ち上げるには、Vagrantfileを編集しなければいけません。
このことに関しては、また後日、記事を書かせていただきます。
provisionは、vagrant up の際に、指定されたプログラムを走らせるかどうかを決めます。
立ち上げた後にシェルを走らせたり、Chefの設定を自動で走らせたりできます。
provisionに関しても、後日書かせていただきます。
今回は複数のVMを立ち上げないため、VMにも名前を振っていません。
デフォルトのままで良いので、引数なし・オプションなしで vagrant up
を実行してみましょう。
$ vagrant up ... # いろいろな出力 [default] -- v-root: /vagrant $
いろいろと設定が出力されています。1分程度待てば立ち上がるでしょう。 [default] というのはVMの名前です。今回は名前を付けていないのでdefaultになっています。
VMが立ち上がったかどうかは、 vagrant status
で確認できます。
$ vagrant status Current VM states: default running 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`.
VMが立ち上がっているのがわかります。
その後の出力からもわかるように、
- シャットダウン:
vagrant halt
- 一時停止:
vagrant suspend
- 再開:
vagrant up
となっています。いずれも、引数に取り得るのはvm-nameです。
試しにvagrant halt
でシャットダウンしてみましょう。
$ vagrant halt [default] Attempting graceful shutdown of VM... $ vagrant status Current VM states: default poweroff The VM is powered off. To restart the VM, simply run `vagrant up`
VMにログインする
vagrant up
コマンドでVMが起動している状態にします。
この状態でVMにログインするには、 vagrant ssh
コマンドを実行します。
$ vagrant ssh -h Usage: vagrant ssh [vm-name] [-c command] [-- extra ssh args] -c, --command COMMAND Execute an SSH command directly. -p, --plain Plain mode, leaves authentication up to user. -h, --help Print this help
■ [-c]:
・ssh コマンドを直接たたける
・-c の後に記述したコマンドを接続先のサーバーで実行し、結果をホスト側に表示する
■ [-p]:
・ユーザーの認証を行う
・現在のユーザーでのパスワードを求められる
Vagrant の ssh 設定を見るには vagrant ssh-config
コマンドを使います。
$ vagrant ssh-config -h Usage: vagrant ssh-config [vm-name] [--host name] --host NAME Name the host for the config.. -h, --help Print this help
■ [--host name]:
・~/.ssh/config に書き出す際のhostの名前を指定できる
では、 vagrant ssh
でログインしてみましょう。
vm-nameもコマンドも必要ないので、引数は何もなしで大丈夫です。
$ vagrant ssh Last login: Fri Sep 27 00:00:00 2013 from 10.0.2.2 [vagrant@localhost ~]$
仮想環境にログインできました!
ユーザー名は「vagrant」となっています。
rootのパスワードは「vagrant」となっていますので、必要であれば変更しましょう。
いやー、ついにできましたねー。
お疲れ様でした!
まとめ
ちょっと細かく書いてしまったので、おおまかな流れをここでまとめます。
具体的に書いていますので、必要箇所は適宜変更してください。
- Virtual Box のインストール Download VirtualBox
$ sudo gem install vagrant
- boxファイルの取得 http://www.vagrantbox.es/
$ vagrant box add cent_os ~/vagrant/CentOS-6.4-x86_64-v20130427.box
$ vagrant init cent_os
$ vagrant up
$ vagrant ssh
以上が仮想環境ログインへの道のりです。
こう見るとシンプルですね。
これでやっとスタートラインに立つことができました。
試行錯誤のための仮想環境として、バンバンupし、バンバンdestroyしましょう!
これがvagrantの醍醐味です!
ちなみに、VM上で保存したデータは、vagrant destroy
で環境を破棄するまでは保存されています。
$ vagrant destroy -h Usage: vagrant destroy [vm-name] -f, --force Destroy without confirmation. -h, --help Print this help
次回
次回以降は、以下のことを考えています。
のんのんと更新していきますので、お暇があればお茶でも飲みながらどうぞ。