K8s 5分講座#02 コンテナと仮想マシンの違い
今日はコンテナと仮想マシンの違いについて話すぞ!
どちらも1つのHW上に複数のアプリケーション群(コンテナ・仮想マシン)を置けるし、広い意味ではどちらも”仮想化技術”ですよね?どう違うんだろう…
構造上の違い
どちらも最下レイヤからHW、その上にOSがある所までは同じだが、その上が違う。コンテナ(ここではDocker)ではOS上にインストールされたDockerがある。
コンテナの場合は、下からHW→OS→Dockerですね。
そしてDockerは、ライブラリとそのライブラリの動作に必要な関連ファイルだけで実行するコンテナを管理できる。
ふむふむ。仮想マシンだとどうなりますか?
仮想マシンの場合は、Dockerの代わりにハイバーバイザ等の仮想化技術が来て、その上に仮想マシンが起動する。
仮想マシンは、下からHW→OS→ハイパーバイザ→仮想マシンですね。
仮想マシンにはそれぞれOSがあり、その上はコンテナと同じくライブラリと関連ファイルだ。
あれ、またOSですか?HW→OS→ハイパーバイザ→OS→…とサンドイッチになってますね。このOSはそれぞれカーネルとディストリビューションを含んでいるんですよね?
ちゃんと前回の講義を覚えているな!つまり同じ役割を持つ層が2つあることになる。これがコンテナと仮想マシンの構造上の違いであり、リソース面・分離度の違いにも表れてくる。
リソース面の違い
OSってパソコンの電源を入れて、ログイン画面が出るまでの待ち時間で起動するアレですよね?
そうだ。ホストのOSに加え、仮想OSとカーネルが存在し、仮想マシンを実行するということは、それだけリソースも多く必要になる。
ずっしり重いマシンになりそうだ…
通常ギガバイトのサイズになるため、このオーバーヘッドによって基礎リソースの使用率が高くなり、ディスク容量も消費する。
コンテナだと、どれくらいですか?
Dockerコンテナの場合は軽量で、通常メガバイトだ。これによって、Dockerコンテナは通常数秒という速さで起動できるようになる。
仮想マシンを触ったことがありますが、起動に数分はかかりますね。
そうだ。ホスト自体のOSのほかに、仮想マシンとしてOS全体を起動する必要があるからな。
分離度の違い
仮想マシン上で別のOSが立ち上がるということは、ホストと複数の仮想マシン同士が互いに完全に分離されているということでもある。
基盤となるOSやカーネルに依存しないからこそ、LinuxベースやWindowsベースなど、異なる種類のOSを同じハイパーバイザ上で使用することができるんですね。
一方でコンテナはカーネルのようにコンテナ間で共有されるリソースが多いため、分離度が低いという点は覚えておこう。
これらの特徴を踏まえてコンテナと仮想マシンを使い分ける必要があるんですね!
- コンテナは下から、HW→OS→コンテナ→ライブラリ等、
仮想マシンはHW→OS→ハイパーバイザ→OS→ライブラリ等となり、OSが2層ある状態。 - リソース面では仮想マシンが不利で、通常起動には数分かかる。コンテナは数秒。
- 仮想マシンはハイパーバイザ上で任意のOSを立ち上げられるが、コンテナはホストと同OSの制約あり。
レイヤの図解がいっぱい出てくるから、ハンバーガーを食べたくなっちゃいました…一緒に食べに行きましょうよぉ
前回の講義後にケン○ッキーに行ったばかりじゃないか…
OSの授業は美味しそうなものばかり出てきますね。次はスイーツが良いなぁ。