Virtualbox / vagrant のすゝめ

0
333

LAMP環境で動くシステムの開発環境を構築したい場合、どうしますか?
WindowsならXAMPP、MacならMAMPという選択肢もありますが、開発関連ソフトをホストOSに直接インストールすることになるのでホストOSの動作を不安定にする場合があります(実際、ありました)。
これは精神衛生上よくありません。
と言うことで、仮想化ソフト「Virtualbox」と「vagrant」の利用に関する布教活動中です。

Virtualboxとは?

仮想化ソフトです。
エミュレーターという言い方もあります。
単純に言えば、あるOS環境(例えばMac)上で別のOS環境(例えばLinux)を使えるようにすることができるソフトです。
言い換えれば、ある機械(例えばMac)の中に別の機械(例えばLinuxサーバ)が仮想的に存在しているような状況を構築できるソフトです。この時、仮想的に存在している機械の方を仮想マシンと表現したりします。
これ以上詳しく知りたい方はGoogle先生に聞いてください。

vagrantとは

仮想化ソフトを使用した仮想マシン環境を簡易に構築するためのソフトです(なんのこっちゃ?)
例えばVirtualboxだけでも仮想マシン環境は構築できるようですが、かなり面倒らしく、その辺をvagrantを使うことで簡略化できるようです。
と言ってもvagrantを使わずにVirtualbox環境を構築したことがないので、実際のところは良くわかりません。
まぁ、Virtualboxを使う時はセットでvagrantを使うのが定石(デフォルト)と思っていただいて問題ないかと。
これ以上詳しく知りたい方はGoogle先生に聞いてください。

Virtualboxのインストール方法

Google先生に聞いてください。
環境にも依存しますし、インストール方法自体も変わる可能性もありますし、仮想マシンの構築自体は何度も行いますがVirtualboxのインストールは1ホストOSで1回行うだけかと思いますので(アップデートは除く)、頑張って覚えるようなものでもないかと(と言うことで、個人的にも覚えていません)。

vagrantのインストール方法

Google先生に(以下同文)

仮想マシン構築

とりあえずLAMP環境構築を目指します。
LinuxはCentOS7で(一度CentOS8も試しましたが、いろいろとやりづらい点があって以降試してないため)。
なお、GUI的な方法もあるのかもしれませんが、個人的にはコマンドベースのやり方の方に馴染んでますし、Linux環境を扱っていくのならコマンドくらい叩けないと、と言う強行姿勢で以下操作方法はコマンドベースです。

まず、ホストOS上で仮想マシン環境を構築するフォルダを作成します。
どこでも良いですが、将来的に複数の仮想マシンを管理していくことになることも想定して、専用の置き場所を決めておくと良いでしょう。
個人的には(Macですが)
~/Documents/dev/<プロジェクト名>/vbox
のような命名規則で仮想マシン用のフォルダを用意しています。

仮想マシン環境を構築するフォルダが決まったら同フォルダ配下で以下のコマンドを実行します。

$ vagrant init centos/7

事前に「box add」が必要との説もありますが、私の環境ではいきなり上記でも問題なさそうだったので、とりあえずこの方法を紹介しておきます(上記でダメならGoogle先生に)。

上記を実施すると、同フォルダ内に「Vagrantfile」と言うファイルができます。
中を見ていただくと、いろいろと書かれていますが大半はコメントです(行内の#以降がコメント)。
必要な箇所に限定、かつ個人的にお勧めの内容(基本形)を以下に紹介します。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.synced_folder "../share", "/home/vagrant/share"

  config.vm.provider "virtualbox" do |vb|
    vb.name = "<VBox Name>"
    vb.memory = "1024"
  end
end

「private_network」の定義はデフォルトで上記のようになっていると思います。
「private_network」はあくまでそのホストOS上でのみ有効で、その仮想マシンのIPアドレスを決定しています。
例えば、2つの仮想マシンA、Bが存在し、AのIPを「192.168.33.10」、BのIPを「192.168.33.11」とすれば、ホストOSからIP:192.168.33.10指定でAのマシンにアクセスできますし、IP:192.168.33.11指定でBのマシンにアクセスできます。
またAB相互にもそれぞれのIPを指定することでアクセスができます。
ただし、ホストOS外(例えばホストOSが載ったマシンと同じLANに属する別マシン)から上記IPを指定してABにアクセスすることはできません。
もしホストOS外から仮想マシンにアクセスしたければ、「private_network」ではなく「public_network」の設定をしてください(ここでは説明しませんが)。

「synced_folder」はホストOS上の特定のフォルダ配下を仮想マシンの特定のフォルダとみなす設定です。
上記の例の場合、仮想マシン環境を構築したホストOS側フォルダと同じ階層にある「share」フォルダを仮想マシン内の「/home/vagrant/share」フォルダとしてアクセスできるようにしています。
例えば、ホストOS側で「share/a」ファイルを作成すれば、仮想マシン内の「/home/vagrant/share/a」ファイルとして参照できますし、逆に仮想マシン内で「「/home/vagrant/share/b」ファイルを作成すれば、ホストOS側で「share/b」ファイルとして参照できます。
開発作業(ファイル作成、編集等)はホストOSで実施し、動作確認は仮想マシン上で行うことを想定した場合に上記のような環境構築が必要になります。

「vb.name」に関しては自動生成されたVagrantfileには存在しませんが、この設定を行なっておくと便利です。
仮想マシンの操作は基本的にはvagrantコマンドで行いますが、ケースによってはVirtualboxのコマンドを実行したい場合などもあります。
そのようなケースで対象となる仮想マシンを名前で識別したい場合に上記「vb.name」の設定をしておくと、ここで設定した名前が使えます(例では「&lt;VBox Name>」と書いてありますが、ここに適当な名前を指定してください)。
なお、上記設定を行わないと仮想マシンの名前は「vbox_default_1599789684120_68750」のような謎の文字列になるため仮想マシンの識別が困難になります。
「vb.memory」は仮想マシンに割り当てられるメモリ容量です。必要に応じて変更を。
上記のようにVagrantfileの準備を行なったら仮想マシンが起動できるようになります。

仮装マシンの起動

以下のコマンドで仮想マシンを起動します。
$ vagrant up
上記は仮想マシンの起動を行うものですが、仮想マシン生成直後(Vagrantfileを更新しただけの状態)の起動ではVirtualboxとしての仮想マシン環境の構築自体を合わせて行うため少々時間がかかります。

仮装マシンへのログイン

仮想マシンにログインする場合は以下のコマンドを実行します。
$ vagrant ssh
ログイン後のユーザーは「vagrant」で、カレントディレクトリは「/home/vagrant」です。
root権限が欲しければ、
$ sudo su
でrootユーザーになれます。

仮装マシンの停止

今までの流れを忠実に実行して行くと仮想マシンにログインした状態ですが、仮想マシンの停止はvagrantコマンドで実行しますので、仮想マシンからログアウトした上で下記を実行してください。
$ vagrant halt
仮想マシン内でシャットダウンの実行(init 0)を行なっても仮想マシンを停止できるようですが、実環境とは異なる事情がある可能性もありますので上記vagrantファイルで停止した方が無難かと思います。
「LAMP環境構築を目指す」と言いつつ仮想マシン環境の構築だけで長くなったので、続きは別途。