前回はVagrantのコマンドについて解説しました。今回はVagrantで仮想マシンを構築する際に使用する設定ファイル・Vagrantfileの設定例について解説します。
目次
仮想マシンを1台起動する
初めに、Vagrant Cloudにある既存のBoxイメージを使用した、最低限の設定にて仮想マシンを1台起動する方法について解説します。
VagrantfileでBoxイメージを指定する場合、「config.vm.box」を使用します。例えば、「generic/centos8」というBoxを使用する場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
Vagrant.configure("2") do |config|
# Boxイメージを指定する
config.vm.box = "generic/centos8"
end
------------------------------------------------------------
Boxのアップデートをチェックする
VagrantのBoxのアップデートをチェックする場合、「config.vm.box_check_update」を使用します。例えば、Boxのアップデートを有効とするには以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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」を設定する場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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」を複数設定します。
■Vagrantfile
------------------------------------------------------------
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」を使用します。例えば、仮想マシンにブリッジネットワークを設定する場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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番ポートをマッピングする場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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コアのマシンを構築する場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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 」を指定します。
■Vagrantfile
------------------------------------------------------------
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フォルダを共有フォルダとする場合は以下のように設定します。
■Vagrantfile
------------------------------------------------------------
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で以下のように設定します。
■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
------------------------------------------------------------