Vagrantのインストール、基本的な使い方を解説します。共有フォルダを利用する中でハマりやすいトラブル対応なども取り上げます。
仮想化ソフトウェア:VirtualBoxを利用
Vagrantとは
Vagrantとは、VirtualBoxなどの仮想化ソフトウェア上で仮想マシンを簡単に立ち上げるためのRuby製ツールです。手軽に何度でも同じ構成で仮想マシンを立ち上げる事ができるため、開発環境で利用されます。
インストール
https://www.vagrantup.com/downloads.html にアクセスすると、各OSごとのVagrantをダウンロードできます。
ダウンロードしたファイルをクリックするとインストールが始まります。
仮想マシンの作成
仮想マシン用にディレクトリを作成
Vagrantでは仮想マシンごとにディレクトリを作成する必要があります。
Vagrantfileを作成
コマンドプロンプトを開き作成したディレクトリ内に移動します。
vagrant init boxイメージ名
とコマンドを実行すると、指定のboxイメージ名が記述された Vagrantfile
が作成されます。
boxイメージは、 https://atlas.hashicorp.com/boxes/search で検索することができます。
「centos」と検索してみます。
今回は 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イメージをダウンロードしてくれます。
ディレクトリ内に Vagrantfile
が作成されました。
仮想マシンの起動
vagrant up
コマンドを実行するとboxイメージがダウンロードされ、仮想マシンの作成と起動が実行されます。初回実行時は「boxイメージのダウンロード」と「プロビジョニング」が実行されるため時間がかかります。
エラー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
コマンドを実行して仮想マシンの起動状態を確認します。
仮想マシンの停止
vagrant halt
コマンドを実行すると、仮想マシンを停止させることができます。
仮想マシンにログイン
vagrant ssh
コマンドを実行すると仮想マシンにログインできます。
vagrant up
コマンドで仮想マシンを起動させ vagrant ssh
コマンドで仮想マシンにログインします。
SSHコマンドでログイン
vagrant ssh
ではなく、 sshコマンド
でログインしてみます。
まず、秘密鍵を生成します。下記コマンドで生成できます。
vagrant ssh-config
実行結果です。
IdentityFile
に秘密鍵のパスが表示されています。この秘密鍵をsshコマンドを実行する際に指定します。
ssh vagrant@127.0.0.1 -p 2222 -i 秘密鍵のパス
仮想環境の破棄
仮想マシンが必要なくなったら vagrant destroy
コマンドで仮想マシンを破棄できます。
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
でインストールします。
インストール後、仮想マシンを再起動するとエラーが解消されました。
上記実施後も解決できないときは、下記サイトが参考になるかと思います。
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にする といった対応でもかまいません。