Vagrant(インストール, ログイン, 共有フォルダ)

Vagrantのインストール、基本的な使い方を解説します。共有フォルダを利用する中でハマりやすいトラブル対応なども取り上げます。

作業環境
OS:Windows8.1
仮想化ソフトウェア:VirtualBoxを利用

Vagrantとは

Vagrantとは、VirtualBoxなどの仮想化ソフトウェア上で仮想マシンを簡単に立ち上げるためのRuby製ツールです。手軽に何度でも同じ構成で仮想マシンを立ち上げる事ができるため、開発環境で利用されます。

インストール

https://www.vagrantup.com/downloads.html にアクセスすると、各OSごとのVagrantをダウンロードできます。

480-tool-vagrant-basic-.png

ダウンロードしたファイルをクリックするとインストールが始まります。

仮想マシンの作成

仮想マシン用にディレクトリを作成

Vagrantでは仮想マシンごとにディレクトリを作成する必要があります。

Vagrantfileを作成

コマンドプロンプトを開き作成したディレクトリ内に移動します。

vagrant init boxイメージ名 とコマンドを実行すると、指定のboxイメージ名が記述された Vagrantfile が作成されます。

boxイメージは、 https://atlas.hashicorp.com/boxes/search で検索することができます。

480-tool-vagrant-basic-2.png

「centos」と検索してみます。

480-tool-vagrant-basic-3.png

今回は bento/centos-6.7 を利用してみます。 bento はプロビジョニングツールを提供しているChef社によってメンテナンスされているプロジェクトです。

下記のようにboxイメージを指定して実行します。

vagrant init bento/centos-6.7

Atlasのサイト(先ほどbento/centos-6.7を見つけたサイト)で公開されているboxイメージであれば上記のように vagrant init の後にboxイメージ名を指定するだけでOKです。 vagrant up を実行時に自動的にboxイメージをダウンロードしてくれます。

480-tool-vagrant-basic-4.png

ディレクトリ内に Vagrantfile が作成されました。

480-tool-vagrant-basic-5.png

仮想マシンの起動

vagrant up コマンドを実行するとboxイメージがダウンロードされ、仮想マシンの作成と起動が実行されます。初回実行時は「boxイメージのダウンロード」と「プロビジョニング」が実行されるため時間がかかります。

プロビジョニングの指定
プロビジョニングは、Vagrantfile内にて「config.vm.provision」メソッドを利用することで指定できます。
SSL関連のエラー
コマンドプロンプトで「vagrant up」コマンドを実行したところ、SSL関連のエラーでboxイメージのダウンロードに失敗しました。そこで、これ以降は「コマンドプロンプト」ではなく「Git Bash」を利用してます。
480-tool-vagrant-basic-7.png

エラー1

下記のようなエラーがでて実行できない場合があります。

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

HTTP server doesn't seem to support byte ranges.

この場合、C:\Users\ユーザ名\.vagrant.d\tmp 配下のファイルを削除してもう一度実行してみてください。

エラー2

作業ディレクトリのパスに日本語が含まれていると Encoding::CompatibilityError というエラーが出る場合があります。

起動状態確認

無事実行できたら vagrant status コマンドを実行して仮想マシンの起動状態を確認します。

480-tool-vagrant-basic-8.png

仮想マシンの停止

vagrant halt コマンドを実行すると、仮想マシンを停止させることができます。

480-tool-vagrant-basic-9.png

仮想マシンにログイン

vagrant ssh コマンドを実行すると仮想マシンにログインできます。

Windowsの場合
「vagrant ssh」は、コマンドプロンプトでは使えません。Windowsの場合、TeraTermやCygwin環境を利用します。ここでは、「Git Bash」を利用してログインしてみます。

vagrant up コマンドで仮想マシンを起動させ vagrant ssh コマンドで仮想マシンにログインします。

480-tool-vagrant-basic-10.png

SSHコマンドでログイン

vagrant ssh ではなく、 sshコマンド でログインしてみます。

まず、秘密鍵を生成します。下記コマンドで生成できます。

vagrant ssh-config

実行結果です。

480-tool-vagrant-basic-_sshconfig.png

IdentityFile に秘密鍵のパスが表示されています。この秘密鍵をsshコマンドを実行する際に指定します。

ssh vagrant@127.0.0.1 -p 2222 -i 秘密鍵のパス

仮想環境の破棄

仮想マシンが必要なくなったら vagrant destroy コマンドで仮想マシンを破棄できます。

480-tool-vagrant-basic-11.png

Vagrantfileの再読み込み

仮想マシンを再起動させることで、Vagrantfileを再読み込みさせることができます。仮想マシンの再起動は、以下のコマンドで実行できます。

vagrant reload

プロビジョニングも再度実行させたい場合、 --provision をつける必要があります。

vagrant reload --provision

Vagantのアップデート

次のようなメッセージが表示された場合、インストールしているVagrantをアップデートします。

This Vagrant environment has specified that it requires the Vagrant
version to satisfy the following version requirements:

  >= 1.8.4

You are running Vagrant 1.8.1, which does not satisfy
these requirements. Please change your Vagrant version or update
the Vagrantfile to allow this Vagrant version. However, be warned
that if the Vagrantfile has specified another version, it probably has
good reason to do so, and changing that may cause the environment to
not function properly.

https://www.vagrantup.com/downloads.html から最新のバージョンをダウンロードして実行することでアップデートできます。

共有フォルダ関連のエラー

ホストマシンとゲストマシンで共有フォルダの設定をした際、下記エラーがでました。

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 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

vagrant-vbguest というのをホストマシン上でインストールすると解決できるという情報があります。 vagrant plugin install vagrant-vbguest でインストールします。

480-tool-vagrant-basic-_error1.png 480-tool-vagrant-basic-_error2.png

インストール後、仮想マシンを再起動するとエラーが解消されました。

上記実施後も解決できないときは、下記サイトが参考になるかと思います。
https://qiita.com/wakaba260/items/b5c87b7815b710f303a0

共有フォルダの注意点

共有フォルダ上で生成されたファイルの所有者は、ゲストマシン上では vagrant になります。

ゲストマシンでnginxを利用しており、共有フォルダをWebサーバーのドキュメントルートにしている場合、 nginx の書き込み権限が必要な場合があります。しかし、所有者が vagrant なため書き込めません。

所有者を変更すればいいのですが、vagrantの共有フォルダ上のファイルはchown、chmodを利用して所有者、権限の変更ができません。

対応策として、Vagrantfileで所有者を変更できます。

config.vm.synced_folder "./", "/home/vagrant/Code",
    :owner => "nginx",
    :group => "nginx"

これでVagrantfileで指定していた共有フォルダ配下にできるファイルはnginxになります。

Vagrantfileは修正せずに、nginxやphp-fpmのuserをvagrantにする といった対応でもかまいません。