Young Leaves

Vagrant の基本コマンドについて

今回はHashi Corp が提供しているVagrant の基本的なコマンドについて説明します。本記事は2020年9月30日の記事であり、仕様などについて変更されている可能性があるためご注意ください。

Vagrant とは

Vagrant by HashiCorp

Vagrant は、HashiCorp が提供する仮想マシン構築時の設定をコマンドライン等で簡単に行えるツールです。主にローカルの開発環境、検証環境等の作成に使用されます。Vagrant ではBox というOS のイメージと設定ファイル等を使用し仮想マシンを構築します。仮想マシンの構築自体はVirtualBox 等のソフトウェアが行うため、Vagrant はVirtualBox 等のソフトウェアとセットで使用します。

仮想マシンにOS を導入、ソフトウェアの導入等を手動で行うと非常に手間がかかります。Vagrant で事前にBox や設定ファイル等を準備しておくことで、簡単にサーバ等の環境を構築することができます。また、Boxや設定ファイルを複数の人と共有することで、メンバーの開発 (検証)環境の統一や環境構築の時間短縮にも繋がります。

最近はDocker あたりがよく使われますが、ちょっとした開発環境や検証環境をローカルに構築するのであればVagrant も手軽に使用できるためおすすめです。

Vagrantfile の作成

Vagrant を使用して仮想マシンを構築するには、初めにVagrantfileという設定ファイルを作成する必要があります。Vagrantfile の作成は「vagrant init」コマンドを使用します。

# Vagrantfileを作成
vagrant init [Option] [Box名 or URL]

「vagrant init」のみでVagrantfileを作成可能ですが、使用するBoxやダウンロードするURLを事前に指定したい場合はBox名(URL)を指定します。

「vagrant init」コマンドで主に使用するオプションは以下のとおりです。

--box-version VERSION

Boxのバージョンを指定する

-f, --force

Vagrantfileが既に存在する場合、上書きする

-m, --minimal

最小のVagrantfileを作成する

「vagrant init」の使用例は以下のとおりです。

# Vagrantfileを作成する
vagrant init

# bento/ubuntu-20.04というBoxを指定する
vagrant init bento/ubuntu-20.04

# 既存のVagrantfileを上書きして新規にVagrantfileを作成する
vagrant init -f

Box 操作

VagrantのBox の追加、一覧の表示、削除を行うには、「vagrant box」コマンドを使用します。

# Boxの追加、一覧表示、削除を行う
vagrant box [Subcommand] [Args]

「vagrant box」で主に使用するサブコマンドは以下のとおりです。

add

ローカルにBoxを追加する

list

ローカルにあるBoxの一覧を表示する

remove

ローカルにあるBoxを削除する

update

ローカルにあるBoxのバージョンをアップデートする

「vagrant box」の使用例は以下のとおりです。

# bento/ubuntu-20.04というBoxをローカルに追加する
vagrant box add bento/ubuntu-20.04

# 現在のBoxの一覧を表示する
vagrant box list

# bento/ubuntu-20.04というBoxをローカルから削除する
vagrant box remove bento/ubuntu-20.04

# ローカルにあるBoxのバージョンをアップデートする
vagrant box update

Vagrantの構築済みのBoxは、以下のページから検索できます。

Discover Vagrant boxes

仮想マシンの構築・起動

Vagrant で仮想マシンの構築・起動を行うには「vagrant up」コマンドを使用します。

# 仮想マシンの構築・起動を行う
vagrant up [options] [name|id]

Vagrantfileで複数の仮想マシンを指定している場合、引数を付けずに「vagrant up」を実行すると、複数の仮想マシンの構築・起動ができます。「vagrant up」の使用例は以下のとおりです。

# 全ての仮想マシンを構築(起動)する
vagrant up

# webという名前の仮想マシンを起動する
vagrant up web

仮想マシンの接続

Vagrant で起動している仮想マシンへ接続するには「vagrant ssh」コマンドを使用します。

# 仮想マシンに接続する
vagrant ssh [options] [name|id] [-- extra ssh args]

複数の仮想マシンを起動している場合、仮想マシン名を指定することで特定の仮想マシンに接続できます。「vagrant up」の使用例は以下のとおりです。

# 仮想マシンに接続する(起動しているマシンが1つの場合)
vagrant ssh

# dbという名前の仮想マシンに接続する
vagrant ssh db

仮想マシンのシャットダウン・削除

仮想マシンのシャットダウン・削除をするには、「vagrant halt」と「vagrant destroy」コマンドを使用します。

# 仮想マシンをシャットダウン・削除する
vagrant halt [options] [name|id]
vagrant destroy [options] [name|id]

「vagrant halt」は仮想マシンのシャットダウンのみ行います。次回起動時に「vagrant up」を実行すると、現在の仮想マシンの状態から起動できます。「vagrant destroy」は仮想マシンのシャットダウンおよび削除を行います。削除後に「vagrant up」を実行すると、Vagrantfileから新しく仮想マシンを作成します。「vagrant halt」「vagrant destroy」で主に使用するサブコマンドは以下のとおりです。

