pyてよn日記

一寸先は闇が人生

仮想マシンの基本

 「Vagrant で環境構築してくれ」という指令を受けたが,Vagrant なんて知らんとなったのでかなり浅くではあるが調べてまとめてみた.

概要

 Vagrant は「仮想マシンを構築するソフトウェア」らしい.Vagrant は愚か,仮想マシンすら知らない状態なので調べて簡単にまとめた.

という順に解説していく.

仮想マシン

 仮想マシンについて解説する.

仮想化

 仮想マシンの前に,まず「仮想化」という言葉について解説する.

 仮想化には,サーバ・ストレージ・ドライブ・デスクトップなど多くの仮想化がある.「仮想化」を一言で言うと,

 

仮想化=物理的な環境にとらわれず仮想的な環境を作り出すこと

 

である.仮想化の対象によりそれぞれ特徴はあるが,「物理的な環境にとらわれず」というのがポイント.

 例えば,サーバの仮想化では,一台の物理サーバ上に仮想的に作り上げたサーバを複数稼働させる.目に見えるサーバは一台でも,実際に稼働しているのは複数のサーバである.このとき,物理サーバのリソース(メモリ,ストレージなど)は設定により物理的に分割されている.

仮想マシン

 仮想マシンVM,Virtual Machine)とは,「仮想的に作り出されたハードウェア」のことである.一台の物理サーバ上に,複数の「仮想的なマシン」を作り出し稼働させるのが仮想マシンである.

 仮想マシンは,好きな OS,ソフトウェアなどをインストールして環境を作ることができ,一つの独立したマシンとして動かすことができる(ストレージ,メモリなどのリソースは物理マシンに依存する).仮想マシンで構築した開発環境は仮想環境とも言われる.

ホスト OS とゲスト OS

 仮想マシンの話で必ず出てくるホスト OS とゲスト OS.

  • ホスト OS仮想マシンの土台となる OS.つまり,物理サーバにインストールされている OS.
  • ゲスト OS仮想マシン上にインストールされた OS.

 例えば,Linux サーバ上に仮想マシンを作り Windows をインストールしたら,

となる.

 「さくらの VPS」で有名な VPS(Virtual Private Server) は,仮想化により一台のサーバ上で複数のサーバ(仮想マシン)を動作させ,それらの仮想マシンをユーザに貸し出している.以下の画像を見ると,ホスト OS とゲスト OS の関係,リソースが物理マシンに依存するという意味がよく分かる.

https://blog.arena.ne.jp/wp-content/uploads/2017/03/%E5%9B%B32%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%90%E3%82%A4%E3%82%B6%E3%83%BC%E5%9E%8B%E3%81%AE%E4%BB%AE%E6%83%B3%E5%9E%8B%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF.png

VPSの仕組み より引用)

VirtualBoxVMWare

 仮想マシンという言葉とセットでほぼ必ず聞くことのあるVirtualBoxVMWare.これらが何なのかを解説する.

仮想化ソフトウェア

 VirtualBoxVMWare は,WindowsOS XMacOS),Linux などで利用できるオープンソース仮想化ソフトウェアである.仮想化ソフトウェアとは,「あるマシン(物理マシン)上で別のマシン(仮想マシン)を動かすためのソフトウェア」である.

VirtualBox - Wikipedia

 機能を詳しく知りたい方は以下を参照.

www.atmarkit.co.jp

仮想マシン,仮想化ソフトウェアのメリット

 仮想マシン,仮想化ソフトウェアには以下のような利点があり,開発,検証用途に便利.

  • ホスト OS とは独立した環境を使用できるので,ホスト OS を汚さなくて済む.
  • ホスト OS と異なる OS を使用できる(Windows 上で Linux を使う等).
  • 仮想マシンを必要に応じて簡単に作成,消去,複製ができ,開発環境の共有なども簡単にできる.

Vagrant

www.vagrantup.com

Vagrant(ベイグラント)は、FLOSSの仮想開発環境構築ソフトウェア。VirtualBoxをはじめとする仮想化ソフトウェアやChef(英語版)やSalt(英語版)、Puppetといった構成管理ソフトウェアのラッパーとみなすこともできる。
Vagrantを用いると、構成情報を記述した設定ファイルを元に、仮想環境の構築から設定までを自動的に行うことができる。当初はVirtualBoxをターゲットとしていたが、1.1以降のバージョンでは VMware などの他の仮想化ソフトウェアやAmazon EC2のようなサーバー環境も対象とできるようになった。
Vagrant自身はRubyで作成されているが、PHPPythonJavaC#JavaScriptといった、他のプログラミング言語の開発においても用いることができる。

 Vagrant とは,仮想マシンの立ち上げ,消去,管理ができるオープンソースソフトウェアである.簡単に言えば VirtualBoxVMWare を簡単に扱えるようにするためのラッパーである.実際には VirtualBox 上で仮想マシンを起動させています.

 Box と呼ばれる仮想マシンのテンプレートをダウンロードすれば,仮想マシン作成時に OS のインストール作業をせずに済む.

終わりに

 「Linux を使う」ということをかなり面倒なものだと考えていたが,Vagrant を使ったら簡単に手元で Linux を動かすことができた.

 「開発環境の共有」に関して,「pip freeze したファイルを使ってライブラリを共有するのかな」と今まで簡単に考えていたが(ほぼ Python しか知らないので),仮想マシンを使って OS からライブラリまで丸ごと環境を手元に復元することが出来るということを知り素直に感動した.Vagrant もまだよく分かっていないが,Docker もこんな感じで環境を簡単に構築できるみたいな感じだろうか.

 こういう知識系の記事は自分の知識の薄さが明るみに出るので恥ずかしいが,知識がないのも事実なので引き続き勉強を続けたい.

参考

Vagrant による環境構築の部分を参考にした.