Vagrantfile (Version2) の設定方法・設定例について
今回はVagrant の設定ファイル・Vagrantfile について説明します。本記事は2020年10月3日の記事であり、仕様などについて変更されている可能性があるためご注意ください。
仮想マシンを1台起動する
初めに、Vagrant Cloudにある既存のBoxイメージを使用した、最低限の設定にて仮想マシンを1台起動する方法について解説します。VagrantfileでBoxイメージを指定する場合、「config.vm.box」を使用します。例えば、「generic/centos8」というBoxを使用する場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
end
Boxのアップデートをチェックする
VagrantのBoxのアップデートをチェックする場合、「config.vm.boxcheckupdate」を使用します。例えば、Boxのアップデートを有効とするには以下のように設定します。
Vagrant.configure("2") do |config|
# Boxのアップデートがあるかどうかチェックする
config.vm.box_check_update = true
end
プライベートIPアドレスを設定する
Vagrantで起動する仮想マシンにプライベートIPアドレスを設定する場合、「config.vm.network」の「private_network」を使用します。例えば、仮想マシンにプライベートアドレス「192.168.33.11」を設定する場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# プライベートネットワーク「192.168.33.11」を設定する
config.vm.network "private_network", ip: "192.168.33.11"
end
仮想マシンに複数のプライベートIPアドレスを設定する場合、「config.vm.network」を複数設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# プライベートネットワーク「192.168.33.11」「192.168.33.12」を設定する
config.vm.network "private_network", ip: "192.168.33.11"
config.vm.network "private_network", ip: "192.168.33.12"
end
ブリッジを使用する
Vagrantで起動する仮想マシンにブリッジのネットワークを使用する場合、「config.vm.network」の「public_network」を使用します。例えば、仮想マシンにブリッジネットワークを設定する場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# ブリッジのネットワークを使用する
config.vm.network "public_network"
end
フォワードするポートを指定する
Vagrantで起動する仮想マシンのポートのマッピングを指定するには、「config.vm.network」の「forwarded_port」を使用します。例えば、ゲストで80番ポート、ホストでIPアドレス127.0.0.1、8080番ポートをマッピングする場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# ゲストで80番ポート、ホストでIPアドレス127.0.0.1、8080番ポートをマッピングする
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: 127.0.0.1
end
仮想マシンのスペックを指定する
Vagrantで起動する仮想マシンのスペックを指定する場合、「config.vm.provider」で「virtualbox」を使用します。virtualboxの指定後、「vb.customize」を使用し詳細な設定を行います。例えば、NATがホストマシンのDNSで名前解決を行い、メモリ512MB、CPU2コアのマシンを構築する場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# NATがDNSのホストで名前解決を行い、メモリ512MB、CPU2コアのマシンを構築する
config.vm.provider "virtualbox" do |vb|
vb.customize [
'modifyvm', :id
'--natdnshostresolver1', 'on',
'--memory', '512'
'--cpus', '2'
]
end
end
また、Vagrantで仮想マシンの起動時にVirtualBoxの画面を表示させる場合は「vb.gui」を指定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# NATがDNSのホストで名前解決を行い、メモリ512MB、CPU2コアのマシンを構築する
config.vm.provider "virtualbox" do |vb|
vb.customize [
'modifyvm', :id
'--natdnshostresolver1', 'on',
'--memory', '512'
'--cpus', '2'
]
# Vagrantで仮想マシンの起動時にVirtualBoxの画面も表示させる
vb.gui = true
end
end
共有フォルダを指定する
Vagrantで起動する仮想マシンで共有フォルダを設定する場合、「config.vm.synced_folder」を使用します。例えば、Vagrantfileと同じ場所にあるdataフォルダを共有フォルダとする場合は以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
# 共有フォルダを設定する
config.vm.synced_folder "data", "vagrant_data"
end
シェルスクリプトを使用してソフトウェアを追加する
Vagrant で起動する仮想マシンで事前にソフトウェアのインストール等のプロビジョニングを行いたい場合、「config.vm.provision」を使用します。例えば、UbuntuサーバにApacheをインストールした状態で仮想マシンを起動する場合は、事前にシェルスクリプトを作成します。
# Apacheをインストールするシェルスクリプトを作成する
vi apache_inst.sh
■apache_inst.sh
------------------------------------------------------------
#!/usr/bin/env bash
apt-get update > /dev/null 2&1
apt-get install -y apache2 > /dev/null 2>&1
------------------------------------------------------------
シェルスクリプト作成後、Vagrantfileで以下のように設定します。
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "bento/ubuntu-20.04"
# シェルスクリプトを指定する
config.vm.provision "shell", path: "apache_inst.sh"
end
複数の仮想マシンを設定する
Vagrantで複数の仮想マシンを同時に起動する場合、「config.vm.define」を使用します。例えば、Ubuntuサーバでwebとdbの2台の仮想マシンを起動する場合は以下のように設定します。
# Vagrantfileと同じ場所にdataフォルダを作成する
mkdir data
■ Vagrantfile
------------------------------------------------------------
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "bento/ubuntu-20.04"
# 仮想マシン・webを設定する
config.vm.define "web" do |web|
web.vm.network "private_network", ip: "192.168.33.200"
end
# 仮想マシン・dbを設定する
config.vm.define "db" do |db|
db.vm.network "private_network", ip: "192.168.33.201"
end
end
------------------------------------------------------------
仮想マシンごとにBoxイメージを分ける場合は、「config.vm.define」内に「vm.box」を設定します。
# Vagrantfileと同じ場所にdataフォルダを作成する
mkdir data
■ Vagrantfile
------------------------------------------------------------
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "bento/ubuntu-20.04"
# 仮想マシン・webをUbuntu20.04で設定する
config.vm.define "web" do |web|
web.vm.box = "bento/ubuntu-20.04"
web.vm.network "private_network", ip: "192.168.33.200"
end
# 仮想マシン・dbをCentOS8で設定する
config.vm.define "db" do |db|
db.vm.box = "generic/centos8"
db.vm.network "private_network", ip: "192.168.33.201"
end
end
------------------------------------------------------------