ツール

Vagrantの基本から仮想マシンの起動までを説明

更新日:

Vagrant(ベイグラント)は、ひとことで言えば仮想マシンの構築を自動化するツールです。 一度Vagrantで仮想マシンを構築できるようにしておけば、 何度でも同じ仮想マシンをすぐに作ることができます。

VagrantはHashicorp社よりMITライセンスで公開されいるので、無料で使うことができます。 動作する環境はLinux、MacOS、Windowsです。 Vagrant自体には仮想マシン環境は含まれないので、これは別途用意する必要があります。 Vagrantが利用できる仮想マシン環境としては、 VirtualBox、VMware、Hyper-Vなどの多くの環境に対応しています。

Vagrantは何が便利?

何度でも同じ仮想マシンを作れるのがなんの役に立つかというと、例えばテスト環境が必要で、 その仮想マシンをVagrantで構築できるようにしたとします。 テストではマシンに変更を加えていきます。 一通りテストが完了したら別のテストを実施するために、テスト前の元の環境が必要だとします。 このような時、加えた変更を一つずつ手動で戻して行くの大変です。 変更を戻すのではなく、同じ環境を再度一から作り直すのは大抵もっと大変です。

Vagrantなら変更した仮想マシンを破棄して、元の仮想マシンを何度でも簡単に再構築することができます。

その他、Vagrantの設定ファイルを他の人に渡して、同じ環境を共有することもです。 Vagrant のバージョン 1.8 からはスナップショット機能も追加され、さらに便利になりました。 スナップショット機能を使えば、仮想マシンのある時点の状態を保存/復元することができます。

Vagrant基礎知識

最初にVagrantを使うにあたって重要な用語や概念について説明しておきたいと思います。

プロバイダ
VirtualBox、VMware、Hyper-Vなどの仮想マシン環境のことをVagrantではプロバイダと呼ぶ。
boxファイル
Vagrantにおける仮想マシンのイメージファイル。 かつてはVirtual Boxのエクスポートファイルそのものだったようですが、 様々なプロバイダをサポートするようになり、プロバイダの情報なども含まれる。
Vagrantfile
仮想マシン環境のの設定ファイル。 Ruby言語で記述され、boxファイルや仮想マシンの設定などの設定を記述する。

Vagrantにおけるこれらの関係は以下の図のようになります。

boxファイルとVagrantfileと仮想マシンの関係

boxファイルはいくつかの公開サーバで公開されています。 一般にそれをダウンロードしてローカルマシンに追加して利用します。自分で作成することもできます。

Vagrantfileには、どのように仮想マシンを作成するかを定義します。 一つのVagrantfileに複数の仮想マシンを定義することもできます。

Vagrantの環境を作ってみよう!

Vagrantのインストール

それでは実際にVagrantの環境を作ってみましょう。 Vagrantは以下のサイトからダウンロードできます。 環境に適したものをダウンロードしてインストールしてください。

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

プロバイダのインストール

次にVagrantで利用する仮想マシン環境(VirtualBox、VMwareなど)をインストールします。 一般にプロバイダとしてVirtualBoxが使われることが多いと思います。 VirtualBoxは以下のサイトからダウンロードします。

https://www.virtualbox.org/wiki/Downloads

プロジェクトの作成

最初にプロジェクトを作成します。 プロジェクトといっても実体は単なるディレクトリで、ここにVagrantfileが置かれます。 ディレクトリの場所や名前は任意です。

今回はプロジェクトの配置場所としてホームディレクトリにworkspace_vagrantを作成し、 その中に個々ののプロジェクトのディレクトリを配置する構成とします。 ここではプロジェクトのディレクトリ名はtest_projectにします。 ディレクトリを作成するため、以下のコマンドを実行します。

$ mkdir -p ~/workspace_vagrant/test_project

boxファイルを探す

Vagrantで仮想マシンを作成するためにはboxファイルが必要です。 boxファイルはいくつかの公開サーバで提供されていますが、 ここではVagrant公式のサイトである 「HashiCorp's Vagrant Cloud」 のサイトからboxファイルを探します。

