マニュアル: Vagrant

投稿日: 更新日: 仮想環境 Infrastructure as Code(IaC)

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

例えば、

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

centos/7   (virtualbox, 1803.01)

次のように指定する。

プラグイン

使い方

有用なプラグイン

起動まで

vagrant init <Box名>
vi Vagrantfile
vagrant up

よく使うコマンド

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

パスワード

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

プロバイダ

Parallels

VirtualBox

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

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 <プール名>

複数マシンサポート

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]

公式サイト

外部サイト

逆引きマニュアル


ページトップへ戻る