Vagrantの使い方

Tag:

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

ここでは、Vagrantの使い方について紹介します。

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

インストール

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

vagrant

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

仮想マシンの作成

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

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

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

3. 「vagrant init」を実行しVagrantfileを作成

「vagrant init boxイメージ名」とコマンドを実行すると、指定のboxイメージ名が記述されたVagrantfileが作成されます。boxイメージは、「https://atlas.hashicorp.com/boxes/search」で検索することができます。
vagrant2

「centos」と検索してみます。
vagrant3
今回は「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イメージをダウンロードしてくれます。

vagrant4

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

4. 「vagrant up」を実行

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

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

vagrant7

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

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」配下のファイルを削除してもう一度実行してみてください。
作業ディレクトリのパスに日本語が含まれていると「Encoding::CompatibilityError」というエラーが出る場合があります。

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

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

仮想マシンにログイン

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

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

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

SSHコマンドでログイン

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

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

vagrant ssh-config

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

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

仮想環境の破棄

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

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」でインストールします。
vagrant_error1

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

共有フォルダの注意点

共有フォルダ上で生成されたファイルの所有者は、ゲストマシン上では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にする」といった対応でもかまいません。

スポンサーリンク