見出し画像

【Linux】仮想化技術とコンテナ技術の違い_Dockerが重いという誤解

技術系記事7
仮想化技術とコンテナ技術の違い

仮想化技術(KVM)

KVM ハイパーバイザー 仮想マシン ホストOS ゲストOSという用語を抑えておくと理解しやすいと思います

仮想化技術とは何でしょうか?LinuxにはKVMという仮想化技術が組み込まれています。(Xenという仮想化技術もある。)
KVM(仮想化技術)とはハイパーバイザーと呼ばれる仮想化管理機構の上で仮想マシンを稼働させることです。
仮想マシン上のOSをゲストOSと呼びます。ゲストOSにとっては、仮想マシンは物理的なマシン、サーバーに見えます。
ゲストOSと対比して、物理的なハードウェア上の直接的なOSをホストOSといいます。
ハイパーバイザーはホストOS上で行われます。
整理すると、
物理的なハードウェア上のホストOSによって、ハイパーバイザーが行れる。ハイパーバイザーの上で仮想マシンが稼働する。
仮想マシンのOSはホストOSとは別のOS、ゲストOSである。
これがKVM(仮想化技術)です。

仮想化のメリット
仮想化のメリットは、複数の仮想マシンを1台の物理的なサーバーに統合することができ、柔軟にリソースを管理できることです。
管理コストの削減にもなります。

仮想化のデメリット
仮想化のデメリットはハードウェア上の直接的なOSと比べてパフォーマンスが落ちます。後述するコンテナ技術と比較される点です。
パフォーマンス改善のため最近のCPUは仮想化技術支援機能が備わっています。
仮想化技術支援機能を備わっているCPU

代表的なCPU
Intel   VT-x
AMD  AMD-V

コンテナ技術

コンテナ技術で最も普及しているのがDocker

Docker
ホストOS上で行われるコンテナ管理ソフトウェア

仮想化技術との違い
仮想化技術が仮想マシンを動かす技術だが、
Dockerは独立した環境でアプリケーションを動かす技術
ホストOS上でコンテナ管理ソフトウェアが動いている。
ホストOS
上で行われるので、ホストOSとカーネルを共有する
よって、仮想化技術よりリソースが少なくパフォーマンスに優れています。

Docker上で異なるosができるんだけど?

DockerホストのosがUbuntuとします。そして、Dockerホストの上でAlpine Linuxコンテナを起動するとします。
DockerのLinuxイメージはディストリビューションであり、Linux本体ではありません。
Alpineコンテナが動いているように見えるが、コンテナの中にAlpineを構成するファイル群が含まれているにすぎません。Linuxカーネルはその下にあるUbuntsのものが使われます。
コンテナの中にカーネルはない。

Dockerは重いという誤解

Docker使うと重い!という声があります。実際、私の環境でも重いと感じました。
原因はDockerを使うためにLinuxなので、
ローカルの環境で仮想化技術とコンテナ技術を両方使っているからです。
Dockerを使うためには、Linuxが必須です。
ローカルのOSがLinuxでない場合、仮想化技術を使って、仮想マシンを稼働させ、ゲストOSとしてLinuxを使います。
そして、ゲストOS上のLinuxを使って、Dockerを使うわけです。
つまり、Dockerが原因ではなく、ローカルの環境で仮想化技術とコンテナ技術を両方使っているため、重く感じるのです。

整理してみる

Macのローカル環境でDockerを使う。
ローカル環境下で仮想化技術を使い、ハイパーバイザー上でゲストマシンを起動する。ゲストマシンにLinuxをインストールする。
インストールされたLinuxはゲストOSとして起動し、ホストOSとは別のOSであり、カーネルは共有しない
ローカル環境で立ち上げたDockerでAlpineコンテナを起動する
Alpineコンテナのイメージは、Linuxのディストリビューションファイルに過ぎない。Alpineが起動しているように見えても、DockerホストのOSのカーネルが使われます。ホストOSがUbuntuなら、Ubuntuのカーネルが使われます。
Alpineコンテナ

Dockerホスト(Ubuntu)*ローカル環境ではゲストOS

仮想マシン  *ゲストOSからは物理的なマシンに見える

ハイパーバイザー *仮想化管理機構

ホストOS

物理的なマシン

おまけ:ハイパーバイザーと管理マシンを操作するvirshコマンド

この記事を参考にして下さい

参考文献

Ping_T
Linux教科書 LinuCレベル1 Version 10.0対応
さわって学ぶクラウドインフラ docker基礎からのコンテナ構築

 最後に
私がブログを書く目的は、素晴らしい本や、素晴らしい方々の技術記事を知って頂きたいからです。ぜひ、上記の参考文献を見て下さい。(noteなので広告とかは一切ありません。)

現在、株式会社grabssに行くために最後の悪あがきをしています!!
現在の進行状況
この記事は7件目の投稿。目標まで後45件。

よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。



この記事が気に入ったらサポートをしてみませんか?