とりとめも

藻類が学んだり感じたりしたことを未来の自分のために書き留めるところ

Vagrantを試してみた

はじめに

開発環境構築に便利とよく耳にするVagrantを使ってみました。 
その導入・設定メモです。

最後に書いていますが、今回やった範囲ではVagrantの良い点はあまり体験できませんでした。
確かな目的と、構築の自動化に関する少しだけの予備知識が必要そうです。
ひとまず今回は、Vagrantの使用を体験してみたメモとなっています。

環境

導入済みのやつ

VirtualBox:5.1.14
ホストOS:Mac OS X 10.12.2

導入するやつ

Vagrant:1.9.1
ゲストOS:CentOS 7.3

Vagrantって何

よくわかってなかったので以下に整理。

  • VirtualBoxで作る仮想マシンを便利に操作できる
    • コマンドで立ち上げたり
    • マシンスペックをファイルに定義しておいて、作ったり消したりできる
    • 複数人での開発時に、統一した環境をばらまくのに便利
    • 当初はVirtualBox専用だったらしいけど今はVMWareとかもいけるらしい
  • 用語がわかりづらかった
    • BOX:仮想マシンのイメージファイル
      • ISOファイルとは違うけどそんな感じ
      • CentOS7のBOX、みたいな感じで存在する
      • BOXファイルを配布しているサイトがある
        • vagrantbox.es
        • sourceforgeなど
        • 安全性は保証されないので注意
        • veeweeというツールを使って自作もできる
      • BOXを手元のVagrantのインストールすることで、そのイメージをテンプレートとして使えるようになる
    • Vagrantfile:仮想マシンの設定を記述したファイル

大まかな流れ

つまり、Vagrantを利用した仮想環境の構築は、大きく分けると以下の手順になる。

  • BOXファイルを作成するor配布されているBOXファイルを探す
  • BOXファイルを自端末のVagrantにインストールする
    • 一度インストールすると、テンプレートとして再利用可能
  • インストールしたBOXを元に初期化(=Vagrantfileの生成)
  • (必要に応じてVagrantfileやchefの設定をする)
  • Vagrantを実行し、仮想マシンを起動する

以下では、Vagrantをインストールした後、上記の流れに沿って仮想マシンを立ち上げてみる。

インストー

Homebrewでインストールできる。

$ brew install Caskroom/cask/vagrant

バージョン確認する。

$ vagrant -v
Vagrant 1.9.1

できた。

Vagrantを使ってみる

BOXファイルをインストールする

まず作業フォルダを用意して移動する。

$ cd ~
$ mkdir Vagrant
$ cd Vagrant
$ mkdir centos-7.3
$ cd centos-7.3

さて、今回は、インターネット上で配布されているBOXファイルを利用することにする。
ただ、前述のvagrantbox.esのような場所で配布されているファイルは安全性を確保しようと思うと大変なので、今回はchef社のbentoプロジェクトで提供されているBOXを利用する。
bentoプロジェクトのページは以下。

ここから目的のBOXを探す。今回はCentOSの7.3が良さそう。

というわけで、以下のコマンドで、bentoプロジェクトのCentOS7.3のBOXをインストールする。

$ vagrant box add bento/centos-7.3

bentoプロジェクトのBOXの場合、bento/<OS名>でBOXを指定できる模様。
実行途中で以下のメッセージが表示される。

This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) parallels
2) virtualbox
3) vmware_desktop

今回はVirtualBox目当てだったので2を選択した。

完了後、BOXがインストールできていることを確認する。

$ vagrant box list
bento/centos-7.3 (virtualbox, 2.3.2)

初期化する

以下のコマンドを実行すると、カレントディレクトリにVagrantfileを生成され、仮想マシン起動の準備ができる。

$ vagrant init bento/centos-7.3

引数となるBOX名は、先ほどインストールしたもの(vagrant box listで確認したもの)を入力すればいい。

仮想マシンを起動してssh接続してみる

