マニュアル: Vagrant

投稿日: 更新日:

プラグイン

よく使うプラグイン

  • vagrant-hosts: ゲストOSの/etc/hostsを書き換え
  • vagrant-hostsupdater: ホストOSの/etc/hostsを書き換え
    • ただし、DHCPのときは使えない模様。
  • vagrant-timezone: タイムゾーン設定

KVM(libvirt)を使う場合

yum install libvirt-devel
vagrant plugin install vagrant-libvirt

Parallelsを使った起動

vagrant plugin install vagrant-parallels

Box

基本操作

  • 追加: vagrant box add <Box名 or URL or パス>
    • 名前をつける時は vagrant box add --name <Box名> <Box名 or URL or パス>
  • リスト: vagrant box list
  • 削除: vagrant box remove <Box名>
  • 更新: vagrant box update --box <Box名>

作成

Vagrantが起動した状態で、Vagrantfileがあるディレクトリで vagrant packageコマンドを使う。

Package

vagrant package --output output.box

以下のように書かれているが、libvirtでも問題なし。

This packages a currently running VirtualBox or Hyper-V environment into a re-usable box.

再作成

インストールしたVagrant Boxから、.boxファイルを再作成するときは、 vagrant repackageコマンドを使う。 生成されたファイルは、package.box固定。

Box Repackage

vagrant repackage NAME PROVIDER VERSION

例えば、

  • NAME: Box名
  • PROVIDER: プロバイダ名
  • VERSION: バージョン

例えば、vagrant box listで出てくる以下のものを再パッケージしたい場合

centos/7   (virtualbox, 1803.01)

次のように指定する。

  • NAME: centos/7
  • PROVIDER: virtualbox
  • VERSION: 1803.01

プラグイン

使い方

  • リスト: vagrant plugin list
  • インストール
    • プラグイン名:
    • vagrant plugin install {{ plugin_name }}
  • 修復
    • まずvagrant plugin repair、次にvagrant plugin updateでだいたいは行けるはず。

有用なプラグイン

  • vagrant-timezone: タイムゾーンの設定
  • vagrant-mutate: Vagrant Boxを他のプロバイダ用に変換するもの
    • VirtualBoxで作ったものをlibvirt用に変換するときに使いました。
  • vagrant-hosts: ホスト名を設定するプラグイン
    • 他にも似たようなのがありますが、これがシンプルで良かったので使っています。

起動まで

vagrant init <Box名>
vi Vagrantfile
vagrant up

よく使うコマンド

コマンドのあとに-hオプションを付けると、使い方が出ます。

パスワード

デフォルトでは以下のユーザとパスワードが有効なようです1

  • vagrant:vagrant
  • root:vagrant

プロバイダ

Parallels

VirtualBox

環境にもよるかもしれないが、デフォルトの設定だと以下の理由で遅くなる。

  • コントローラがIDE
  • SSDを使う設定になっていない。

Oracle 12cを起動するまでの時間を測定したが、ものすごく差がついている。 (いずれも可変ストレージなのに注意)

設定 メモリ コントローラ SSDを使う設定 Oracle 12c起動までの時間
デフォルト 2GB IDE オフ 4分30秒
SSD 2GB IDE オン 3分53秒
SATA 2GB SATA オフ 1分27秒
SATA + SSD 2GB SATA オン 48秒
SATA + SSD 3GB SATA オン 39秒
SATA + SSD 4GB SATA オン 29秒
SATA + SSD 5GB SATA オン 29秒

Vagrantfileから変更する方法はまだできていません。 以下の記事が参考になるかも。

virtualbox - Change default disk controller in Vagrant - Stack Overflow

libvirt

ネットワーク

デフォルトでは 192.168.121.0/24 が使われる2

Boxを削除した場合

以下の警告が出る。

Vagrant-libvirt plugin removed box only from you LOCAL ~/.vagrant/boxes directory From libvirt storage pool you have to delete image manually(virsh, virt-manager or by any other tool)

以下のように対処する。

  1. virsh pool-list
  2. virsh vol-list <プール名>
    • 特になければプール名はdefaultのはず。。。
  3. virsh vol-delete <ボリューム名> --pool <プール名>

フォルダの同期

Synced Folders - Vagrant by HashiCorp

  • NFS: 高速なのがメリット。rootで動かす必要がある(sudoの設定が記載されている)
  • rsync: vagrant up or vagrant reload時のみ。rsyncコマンドが使えれば、特別な設定は不要。
  • SMB: (未確認)ホストがWindows / macOSのみ。
  • VirtualBox: VirtualBoxの機能を使って同期

その他プラグインは以下の場所で探せます。

Shared Folders

vagrant-sshfsが良さそう

プラグインの中では、vagrant-sshfsが良さそうな感じです。

  • sshなのでホストOS、ゲストOSの条件がゆるい
    • CentOSの場合、openssh-server / openssh-clientsパッケージがあればOK
    • ゲストOSにはCentOSの場合fuse-sshfsというRPMが入るようです。
  • パフォーマンスはNFSに比べると劣る
  • デフォルトではホスト→ゲストの同期に時間がかかる
    • 未確認ですが、キャッシュをオフにすればいいみたいです。
    • ゲスト→ホストの同期は問題なさそうです。

インストールは以下の通り(他と同じ)

vagrant plugin install vagrant-sshfs

複数マシンサポート

Multi-Machine - Vagrant by HashiCorp

プロバイダ固有設定をマシンごとに書くには、ネストすればよいが、うまく動かなかったのと、 見通しが悪くなったため、止めた方がいいかも。

…と思ったが、単に分かってなかったかもしれない。 以下のweb.vm.providerconfig.vm.providerと書いてしまって失敗した模様。

Vagrant.configure("2") do |config|
  config.vm.define "web" do |web|
    web.vm.provider :virtualbox do |v|
      v.name = "..."
    end
  end

  config.vm.define "db" do |db|
    db.vm.provider :virtualbox do |v|
      v.name = "..."
    end
  end
end

virtualbox - Multi VM in one Vagrantfile. Could I set different memory size for each of them? - Stack Overflow

Docker

Dockerfileと同じディレクトリにVagrantfileを置いて、以下のようにします。

  • コンテナ名:
Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.name = "{{ container_name }}"
    d.build_dir = "."
    d.ports = ["80:80"] # 80番ポートを接続する場合。-pオプションの内容と同じ
  end
end

Ansible

基本的な書き方は以下になる。

Vagrant.configure("2") do |config|

  #
  # Run Ansible from the Vagrant Host
  #
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

end

インベントリファイルの場所

Vagrantfileからの相対パスで、 .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory にある。

インベントリファイルに変数を追加する方法

Vagrantfileに以下のように追加する3

ansible.host_vars => {
  "default" => {
    {"http_port" => 80}
  }
}

  1. Creating a Base Box - Vagrant by HashiCorp [return]
  2. Management Networkmanagement_network_address [return]
  3. "default"は特に指定しない時のホスト名っぽいです。 [return]

公式サイト

外部サイト

逆引きマニュアル