サイトにアクセスし、テキストボックスにキーワードを入力してboxファイルを探すことができます。 今回はCentOS7のboxファイルを探してみます。 テキストボックスにCentOSと入力して検索するとたくさんのboxファイルが見つかると思います。 「centos/7」がCentOS公式のboxファイルですのでこれを使います(下記の図を参照)。

CentOS7のBoxファイル

boxファイルはvagrantコマンドでローカルのVagran環境へ明示的に追加することもできますが、 仮想マシンの初回起動時にboxファイルがローカルになければ自動的ダウンロードされ追加されます。

今回は後者のやり方で実施しますので、 Vagrantfileに指定する「centos/7」という文字列だけメモっておきます。 なおこれは「ボックスのユーザ/ボックス名」という形式になっています。

プロジェクトを初期化する

プロジェクトを初期化します。 初期化するにはプロジェクトのルートディレクトリでvagrant initコマンドを実行します。 初期化するとVagrantfileがルートディレクトリに作成されます。 vagrant initの書式は次の通りです。

vagrant init [仮想マシン名 [boxファイルのURL]]
  • 「仮想マシン名」を指定するとVagrantfileの config.vm.box パラメータに仮想マシン名が設定された状態で作成されます。
  • 「boxファイルのURL」を指定すると config.vm.box_url パラメータに指定したURLが設定されます。

    config.vm.boxパラメータに「HashiCorp's Vagrant Cloud」で検索したboxを設定する場合、 config.vm.box_urlパラメータは必須ではありません。 config.vm.box_urlの設定がないと、 デフォルトでboxファイルは「HashiCorp's Vagrant Cloud」から検索されます。 他の場所にあるboxファイルを使う場合は、このパラメータを明示的に設定する必要があります。

それではルートディレクトリに移動し、 先ほどメモったCentOS7のboxファイル名を指定してvagrant initコマンドを実行します。

$ cd ~/workspace_vagrant/test_project
$ 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.

Vagrantfileの設定

vagrant initコマンドを実行すると、プロジェクトのルートディレクトリに 次のような内容のVagrantfileが作成されます(コメント行は割愛)。 vagrant initの引数に指定した「centos/7」が「config.vm.box」に設定されています。

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

Vagrantfileには仮想マシンの設定など様々な設定を記述します。書式はRuby言語で記述します。 Vagrantfileにコメントでいくつか設定例が記載されていますので、 追加の設定をする場合はそれを参考にすると良いでしょう。

仮想マシンを起動する

ここまでできたら、いよいよは仮想マシンの起動です。 仮想マシンを起動するには、vagrant upコマンドを使用します。

vagrant up [--provider プロバイダ名] [name|id]

今回、オプションを指定する必要はありません。 ほかに上記のオプションがあるくらいの理解で取りあえす大丈夫でしょう。

  • --providerにはプロバイダ名を指定します。 デフォルトは「virtualbox」なので、今回は指定する必要はありません。
  • nameやidには仮想マシンの名前やIDを指定します。

    仮想マシンが複数のある場合は、起動したい仮想マシンの名前やIDを指定します。 省略すると(複数の仮想マシンがある場合)全ての仮想マシンを起動します。 今回は1つの仮想マシン(ゲストOSはCentOS7)しかありませんので、 指定する必要はありません。

boxファイルがローカルにないときは、 最初にvagrant upが実行されたときに自動的にダウンロードされます。 それから仮想マシンが作成され、そして起動されます。 それでは実際に起動してみましょう。

$ vagrant up

仮想マシンへのログインとログアウト

仮想マシンの起動が完了したら、仮想マシンへのログインしてみましょう。 仮想マシンにログインするにはvagrant sshコマンドを使用します。 vagrant upのときに必要な設定も行われているので、コマンドを実行するだけでログインできます。

$ vagrant ssh

vagrant sshでログインするとvagrantユーザとしてログインします。 rootユーザへスイッチしたい場合は以下のコマンドを実行すればOKです。

$ sudo su -

ログアウトは通常のexitやlogoutコマンドで行います。

$ exit

仮想マシンを停止する