生成したvagrantfileの編集はひとまず置いておいて、作成したVagrantfileを使って仮想マシンを起動してみる。

Vagrantfileのあるディレクトリで以下のコマンドを実行すれば、仮想マシンを起動できる。

$ vagrant up

このコマンドを叩いても見た目には何も変化がないけど、カレントディレクトリのVagrantfileに基づいて仮想マシンのプロセスが立ち上がる模様。
同じディレクトリで以下のコマンドを叩くと、仮想マシンの状態を表示してくれる。

$ vagrant status

主要なvagrantコマンドは以下の記事を参照。

立ち上げた仮想マシンにログインするには以下のコマンド。

$ vagrant ssh

これで仮想マシンssh接続してくれる。ターミナルのホスト名等が変わってるはず。
あとはいつものssh接続の感じで操作できる。

[vagrant@localhost ~]$ hostname
localhost.localdomain
[vagrant@localhost ~]$ whoami
vagrant

ログアウトもいつも通り。

[vagrant@localhost ~]$ exit
ログアウト
Connection to 127.0.0.1 closed.

仮想マシンをシャットダウンするときは次のコマンド。

$ vagrant halt

Vagrantfileを編集する

Vagrantfileを試しに編集して、ホストOSからアクセスするためのホストオンリーアダプタを設定してみる。

編集はいつものようにviで。

$ vi Vagrantfile
(略)
  config.vm.network "private_network", ip: "192.168.56.3"
(略)

ずらーっとコメントアウトされているので、上記の箇所だけ修正する。

Vagrantfile編集後はVM再起動が必要なので、以下のコマンドで再起動。

$ vagrant reload

これでVagrantfileが読み込まれるので、vagrant sshで再びVMに接続する。それから、ifconfigを打ってみる。

$ vagrant ssh
Last login: ほにゃらら
[vagrant@localhost ~]$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a5f5:9221:e110:7074  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8f:ef:23  txqueuelen 1000  (Ethernet)
        RX packets 460  bytes 49029 (47.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 354  bytes 47420 (46.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 24  bytes 1992 (1.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24  bytes 1992 (1.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

…192.168.56.3のNICが無いですね。
色々調べた結果、アダプタ自体は用意されている(OSに認識されている)ものの、ネットワークサービスに認識されていないだけだった模様。 (この辺り、色々と事例があって、仮想NICMACアドレスがあべこべになる例もあるみたい)

というわけで、サービス再起動してあげる。

$ su -
(rootパスワードはvagrantの模様。たぶんvagrantの慣習)
$ systemctl restart network

これでifconfigを叩けば、192.168.56.3のNICも表示されるはず。
ホストOSからpingも通るはず。嬉しい。

おわりに

Vagrantを使ってBOXから仮想マシンを起動し、Vagrantfileを編集してホストオンリーアダプタを設定しました。

ただ、今回の手順ではVagrantの利点はほぼ活用出来ていないと思います。
Vagrantの一番の利点は複数人の開発環境の統一や展開の容易さだと思います。その点では、一人で自分用環境を構築するだけではあまり嬉しくなさそうです。もちろん「作って壊して」が簡単にはなりますが、単なるスナップショット的な使い方であればVirtualBoxだけでも充分そうですし。

また、環境構築の自動化という観点でも、今回の作業ではほとんどメリットがありません。今回のVagrantfile編集後に行ったサービス再起動や、その先の各種ソフトウェア導入設定まで自動化できてはじめてVagrantのメリットが生まれる気がしています。
そのためにはVagrantfileの書き方や、chefなどのプロビジョニングツールの使い方も身につける必要があると思います。

そんなわけで、Vagrant自体は、今すぐわたしに必要だったり使えたりするものではなさそうです。
とはいえ、今回こうして入り口部分に触れたことでVagrantがどういうものかわかりました。それに、chefを勉強したいという気持ちも強まりました。
いずれ役に立てたいなーという感想を持ちながら、今日のところはここまでです。

参考リンク