Vagrantfile@Vagrant¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Vagrantの仕組み¶
アーキテクチャ¶
ユースケース¶
Vagrantfileを使用して、プロバイダーとプロビジョナーを操作し、仮想環境を作成する。
Vagrantfile自体をプロビジョナーとして使用もできる。
プロビジョニングによりサーバー (物理サーバー、仮想サーバー) とコンテナを作成できる。
ただし、Vagrantは仮想サーバーの作成のために使用することが多い。
プロバイダー¶
▼ プロバイダーとは¶
仮想環境を提供する。
▼ プロバイダーの種類¶
プロバイダー名 | 補足 |
---|---|
VirtualBox | ・https://www.vagrantup.com/docs/providers/virtualbox |
VMWare | ・https://www.vagrantup.com/docs/providers/vmware |
Docker | ・https://www.vagrantup.com/docs/providers/docker |
Hyper-V | ・https://www.vagrantup.com/docs/providers/hyperv |
プロビジョナー¶
▼ プロビジョナーとは¶
プロバイダーによって作成された仮想環境に、ソフトウェアをインストールできる (構成管理できる) 。
具体的には、プログラミング言語やファイアウォールをインストールする。
▼ プロビジョナーの種類¶
プロビジョナー名 | ユースケース | 補足 |
---|---|---|
シェル | Vagrantfile自体をプロビジョニングツールとして使用する。 | ・https://www.vagrantup.com/docs/provisioning/shell |
Ansible | Vagrantfileでプロビジョニングを実行する代わりに、Ansibleを使用する。 | ・https://www.vagrantup.com/docs/provisioning/ansible |
CFEngine | Vagrantfileでプロビジョニングを実行する代わりに、CFEngineを使用する。 | ・https://www.vagrantup.com/docs/provisioning/cfengine |
Chef | Vagrantfileでプロビジョニングを実行する代わりに、Chefを使用する。 | ・https://www.vagrantup.com/docs/provisioning/chef_common |
Docker | Vagrantfileでプロビジョニングを実行する代わりに、Dockerfile (に似た記述) を使用する。 | ・https://www.vagrantup.com/docs/provisioning/docker |
Puppet | Vagrantfileでプロビジョニングを実行する代わりに、Puppetを使用する。 | ・https://www.vagrantup.com/docs/provisioning/puppet_apply |
Vagrantfile¶
プロバイダーとプロビジョナーの一連の操作内容を設定する。
チームメンバーが別々に仮想環境を作成する場合、プロバイダーとプロビジョナーの処理によって作られる仮想サーバーの環境に、違いが生じてしまう。
Vagrantfileにプロバイダーとプロビジョナーの操作を設定しておけば、チームメンバーが同じソフトウェアの下で、仮想サーバーを作成し、ソフトウェアをインストールできる。
02. Vagrant.configure¶
Vagrant.configureとは¶
Vagrantfileのバージョンを設定する。
Vagrant.configure("2") do |config|
# その他の全てのオプションを設定する。
end
03. config.vm¶
config.vmとは¶
仮想環境の構成を設定する。
config.vm.box¶
▼ boxとは¶
仮想環境のベースとするボックス名を設定する。
Vagrant.configure("2") do |config|
config.vm.box = "foo"
end
config.vm.hostname¶
▼ hostnameとは¶
仮想環境にホスト名を設定する。
Vagrant.configure("2") do |config|
config.vm.host = "foo-server"
end
config.vm.box_check_update¶
▼ box_check_updateとは¶
Vagrantの更新通知を設定する。
Vagrant.configure("2") do |config|
config.vm.box_check_update = false
end
config.vm.network¶
▼ networkとは¶
仮想環境のネットワークを設定する。
▼ forwarded_port¶
ホストから仮想環境へポートフォワーディングを設定する。
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
end
▼ private_network¶
仮想環境にプライベートIPアドレスを設定する。
同じプライベートネットワーク内の他の仮想環境とのみ、通信できるようになる。
他の仮想環境とIPアドレスが重複しないようにする必要がある。
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "10.0.0.2"
end
config.vm.provider¶
▼ providerとは¶
プロバイダー固有のオプションを設定する。
▼ virtualbox¶
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.cpus = "2"
vb.gui = true
vb.memory = "1024"
end
end
▼ docker¶
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |docker|
docker.build_dir = "./docker/Dockerfile"
docker.has_ssh = true
end
end
config.vm.provision¶
▼ provisionとは¶
仮想環境のプロビジョニングを設定する。
▼ shell¶
shellを使用して、仮想環境のプロビジョニングを実行する。もしVagrantがサポートしていないプロビジョニングツールを使用する場合は、これ自体をインストールしておく必要がある。シェルが複数行に渡る場合は、Rubyのヒアドキュメント形式 (<<-
) を使用すると良い。
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
apt-get update
# fooというプロビジョニングツールをインストールする。
apt-get install -y foo
SHELL
end
▼ ansible¶
ホスト側にAnsibleをインストールし、加えて仮想環境のプロビジョニングを実行する。
開発環境ではこのオプションを使用することは非推奨で、ansible_local
オプションを使用することが推奨である。
Vagrant.configure("2") do |config|
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory.yml"
SHELL
end
▼ ansible_local¶
仮想環境側にAnsibleをインストールし、加えて仮想環境のプロビジョニングを実行する。
注意点としては、開発環境ではコントロールノードと管理対象ノードが同じサーバー (仮想環境) になるため、コントロールノードは自分で自分を指定してプロビジョニングを実行することになる。
開発環境ではこのオプションを使用することが推奨されており、ansible
オプションを使用することが非推奨とされている。
Vagrant.configure("2") do |config|
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory.yml"
SHELL
end
ただし、Vagrantからではなく、Ansibleを直接的に操作したい場合は、shellオプションでAnsibleをインストールする必要がある。
こちらが推奨である。
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
apt-get update
# Ansibleをインストールする。
apt-get install -y ansible
# Ansibleを直接的に操作する。
ansible-playbook /etc/ansible/playbook.yml -i inventory.yml
SHELL
end
config.vm.synced_folder¶
▼ synced_folderとは¶
ホストのディレクトリを仮想環境にマウントする。
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/var/www/foo"
end
▼ type¶
マウント方法を設定する。
デフォルト値は、VirtualBox共有ディレクトリである。
その他、NFS、RSync、SMBを設定できる。
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/var/www/foo", type: "nfs"
end
ホストと仮想環境間のファイルのIOPSによって、性能に差がある。
以下のリンクで、ロードテストを実施したところ、『RSync > SMB > VirtualBox共有ディレクトリ
』の順で性能が良かった。
また、『RSync > NFS
』『NFS > SMB
』である。
これらから、おおよそ『RSync > NFS > SMB > VirtualBox共有ディレクトリ
』の順で性能が良くなると考えておけばよい。