Vagrantで仮想環境構築入門

NO IMAGE

Vagrantとは

Vagrantとは、仮想環境(以下VM)の構築や共有を簡単に行うためのツールです。構成情報(Vagrantfile)をもとにVMを再現することができたりします。

つまり、一度 Vagrantfile で構成情報を作ってしまえば、必要な時にVMを再現できたり、ほかの人にファイル一つで環境設定を共有できるということです。

ほかにもVMの起動やシャットダウンなどの管理もコマンドから簡単に行えたりします。

あくまでVM管理・操作するためのツールで、仮想化するための機能はありません。つまり別途VirtualBoxのような仮想化を行うためのソフトが必要ということです。VirtualBoxが提供する仮想化された環境を Vagrant で管理・操作していくということになります。

さっそく導入手順を見ていきます。

Vagrantのインストール

https://www.vagrantup.com/downloads.html

まず何よりもVagrantをインストールする必要があります。上記URLよりホストOSにあったものをインストールしてください。インストールはデフォルト設定のままでよいです。

インストールができたら以下のコマンドを実行し、バージョンが表示できることを確認しておきます。

$ vagrant --version
Vagrant 1.9.8

VirtualBoxのインストール

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

上述の通り、Vagrant自体には仮想化機能はありません。したがって仮想化機能を持つソフトが必要になります。なのでVirtualBoxを利用します。上記URLよりインストールを行ってください。インストール設定はすべてデフォルトでよいです。

Vagrantの環境構築

検証環境

  • ホストOS: Windows 7, 10
  • ゲストOS: CentOS7
  • Vagrant 1.9.8
  • VirtualBox 5.1.30

Vagrant Box

Vagrant Boxとは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。手動で1からOSをインストールしていくのは大変なので、例えば CentOS の Box で CentOS環境を構築することができます。基本的には、OSのイメージファイルみたいな認識でよいと思います。

  1. https://app.vagrantup.com/boxes/search
  2. http://www.vagrantbox.es/

上記公式サイトでBoxファイルが検索できます。さまざまなOSのBoxファイルが提供されており、これを利用してベースとなる環境を構築します。ここでは一例として以下の CentOS7 の Boxファイルを利用してみます。

https://app.vagrantup.com/centos/boxes/7

まずは、Vagrant Box を追加します。追加には以下のコマンドを利用します。ボックス名もしくはBoxファイルのダウンロードURLを適宜入力して実行してください。1の検索サイトにはボックス名が、2の検索サイトにはURLがあるのでそれを入力すればよいです。

$ vagrant box add [Box名またはURL]
$ vagrant box add centos/7

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Providerの選択をする必要があるので、今回の場合だとVirtualBoxを利用しているので 3) を選択しておきます。実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかるかもしれませんが気にせず待ちます。

Vagrant Box 一覧確認

以下のコマンドでダウンロードした Vagrant Box を一覧で確認できます。先ほど追加した “centos/7” が確認できるはずです。

$ vagrant box list
centos/7          (virtualbox, 1708.01)

Vagrantfile の作成

Vagrantfile を作成します。適当な作業ディレクトリに移動し、Vagrantfile を作成します。ファイル作成はコマンド($ vagrant init [Box名])でも行えます。

$ vagrant init centos/7

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
    config.vm.box = "centos/7"
end

Vagrant から 仮想環境の起動

$ vagrant up --provider virtualbox

上記コマンドでVagrantを起動します。ProviderにはVirtualBoxを利用するので指定しています。実行が完了するとVirtualBox上にCentOS7が起動しています。

virtualboxマネージャー確認

ひとまず起動するところまでは確認できたので、一度以下のコマンドでシャットダウンしておきます。ここまでで導入完了です。

$ vagrant halt

Vagrant 操作コマンドいろいろ

コマンド 機能
vagrant up 仮想マシンを起動
vagrant ssh 仮想マシンにsshでログイン
vagrant ssh-config ssh設定情報の確認
vagrant halt 仮想マシンを停止
vagrant suspend 仮想マシンを一時停止
vagrant resume 仮想マシン一時停止からの復帰
vagrant status 仮想マシンの起動状態を確認
vagrant destroy 仮想マシンを破棄

上記コマンドはすべて作業ディレクトリで実行します。

vagrant up のコマンドではパラメータでProvideを指定できますが、最初の起動は指定しないとダメでしたが、2回目以降は指定なしで正しく動作しました。

SSHについて

起動したVMには ssh で接続します。vagrant ssh で接続できますが、opensshがインストールされていないと動かないようです。windows環境では以下のページからダウンロードできますので入れておきましょう。

PowerShell/Win32-OpenSSH

open ssh がインストールされていない場合のエラー

$ vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable.

以下のページが参考になります。

Vagrant の仮想マシンに SSH で接続する

ホストOSと仮想環境でデータを同期させる

ホストOSとゲストOS(VM)でファイルを同期させる機能があります。これがあれば検証用に作ったVMにファイルを移動する手間が省けますし、ファイルの編集等の作業はホストOS上で行って、VMにファイルを同期して確認等も可能になります。

Vagrantfile に同期設定

Vagrantfile にゲストOSとホストOSの同期させるパスを設定します。”config.vm.synced_folder” にホストOSの同期させるディレクトリパスとゲストOSの同期させるディレクトリパスをそれぞれ設定します。1つ目のパラメータホストOSパス、2つ目のパラメータがゲストOSパスです。

ホストOSのパスを相対パスで書くと、プロジェクトルート(Vagrantfileのある場所)からの相対パスになります。ゲストOSのパスは絶対パスで記述する必要があり、パスが存在しない場合は再帰的にディレクトリが作成されます。

Vagrant.configure("2") do |config|
    # その他設定は省略
    ...
    config.vm.synced_folder "src/", "/home/vagrant/src/"
end

Vagrantfile を上記のように編集したら、一度VMを再起動します。vagrant reload で再起動すると、同期されるようになります。

上記例だと、ホストOS上のプロジェクトルートにあるsrcフォルダ以下のデータを、ゲストOS上の”/home/vagrant/src/”以下に同期します。例えば、ファイルをホストOS上に作成すると、すぐにファイルがゲストOS上に同期されます。ファイルを編集しても内容が同期されていることが確認できます。

ゲストOS上からファイルを書き換えてもホストOS上に同期してくれる優れものです。

ファイル同期でエラーが発生する場合

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 home_vagrant_src_ /home/vagrant/src

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

Vagrantfileを書き換えてreloadした際にエラーが発生する場合は、以下のページを参考に対応すればよいと思います。VirtualBoxのバージョンとかが影響するみたいです。ちなみに上記のエラーが発生しましたが、”vagrant-vbgues”をインストールするだけでうまくいきました。

Vagrantで共有フォルダのマウントに失敗するときの対処方法

まとめ

Vagrant + VirtualBox で WindowsOS上に仮想環境を作る方法をまとめました。

参考URL

開発環境カテゴリの最新記事