ツール

【Vagrant】Forwarded Port、共有フォルダ、仮想マシンのメモリなどの設定方法

更新日:

Vagrantfileの以下の設定方法について紹介したいと思います。

  • boxファイルの設定
  • fowarded port(ポートフォワーディング)の設定
  • 共有フォルダの設定
  • VirtualBoxのGUI起動と仮想マシンのメモリ設定

これらの設定方法はvagrant initで作成したVagrantfileにコメントとしても記載されています。 Vagrantfileのコメントについては最後に確認していきたいと思います。

Vagrantfileの構造

設定方法の前にVagrantfileの構造から、簡単に説明していきたいと思います。

まず、VagrantfileはRuby言語で記述します。 ですが、Rubyがわからなくても心配いりません(私も全く知りません)。 基本的には「Vagrant.configure("2") do |config|」と「end」までの間に 設定を記述して行けば大丈夫です。

Vagrant.configure("2") do |config|
    ... # ここに設定を記述していく。
end

doからendまでがRubyのブロックで、 仮引数のconfigに対して設定を追加していきます。 次のように「config.〜」という感じです。

config.vm.box = "centos/7"

わからないときは、マニュアルや他の人の設定を参考にしましょう。 これを踏まえた上で、 「Vagrant.configure("2") do |config|〜end」間に記述する設定を 見ていきましょう。

Vagrantfileの設定

boxファイルの設定

boxファイルは「config.vm.box」に指定します。

config.vm.box = "centos/7"

設定値(ここでは"centos/7")には、 Vagrantの公式サイトから検索したboxファイルを指定します。 形式はUSER/BOXになっています。 Vagrantのサイトに設定例が記載されているので確認して設定します。

Vagrantの公式サイト以外のboxファイルを設定したい場合は、それぞれのドキュメントなどを参照してください。

fowarded port(ポートフォワーディング)の設定

fowarded portはホストOSの特定のポート番号へのアクセスをゲストOSの特定のポート番号へ転送します。

次の例は、ホストOSの任意のIPアドレスで8080番ポートへの通信を ゲストOSの80番ポートへ転送します。

config.vm.network "forwarded_port", guest: 80, host: 8080

この例の場合、Webブラウザで「http://<ホストOSのIPアドレス>:8080/index.html」 のようにホストOSの8080番ポートにアクセスすると、 その通信はゲストOSの80番ポート(Webサーバ)へ転送され、 結果ゲストOSのWebサーバからindex.htmlが返されて表示されます。

このときの<ホストOSのIPアドレス>は、 通常のIPアドレス、localhost、ループバックアドレスです。

この設定では、外部のマシンもゲストOSのWebサーバにアクセスできます。 ただし、外部マシンがホストOSの8080番ポートにアクセスできる必要があります。

外部マシンからはアクセスできず、 ホストOSだけがアクセスできるようにするには、次のように設定します。

config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

この設定は、ホストOSが自身のIPアドレスの127.0.0.1に8080番ポートでアクセスすると、 ゲストOSの80番ポートへ転送されます。 つまり、ホストOSでWebブラウザに「http://127.0.0.1:8080/index.htm」 のようなURLでアクセスします。

ホストOSの127.0.0.1(ループバックアドレス)へは、 ホストOS自身からしかアクセスできませんので、 外部マシンはゲストOSのWebサーバへアクセスすることができなくなるというわけです。

共有フォルダの設定

共有フォルダを設定すると、 共有フォルダ内のファイルがホストOSからもゲストOSからも見えるようになります。

共有フォルダの設定は次のようにします。

config.vm.synced_folder "../data", "/vagrant_data"

最初の引数にはホストOSのディレクトリを指定します。 相対パスの場合はプロジェクトのルートディレクトリが基準になります。 2番目の引数にはゲストOSのディレクトリを指定し、これは絶対パスである必要があります。 ホストOS側のディレクトリは存在している必要がありますが、 ゲストOS側のディレクトリは存在している必要はありません。

プロバイダがVirtualBoxの場合は、Vagrantfileの設定だけでなく Vagrantにvagrant-vbguestプラグインがインストールされている必要があります。

プラグインがインストールされているかは次のコマンドで確認できます。

$ vagrant plugin list
No plugins installed.

プラグインが何もインストールされていないと上記のように表示されます。

vagrant-vbguestプラグインをインストールするには次のように実行します。

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: micromachine-3.0.0.gem (100%)
Fetching: vagrant-vbguest-0.21.0.gem (100%)
Installed the plugin 'vagrant-vbguest (0.21.0)'!

あとはvagrant upで仮想マシンを起動すると、 初回の仮想マシン作成時に必要なパッケージが自動でインストールされます。

プラグインがインストールされているだけで仮想マシン作成後の初回起動時に 毎回この処理が走り少し時間がかかります。 頻繁に仮想マシンの作成を行う場合はちょっと邪魔かもしれません。 どうしても共有フォルダが必要でなければプラグインを削除してしまいましょう。 それには次のように実行します。

$ vagrant plugin uninstall vagrant-vbguest

なお、プラグインが正しく動作しているかは、仮想マシン起動後に次のように実行すれば確認できます。

$ vagrant vbguest
[default] GuestAdditions 6.0.14 running --- OK.

もし上述の通り実施してもエラーが出る場合は、 Vagrantの共有フォルダが原因で起動エラーになった時の対処法 も参照してください。

VirtualBoxのGUI起動と仮想マシンのメモリ設定

仮想マシン起動時にVirtualBoxのGUIの起動と仮想マシンのメモリサイズを設定するには 次のように設定します。 これはVirtualBox固有の設定です。 もちろん、どちらか一方だけでも設定できます。

config.vm.provider "virtualbox" do |vb|
  # Display the VirtualBox GUI when booting the machine
  vb.gui = true

  # Customize the amount of memory on the VM:
  vb.memory = "1024"
end

Vagrantfileのコメントの詳細

前述の通り、この記事で説明した設定はVagrantfileにコメントとして記載されています。 設定するときは必要な設定をコメントアウトして、修正すれば良いでしょう。

ここでは、実際にコメントを順に確認していきます。

$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

まず、「Vagrant.configure("2") do |config|」の"2"が、 Vagrantのコンフィグのバージョンを表していると言うことが記載されています。 そして完全なリファレンスは https://docs.vagrantup.com にあると記載されています。

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "base"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

ここはboxファイルの設定についての記載です 全てのVagrant開発環境はboxファイルが必要で、 それはhttps://vagrantcloud.com/search で探すことができるとのこと。

boxファイルの設定方法は前述しましたが、 それ以外にデフォルトでboxファイルは自動でアップデートの確認がされるようで、 これを無効にする設定の方法が記載されています。

# config.vm.box_check_update = false

しかしこれは非推奨とのこと。

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

ここはFowarded Portについての記載です。 前述した2つの設定方法について記載されています。

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

ここはネットワークの設定の仕方が書いてあります。 ネットワークについては「 Vagrantの仮想マシンのネットワークについて詳しく説明する 」で詳しく説明していますので、よろしければ参照して見てください。

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

これは前述した共有フォルダの設定方法の記載です。 しかし、ここにvagrant-vbguestプラグインについての記載はありません。

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

ここはプロバイダ固有の設定について記載されている。 前述したVirtualBox固有の設定が記載されている。

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

最後はシェルスクリプトのプロビジョニングの記述例です。 Puppet、Chef、Ansible、Salt、Dockerなどのプロビジョナも使用できるとある。

以上で説明は全て終了です。最後までお読みいただきありがとうございます。

-ツール
-

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.