Vagrantでよく使うコマンド

Vagrantでよく使うコマンドを簡単にまとめています。

環境

最終更新日:2022/8/13

■以下の環境で試しています。
OS:macOS Big Sur(バージョン11.6)
Vagrant:2.2.7
VirtualBox:6.1.16

$ vagrant -v
Vagrant 2.2.7

$ VirtualBox -h
Oracle VM VirtualBox VM Selector v6.1.16

Vagrantでよく使うコマンド

Vagrantコマンドのヘルプ。コマンド一覧が見れる。

$ vagrant -h
$ vagrant --help

使用しているVagrantのバージョンと最新バージョンを表示します。

$ vagrant version
Installed Version: 2.2.7
Latest Version: 2.2.14
〜

まずは、URL先のBox(テンプレート)を取得します。http://hogehogeは仮のBoxが存在するurlで、hogeboxという名前で保存します (*Boxとは仮想マシンのひな形ファイルの事です。)

$ vagrant box add hogebox http://hogehoge

Boxの一覧を表示します。

$ vagrant box list

また、このディレクトリでもBoxの一覧を確認できます。

$ ls -lht ~/.vagrant.d/boxes

次に、Boxから仮想マシンを作成してみます。vagrant initの後にBoxを指定します。
このコマンド例のcentos-7.1は私の環境にあるBoxですので、実際に初期化したいBoxに置き換えてください。

$ vagrant init centos-7.1
コマンドを実行するとVagrantfileファイルが出力されるはずです。あと、存在しない適当な名前のBoxを指定してもエラーは出ずにVagrantfileファイルが出力されますが、vagrant upで仮想マシンを起動するタイミングでエラーが出ます。

仮想マシンの状態を表示します。runningは起動中、poweroffは停止中、savedはサスペンド状態、not createdは未作成です。

$ vagrant status
Current machine states:

default                   running (virtualbox)

仮想マシンを起動します。

$ vagrant up

仮想マシンを停止(シャットダウン)します。

$ vagrant halt

仮想マシンを再起動します。

$ vagrant reload

起動中の仮想マシンをサスペンド(一時停止・スリープ)状態にします。

$ vagrant suspend

サスペンド状態から復帰します。

$ vagrant resume

