はじめに
Web開発するにあたって仮想的な開発環境を構築することは今や当たり前のように行うようになりました。
仮想的な開発環境を構築する手法として用いられるのが仮想マシン or コンテナといった技術です。
これらの違いを理解しておくことはWebエンジニアとして生きていくうえで必要だと感じたため、本ブログの執筆を決めました。
仮想マシン
仮想マシンの例として、LinuxにはKVMと呼ばれる仮想化技術が組み込まれています。
ハイパーバイザーと呼ばれる仮想化管理機構の上で仮想マシンが起動して、その内部でゲストOS(仮想マシン内で動くOS)が組み込まれることになります。
コンテナ
アプリケーションの動作に必要な環境が整っている箱のような概念です。
有名な例としてはDocker技術が挙げられます。
コンテナ技術の特徴としてはホストOSとカーネルを共有している点です。
仮想マシン VS コンテナ
仮想マシン技術の美点
仮想マシンではホストOSとはまったく別のOSを動作させることが出来ますが、コンテナ技術ではできません。
コンテナ技術の美点
独立した環境それぞれでゲストOSが動くわけではないので仮想マシン技術と比較してリソース消費が少なく、サービス起動までの時間も短く済みます。
コンテナ技術の注意点
コンテナによる仮想化では、プロセスの実行環境がコンテナ毎に閉じています。
そのため、ホストOSからすべてのコンテナ内のプロセスが見えますが、各コンテナ内から外のプロセスは見えなくなっています。
まとめ
以上の点を理解できていれば、最低限仮想化について知っていることになると考えます。
コンテナは「軽い、早い」、「OSに縛り」といったことを覚えておけば役に立つ知識として
記憶に残るのではないかと思います。
私自身も呪文のようにコンテナは「軽い、早い」、「OSに縛り」と定期的につぶやく事にします。