仮想マシンを停止する方法も覚えておきましょう。 仮想マシンを停止するには、ルートディレクトリで vagrant halt コマンドを実行します。

$ vagrant halt

環境構築のまとめ

ここまでで最低限のVagrantの使い方を説明しました。 Vagrantはほかにもいろいろなことができますので、 もっと学べばますます便利になるでしょう。 この後は、まだ紹介していない仮想マシンコマンドやboxファイルを管理するコマンドを説明します。

その他の仮想マシンの管理コマンド

仮想マシンの状態確認

仮想マシンの状態確認をするには、ルートディレクトリで vagrant statusコマンドを実行します。

vagrant status

仮想マシンの再起動

仮想マシンを再起動するには、 vagrant reloadコマンドを使用します。 ルートディレクトリで実行する場合は引数を指定する必要はありませんが、 ルートディレクトリ以外では名前かidを指定します。

vagrant reload [名前|id]

仮想マシンの削除

作成した仮想マシンの削除するには、 ルートディレクトリで vagrant destroy コマンドを実行します。 本当に削除するか確認を求められますので「y」で回答して削除します。

vagrant destroy

仮想マシンを削除してもVagrantfileなどはそのまま残りますので、 vagrant upコマンドを実行すると、再度、新たな仮想マシンが作成されます。

boxファイルの管理コマンド

今回は環境へのboxファイルの追加を明示的に行いませんでしたが、 boxファイルの追加、一覧表示、削除などを行う管理コマンドもあります。

なお、boxファイルは追加されると(ダウンロードされて)ローカルに保存されます。 保存される場所は~/.vagrant.d/boxesです。

boxファイルの追加

boxファイルを追加するには以下のコマンドを実行します。

vagrant box add USER/BOX

vagrant box addの後には、「HashiCorp's Vagrant Cloud」で検索したUSER/BOXの形式を指定します (例えばhashicorp/precise64やcentos/7など)。 他の場所からboxファイルをダウンロードするにはURLなども指定します。

boxファイルの一覧表示

追加されているboxファイルの一覧を表示するには次のように実行します。

vagrant box list

boxファイルの削除

Vagrantからboxファイルを削除するには次のように実行します。

vagrant box remove boxの名前
    

boxファイルのアップデート

boxファイルをアップデートするには次のように実行します。

vagrant box update

参考:Vagrant起動時のログの説明

参考情報として起動時のログの詳細を説明します。 ログを見ると起動時にVagrantが実際に何をしているかがわかるので、 理解を深めることに役立つでしょう。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
    default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1905.1) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
    default: Download redirected to host: cloud.centos.org
==> default: Successfully added box 'centos/7' (v1905.1) for 'virtualbox'!
==> default: Importing base box 'centos/7'...

'centos/7'というboxファイルがローカルで見つからないので、 ダウンロードしてboxに追加しています。 プロバイダはvirtualboxという出力も見られます。

==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' version '1905.1' is up to date...
==> default: Setting the name of the VM: test_project_default_1570323199848_99368
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat

これはネットワークの設定です。仮想マシンの「Adapter 1」がNATに設定されています。

==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...

フォワーディングポートとSSHの設定をしています。 これは、ホストOSの127.0.0.1のポート番号2222への通信を ゲストOSの22番ポート(SSHのポート)へ転送する設定しています。 そして、SSHの公開鍵認証の設定も行われています。 VagrantでゲストOSへ接続するときには、これらの設定が使われます。

==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Rsyncing folder: /Users/hoge/workspace_vagrant/test_project/ => /vagrant

仮想マシンの準備ができたようです。 最後のメッセージはホストOSの/Users/hoge/workspace_vagrant/test_project/ディレクトリと 仮想マシンの/vagrantディレクトリが同期したというメッセージも見られます。

デフォルトでプロジェクトのルートディレクトリにあるファイルは、 仮想マシンの/vagrantディレクトと同期されます。 ただし、通常はプラグインを入れないと単にホストOSの /Users/hoge/workspace_vagrant/test_project/ にあるファイルが、ゲストOSの/vagrantにコピーされるだけのようです。

-ツール
-

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.