仮想マシンを削除します(これを実行すると実際に仮想マシンが削除されます。Vagrantfileだけは残る

$ vagrant destroy

仮想マシンを起動した状態で、仮想マシンにSSH接続します。

$ vagrant ssh
仮想マシンへのSSH接続設定の情報をssh-configで表示してみます。
$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/hogeUser/testVagrant/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
ssh-configは仮想マシンが起動状態じゃないと出力しません。停止状態だとエラーメッセージが出力されます。
$ vagrant ssh-config
The provider for this Vagrant-managed machine is reporting that it
is not yet ready for SSH. Depending on your provider this can carry
different meanings. Make sure your machine is created and running and
try again. Additionally, check the output of `vagrant status` to verify
that the machine is in the state that you expect. If you continue to
get this error message, please view the documentation for the provider
you're using.

あと、ssh-configで出力したSSH接続設定情報をSSHのconfigファイル(MacOSやLinuxなら~/.ssh/config)に追記する事で、sshコマンドで仮想マシンにSSH接続できるようになります。そして、その時の接続スピードが"vagrant ssh"の時よりちょっと速いです。
"vagrant ssh-config"の出力結果のホスト名(defaultの部分)だけを適当な名前に変更して、そのコードを"~/.ssh/config"に追記します。

Host vagVM
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/hogeUser/testVagrant/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes 
  LogLevel FATAL
これでsshコマンドでSSH接続できます(やっぱり接続時はちょっと速い)。
$ ssh vagVM
また、もしもLogLevelや他のSSH接続時の設定を色々と変更したい場合、~/.ssh/configに追記した設定コードを変更すればいい訳です。

次に、vagrant boxコマンドはサブコマンドが必要です。サブコマンドを指定しないと使えるサブコマンドの一覧を表示します。

$ vagrant box
Usage: vagrant box <subcommand> [<args>]

Available subcommands:
     add
     list
     outdated
     prune
     remove
     repackage
     update

Boxを削除します。hogeboxは削除するBox名です(これを実行すると実際にBoxが削除されます。vagrant box listでBoxが表示されなくなります)

$ vagrant box remove hogebox

次に、vagrantのプラグイン(plugin)についてです。
vagrantのpluginは、vagrant pluginコマンドで操作します。
vagrant pluginコマンドはサブコマンドが必要です。サブコマンドを指定しないと使えるサブコマンドの一覧を表示してくれます。

$ vagrant plugin
Usage: vagrant plugin <command> [<args>]

Available subcommands:
     expunge
     install
     license
     list
     repair
     uninstall
     update

pluginをインストールする。下のコマンドはsaharaプラグインをインストールします。

$ vagrant plugin install sahara

pluginが追加されたかは、pluginの一覧表示で確認できます。

$ vagrant plugin list

インストールしたpluginをアンインストールします。saharaプラグインをアンインストールしてみます。

$ vagrant plugin uninstall sahara

次に、Vagrantで作成したホストPC上の仮想マシン一覧を表示します。

$ vagrant global-status
id       name       provider   state    directory
--------------------------------------------------------------------------------------
0b421ab  web        virtualbox poweroff /Users/hogeuseer/testweb
c5be2f7  web2       virtualbox poweroff /Users/hogeuseer/testweb2
30c0013  ubuntu1404 virtualbox poweroff /Users/hogeuseer/testubu1404
ead678a  default    virtualbox poweroff /Users/hogeuseer/MyVagrant/CentOSVM              
8b4b2d7  default    virtualbox poweroff /Users/hogeuseer/MyVagrant/CentOSVM2                
8585108  default    virtualbox running  /Users/hogeuseer/MyVagrant/CentOS7           
96c23c1  default    virtualbox poweroff /Users/hogeuseer/MyVagrant/tmp                     
6046bf3  default    virtualbox poweroff /Users/hogeuseer/MyVagrant                         
 
The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date (use "vagrant global-status --prune" to prune invalid
entries). To interact with any of the machines, you can go to that
directory and run Vagrant, or you can use the ID directly with
Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"
仮想マシンのidや状態(起動中、停止中)や仮想マシンがディレクトリのどこに存在するかなどの情報が表示されます。

また、idを指定して仮想マシンを削除する事ができます。

$ vagrant destroy 96c23c1
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...

仮想マシンのバックアップを取得する2つの方法。vagrant packageコマンドとsaharaプラグイン

Vagrantでは、仮想マシン自体のバックアップを簡単に取る事ができます。仮想マシンのバックアップを取っておけば、仮想マシン上で何か試して失敗してもバックアップがあるので安心です。それに、仮想マシンのバックアップから、新たに仮想マシンを何個でも複製する事ができます。仮想マシンのバックアップ時には、vagrant packageコマンドを使います。

仮想マシンのバックアップ取得と複製方法については別ページで説明していますので、そちらを参考にしてください。
Vagrantで仮想マシンのバックアップ(Box)を取得し、そのBoxから新規に仮想マシンを作る

またvagrant packageコマンドとは別の方法で、Vagrantにはsaharaというプラグインがあります。saharaを使えば 仮想マシンをサンドボックス化できます。サンドボックス化すれば、仮想マシン上で何か作業をしていて環境が壊れてしまった時に、元の状態に戻す事(ロールバック)が可能です。ですのでsaharaによるサンドボックス化でも、仮想マシン上で気軽に何かを試す事ができるようになります。

saharaのインストールと使い方については別ページで説明していますので、そちらを参考にしてください。
Vagrantでsaharaで仮想マシンをサンドボックス化(sandbox)し、作業前に戻せるようにする

1つのVagrantfileで複数台の仮想マシンを作る

Vagrantでは、1つのVagrantfileファイルで複数台の仮想マシンを作成し、コントロールする事が可能です。
これによって、自分のPC上に仮想的なネットワークを構築し、そこに複数のWebサーバ、APIサーバ、DBサーバなどの仮想マシンを作ることができます。 ですので、サーバだけでなくネットワークなどのインフラの学習環境やテスト環境を構築できます。

AWSなどの便利なクラウドサービスもありますが、個人で有料のクラウドサービス上に仮想マシンを何個も起動するのはそれなりにお金もかかりますから、このVagrantの機能をうまく活用するのも1つの手かと思います。

1つのVagrantfileファイルで複数台の仮想マシンを作成する方法については別ページで説明していますので、そちらを参考にしてください。
1つのVagrantfileで複数台の仮想マシンを作り、仮想的なネットワークを構築する