プラグイン
よく使うプラグイン
- 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-list
virsh vol-list <プール名>
- 特になければプール名は
default
のはず。。。
- 特になければプール名は
virsh vol-delete <ボリューム名> --pool <プール名>
フォルダの同期
Synced Folders - Vagrant by HashiCorp
- NFS: 高速なのがメリット。rootで動かす必要がある(sudoの設定が記載されている)
- rsync:
vagrant up
orvagrant 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できない