Vagrant

最終更新日時:2019-04-12 15:26:11
その他のめも

概要

Vagrant は VirtualBox 等の仮想化ソフトの使用を簡略化してくれるアプリケーションです。
通常、仮想化ソフトで仮想環境を構築する際には、仮想イメージを探してダウンロードし、それを使用して仮想環境を構築します。
その後、ネットワーク設定等各種設定を行うわけですが、これがなかなか面倒だったりします。
Vagrant を使用するとこの辺の煩雑な操作をとても簡略化でき、仮想環境が超簡単に作れると言っても過言ではありません。

注意点としては、Vagrant 自体には仮想化機能は備わっていませんので、あくまでも仮想化ソフトの支援ツールという位置づけになります。

なお、仮想化ソフトは一般的に、Inte VT や AMD-V といった CPU が持つ仮想化機能を使用しますので、これらを予め有効化しておく必要があります。
有効であるかどうかは、Windows であれば、タスクマネージャーのパフォーマンス - CPU で確認可能です。
有効である場合には、上記画面の下の方に出てくる「仮想化:」の項目に「有効」と表示されます。
有効でなかった場合には、PC の BIOS の設定で有効化する必要があります。
Intel 系であれば、

 Intel(R) VirtualizationTechnology 

AMD 系であれば、

 SVM

に相当する項目を enable にします。

以降、Windows 上で仮想化ソフトは VirtualBox を使用する想定の内容になります。

インストール

Vagrant と VirtualBox をダウンロードします。

Vagrant
https://www.vagrantup.com/downloads.html
VirtualBox
https://www.virtualbox.org/wiki/Downloads

普通にインストールできるので手順は省略。
インストールして再起動後、念のためコマンドプロンプトで vagrant に path が通っているか確認します。

 > vagrant -v
 Vagrant 2.1.4


仮想環境構築

Vagrant+VirtualBox を使用して仮想環境を構築するには、まずは構築したい仮想環境のイメージファイルを探します。
このイメージファイルを通常 "Box" と呼びます。
Box は下記で探すことができます。
https://app.vagrantup.com/boxes/search
仮想化ソフトは VirtualBox を使用するので、"Provider" で VirtualBox を選択します。

使用する Box が決まったら、PC 上に仮想環境用のフォルダを作成します。
例えば、C:\Work\Vagrant\Test01 とします。
PowerShell 等で作成したフォルダに移動し、vagrant init を実行します。
仮に、使用する Box は centos/7 とします。

 > cd C:\Work\Vagrant\Test01
 > vagrant init centos/7
 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.

上記のように表示されるので、C:\Work\Vagrant\Test01 上に作成された Vagrant ファイルをテキストエディタで編集します。
Vagrant ファイルでは様々な設定ができますが、最重要は以下の設定です。

 config.vm.network "private_network", ip: "192.168.33.10"

もともとコメントになっているはずなので、コメントを外します。
Vagrant ファイルを保存したら以下のコマンドで vagrant を実行します。

 > vagrant up

初回の実行では Box ファイルをダウンロードするので少し時間がかかります。終わるまで待ちましょう。
構築が完了したら、以下のように仮想環境にログインしてみます。

 > vagrant ssh

root 権限は、sudo で実行できるようになっています。

仮想マシンを停止したい場合には、仮想環境用のフォルダに移動後、下記を実行します。

 > vagrant halt


その他 vagrant コマンドはいろいろと機能がありますので、vagrant -h を実行して一通り見ておくことをおすすめします。

Boxについて

前述の通り、Vagrant では init 時に Box 名を指定します。
すると、Vagrant は指定した Box 名をひな形として、仮想イメージを作成します。
Box は最初に Vagrant によりダウンロードされますが、ダウンロード後は再度同じ Box が指定された際には既にダウンロードされた Box を使用します。
つまり、Box は仮想イメージとは別に管理されています。
以下のように、vagrant box list を実行すると、現在 Vagrant で管理されている Box の一覧が見れます。

 > vagrant box list
 centos/6                (virtualbox, 1902.01)
 centos/7                (virtualbox, 1804.02)
 mvbcoding/awslinux      (virtualbox, 2017.03.0.20170401)
 stakahashi/amazonlinux2 (virtualbox, 2017.12.0.20180222)


ホスト/ゲストの同期

PC(ホスト)上のファイルと仮想マシン(ゲスト)上のファイルの同期を取りたいということはよくあります。
この部分は厳密には Vagrant ではなく仮想化ソフトの機能の領域になります。
VirtualBox の場合には、"Guest Additions" というものがあり、この機能で同期ができるようになっています。

ただし、ここで1つ問題があります。
Guest Additions は Box 作成時にインストールされるもののようなのですが、例えばその後 VirtualBox をアップデートしたりして、Guest Additions と VirtualBox のバージョンに差異が出た場合には動作しなくなることがあります。
この場合には、改めて各 Box ごとに Guest Additions を最新バージョンにアップデートする必要があります。
下記のように、vagrant-vbguest という Vagrant のプラグインをインストールすることにより、この面倒な作業を自動化してくれます。

 > vagrant plugin install vagrant-vbguest


Vagrant のプラグインは、vagrant-vbguest だけでなくいろいろとありますので、興味があれば探してみるのも良いと思います。

Vagrantの起動/停止

前述の通り、Vagrant の起動/停止は vagrant up/vagrant halt ですが、いちいち対象のフォルダに移動してコマンドを打たないといけないので少々面倒です。
従って、大して便利になるわけでもないですが、私は下記のような bat ファイルを作成しておき、それをデスクトップ等に置いて実行しています。

起動

 cd /work/vagrant/test01
 vagrant up


停止

 cd /work/vagrant/test01
 vagrant halt


仮想マシンへのログイン

前述の通り、対象のフォルダに行って vagrant ssh すれば仮想マシンにはログイン可能です。
しかし、この方法は Windows コマンドが実行できるターミナル上でしか使えません。
例えば、Teraterm のようなターミナルソフトを使う場合には、それに即した指定が必要です。
ご参考までに、下記は Teraterm のマクロを使う際の設定になります。
同様の設定で他のターミナルソフトからも接続可能です。

 msg = '127.0.0.1'
 strconcat msg ':2222 /ssh /keyfile=C:\work\vagrant\test01\.vagrant\machines\default\virtualbox\private_key /auth=publickey /user='
 strconcat msg 'vagrant'
 connect msg

ssh のポート番号がデフォルトと異なる場合(設定を変えている、もしくは多重起動などで別ポートを使っている場合)は、"2222" の部分を該当ポートにします。
毎回起動するたびに違うポートになってしまうと不便なので、ポートは固定することをおすすめします。
ssh のポートの設定は、Vagrant ファイルで以下のように設定します。
例:2215 ポートにする設定

 config.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2215
お問い合わせは 掲示板 にて。