前回の記事では「VirtualBox」と「Vagrant」を使用して、仮想環境を構築する手順を紹介しました。
この記事では「Vagrantfile」の基本的な書き方について紹介したいと思います。
Vagrantfileとは
「vagrant init」コマンドを実行すると作成されるのが「Vagrantfile」です。「vagrant up」コマンドを実行時に、この「Vagrantfile」に記述されている情報を基にして仮想マシンが作成されます。
このファイルには、仮想マシンのCPUコア数、メモリ容量等の基本的な設定から、ネットワークアダプタの設定、ソフトウェアのインストール等まで記述することが出来ます。
「Vagrantfile」を一つ作成しておけば同じ環境を複数作成することや、異なる環境に同一の仮想環境を構築することが出来ます。面倒な環境構築を「vagrant up」するだけで完了することができ、手順書に沿ってコマンド実行していく必要が無くなります。
デフォルト設定
「vagrant init」コマンドを実行した後に以下の内容で「Vagrantfile」が作成されます。( コメントは省略しています。)
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
end
設定の記述
設定は「Vagrant.configure(“2”) do |config|」と「end」の間に記述していきます。
Vagrant.configure("2") do |config|
# この中に設定を記述
end
「Vagrant.configure(“2”) 」の「2」は「Vagrant」の構成バージョンを指定しています。現在はバージョン「1」と「2」がサポートされているようですが、特に理由がない限り「2」で問題が無いかと思われます。
Boxの指定
Boxは以下のように「config.vm.box」で指定します。通常は「vagrant init」コマンドで指定したBoxが自動で挿入されます。
config.vm.box = "hashicorp/bionic64"
Vagrantfileのカスタマイズ
デフォルト状態のBoxを指定しただけの「Vagrantfile」でもCPUコア数やメモリ容量等はデフォルトの値が設定されます。各種構成情報の設定を行うために「Vagrantfile」を編集していきます。
この記事ではプロバイダとしてVirtualBoxを使用する前提で解説します。
プロバイダの指定
VagrantではVirtualBox以外にも、VMwareやHyper-V等のプロバイダ(仮想環境)を使用することが出来ます。明示的に設定しなくても、ホストマシンで使用出来るプロバイダを自動的に検出してくれます。
明示的に設定する場合は以下のように記述します。
config.vm.provider "virtualbox"
プロバイダの設定
仮想マシン名や、メモリ容量等を指定を以下のように行うことが出来ます。
「config.vm.provider “virtualbox” do |vb|」と「end」の間に設定内容を記述していきます。
config.vm.provider "virtualbox" do |vb|
vb.name = "sv01"
vb.gui = false
vb.cpus = 2
vb.memory = "2048"
end
仮想マシン名
vb.name = "仮想マシン名"
GUIの有無
# GUIあり
vb.gui = true
# GUI無し
vb.gui = false
CPUのコア数
vb.cpus = コア数
メモリ容量
vb.memory = "メモリ容量(MB)"
ネットワーク設定
Vagrantは特に設定を記述しなくても、NATアダプタが有効になっています。必要に応じてポートフォワーディング設定や、他のネットワークアダプタの追加を行います。
ポートフォワーディング設定
「guest」は仮想マシン、「host」にはホストマシンのポート番号を設定します。ホストマシンの指定したポート宛のトラフィックが仮想マシンの指定したポートへ転送されます。
config.vm.network "forwarded_port", guest: ポート番号, host: ポート番号
設定例)ホストマシンの8080番ポート宛のアクセスを仮想マシンの80番ポートへ転送
config.vm.network "forwarded_port", guest: 80, host: 8080
private_network
ホストマシンとゲストマシン間でのみ通信が可能な設定です。いわゆる「ホストオンリーアダプタ」です。他のPCからはアクセスすることは出来ません。
config.vm.network "private_network", ip: "IPアドレス"
設定例)仮想マシンへIPアドレス「192.168.33.11」を設定
config.vm.network "private_network", ip: "192.168.33.11"
上記設定によりホストマシンへIPアドレス「192.168.33.1」のホストオンリーアダプタが追加されます。
public_network
ホストマシンとホストマシンが接続しているネットワーク上のホストとの通信が可能な設定です。いわゆる「ブリッジアダプタ」です。ホストマシンが接続しているネットワークのIPアドレスを指定する必要があります。
config.vm.network "public_network", ip: "IPアドレス", bridge: "アダプタ名"
設定例)仮想マシンへIPアドレス「192.168.0.11」を設定
config.vm.network "public_network", ip: "192.168.0.11", bridge: "Intel(R) 82579V Gigabit Network Connection"
Windowsの場合、アダプタ名はコマンドプロンプト上で「ipconfig /all」を実行して調べます。
「bridge: “アダプタ名”」を記述せずホストマシンに複数のネットワークアダプタがある場合は、「vagrant up」時にブリッジするアダプタを聞かれるのでその都度指定をします。
フォルダの同期設定
フォルダの同期設定は「config.vm.synced_folder」で行います。
デフォルト状態では、カレントディレクトリが「/vagrant」と共有されています。
デフォルトの同期の無効化
デフォルト状態では、「Vagranfile」も同期されている状態になっています。デフォルトの同期設定を無効にするには、以下のように記述します。
config.vm.synced_folder '.', '/vagrant', disabled: true
同期フォルダを個別に指定
同期したいフォルダを以下のように指定します。
config.vm.synced_folder "ホストマシン側のパス", "仮想マシン側のパス"
設定例)「C:\vagrant\ubuntu\www」を仮想マシンの「/var/www/html」と同期する設定
config.vm.synced_folder "C:/vagrant/ubuntu/www", "/var/www/html"
プロビジョニングの設定
ここでは最初の「vagrant up」時や明示的にプロビジョニングを指定して起動した際に、自動的にソフトウェアをインストールしたり、設定を変更したりすることが出来ます。
「Vagranfile」へ直接実行するコマンドを記述したり、予め作成しておいたスクリプト等を実行することで実現が可能となります。
Vagrantfileへ直接記述する方法
「config.vm.provision “shell”, inline: <<-SHELL」と「SHELL」の間に実行したいコマンドを記述します。
config.vm.provision "shell", inline: <<-SHELL
実行したいコマンドを記述
SHELL
設定例)Apache2をインストールする
config.vm.provision "shell", inline: <<-SHELL
apt update
apt -y install apache2
SHELL
スクリプトを実行する方法
以下のように記述します。Vagrantfileがあるディレクトリにスクリプトを作成しておくと分かりやすいかと思います。
config.vm.provision :shell, :path => "ファイル名"
設定例
ここまで紹介した設定方法を用いて以下のようなVagrantfileを作成してみました。
# -*- mode: ruby -*- # vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.name = "sv01"
vb.gui = false
vb.cpus = 2
vb.memory = "2048"
end
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.synced_folder "C:/vagrant/ubuntu/www", "/var/www/html"
config.vm.provision "shell", inline: <<-SHELL
apt update
apt -y install apache2
SHELL
end
「vagrant up」後に「127.0.0.1:8080」へアクセスすると「C:\vagrant\ubuntu\www」へ作成しておいた「index.html」の内容が表示されるはずです。
最後に
今回は1台の仮想マシンで行える基本的な設定について紹介しました。次回は複数台の仮想マシンの制御についてまとめてみたいと思います。
コメント