Vagrantfile(Version2)の設定方法・設定例について

投稿者: | 2020-10-03

前回は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
------------------------------------------------------------