プラグイン
よく使うプラグイン
- 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コマンドを使う。
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固定。
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 プラグイン名
- 修復
- まず
vagrant plugin repair、次にvagrant plugin updateでだいたいは行けるはず。
- まず
有用なプラグイン
- vagrant-timezone: タイムゾーンの設定
- vagrant-mutate: Vagrant Boxを他のプロバイダ用に変換するもの
- VirtualBoxで作ったものをlibvirt用に変換するときに使いました。
- vagrant-hosts: ホスト名を設定するプラグイン
- 他にも似たようなのがありますが、これがシンプルで良かったので使っています。
起動まで
vagrant init <Box名>
vi Vagrantfile
vagrant up
よく使うコマンド
コマンドのあとに-hオプションを付けると、使い方が出ます。
vagrant up: 起動vagrant halt: シャットダウンvagrant destroy: 削除(注意!)vagrant snapshot save スナップショット名: スナップショットの作成- ただし、libvirtでは使えない -> Support vagrant 1.8 snapshots · Issue #529 · vagrant-libvirt/vagrant-libvirt
パスワード
デフォルトでは以下のユーザとパスワードが有効なようです1。
- vagrant:vagrant
- root:vagrant
プロバイダ
Parallels
- インストール:
vagrant plugin install vagrant-parallels - ドキュメント: Vagrant Parallels Provider Documentation
- Box: https://app.vagrantup.com/boxes/search?provider=parallels
- VirtualBoxからの移行手順
- CentOS 7.4
- BentoはChef開発で、Packerを使っています。
- IPアドレスはParallels標準のものを使う。
- 独自にネットワークを設定しても、
The specified host network collides with a non-hostonly networkと出る感じがする。
- 独自にネットワークを設定しても、
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)
以下のように対処する。
virsh pool-listvirsh vol-list <プール名>- 特になければプール名は
defaultのはず。。。
- 特になければプール名は
virsh vol-delete <ボリューム名> --pool <プール名>
フォルダの同期
Synced Folders - Vagrant by HashiCorp
- NFS: 高速なのがメリット。rootで動かす必要がある(sudoの設定が記載されている)
- rsync:
vagrant uporvagrant reload時のみ。rsyncコマンドが使えれば、特別な設定は不要。 - SMB: (未確認)ホストがWindows / macOSのみ。
- VirtualBox: VirtualBoxの機能を使って同期
その他プラグインは以下の場所で探せます。
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.providerをconfig.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
Docker
Dockerfileと同じディレクトリにVagrantfileを置いて、以下のようにします。
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.name = "コンテナ名"
d.build_dir = "."
d.ports = ["80:80"] # 80番ポートを接続する場合。-pオプションの内容と同じ
end
end
Ansible
- Ansible - Provisioning - Vagrant by HashiCorp
- Common Ansible Options - Provisioning - Vagrant by HashiCorp
基本的な書き方は以下になる。
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}
}
}
-
Management Networkの
management_network_address↩︎ -
“default"は特に指定しない時のホスト名っぽいです。 ↩︎
公式サイト
- Getting Started - Vagrant by HashiCorp
- vagrant halt - Command-Line Interface - Vagrant by HashiCorp
- Environmental Variables - Vagrant by HashiCorp
外部サイト
関連項目
逆引きマニュアル
- Vagrant: libvirtプロバイダでVMの名前を変更する方法
- VagrantのゲストOSにProxyを使う方法
- VagrantでFreeBSDを使う方法
- Vagrantで古いCentOSを使用したい場合
- Vagrant + CentOS 7でディスクをリサイズする方法
- Vagrant: CentOS 7 Boxの使い方
- Vagrant: ホストOSのhostsファイルを書き換える
- Vagrant Boxの作成
- Vagrant + CentOS: yum updateで停止する場合の修正方法
- Vagrant: Boxのプロバイダを変更する方法
- Ansible + Vagrant + CentOS: パスワード認証を有効化する
- Vagrant: CentOS 6 Boxでsuできない