-f, --force

強制的にシャットダウン(削除)を行う

「vagrant halt」「vagrant destroy」使用例は以下のとおりです。

# 起動している仮想マシンを全てシャットダウンする
vagrant halt

# webという仮想マシンをシャットダウンする
vagrant halt web

# 全ての仮想マシンを確認なしでシャットダウン・削除する
vagrant destroy --force

仮想マシンの状態確認

Vagrantで起動しているマシンの状態を確認するには、「vagrant status」コマンドを使用します。複数の仮想マシンを起動している場合、仮想マシン名を指定することで特定の仮想マシンの状態を確認できます。

# 仮想マシンの状態を確認する
vagrant status [name|id]

「vagrant status」の使用例は以下のとおりです。

# 起動している全ての仮想マシンの状態を確認する
vagrant status

# webという名前の仮想マシンの状態を確認する
vagrant status web

設定の再読み込み

Vagrantfileの更新後、起動しているマシンの設定を更新するには、「vagrant reload」コマンドを使用します。

# Vagrantfileの設定を再読み込みする
vagrant reload [vm-name]

「vagrant reload」の使用例は以下のとおりです。

# 起動している全ての仮想マシンの設定を再読み込みする
vagrant reload

# dbという名前の仮想マシンの設定を再読み込みする
vagrant reload db

プラグインの操作

Vagrantにプラグインを追加、一覧の表示、削除等を行うには、「vagrant plugin」コマンドを使用します。

# プラグインを追加する
vagrant plugin [command] [args]

「vagrant plugin」で主に使用するサブコマンドは以下のとおりです。

install

プラグインをインストールする

list

インストールされているプラグインの一覧を表示する

uninstall

プラグインをアンインストールする

update

プラグインのアップデートをする

「vagrant plugin」の使用例は以下のとおりです。

# Saharaプラグインをインストールする
vagrant plugin install sahara

# インストールされているプラグインを表示する
vagrant plugin list

# Saharaプラグインをアンインストールする
vagrant plugin uninstall sahara

# プラグインをアップデートする
vagrant plugin update

パッケージの操作

Vagrantで仮想マシンからBoxの作成を行うには、「vagrant package」コマンドを使用します。

# 仮想マシンからBoxを作成する
vagrant package [options] [name|id]

「vagrant package」コマンドで主に使用するオプションは以下のとおりです。

--base

指定したVirtualBoxの仮想マシンをBoxに出力する

--output

Boxのファイル名を指定する

--vagrantfile

BoxにVagrantfileを追加する

「vagrant package」の使用例は以下のとおりです。

# Boxを作成する
vagrant package


# VirtualBoxのマシン名がCentOSの仮想マシンからBoxを作成する
vagrant package --base CentOS

# Boxのファイル名を「test.box」に指定しBoxを作成する
vagrant package --output test.box

# Vagrantfileを含めてBoxを作成する
vagrant package --vagrantfile Vagrantfile

スナップショットの操作

Vagrantの仮想マシンからスナップショットを取得するには、「vagrant snapshot」コマンドを使用します。

# スナップショットを取得する
vagrant snapshot [subcommand] [args]

「vagrant snapshot」で主に使用するサブコマンドは以下のとおりです。

save

仮想マシンからスナップショットを取得する

restore

スナップショットから仮想マシンを復元する

push

仮想マシンからスナップショットを取得する

pop

スナップショットから仮想マシンを復元する。復元後、スナップショットは削除される。

list

スナップショットの一覧を表示する

delete

スナップショットを削除する

Vagrantのスナップショットは「save/restore」と「push/pop」の2種類の方法があります。スナップショットで復元を行う場合、上記の組み合わせのいずれかで行います。「save/restore」の場合、restoreでマシンを復元してもスナップショットは残りますが、「push/pop」の場合、popでマシンを復元後にスナップショットが削除されます。「vagrant snapshot」の使用例は以下のとおりです。

# スナップショットを取得する(save/restore)
vagrant snapshot save

# スナップショットから仮想マシンを復元する(save/restore)
vagrant snapshot restore

# スナップショットを取得する(push/pop)
vagrant snapshot push

# スナップショットから仮想マシンを復元する(push/pop)
vagrant snapshot pop

# スナップショットの一覧を表示する
vagrant snapshot list

# スナップショット・push_1601392679_5236を削除する
vagrant snapshot delete push_1601392679_5236

ヘルプの表示

各種vagrantコマンドの後ろに「help」または「-h」をつけると、コマンドに関するヘルプが表示されます。helpコマンドの使用例は以下のとおりです。

# vagrant initコマンドのヘルプを表示する
vagrant box help

# vagrant plugin installコマンドのヘルプを表示する
vagrant plugin install -h