コンピュータの仮想化技術には様々なものがありますが、その中でDockerは「コンテナ型仮想化」に分類されます。
一般的に仮想化と言うと、VMwareやVirtualBOXが思い浮かぶと思いますが、これらは「ホスト型仮想化」と呼ばれています。
本記事では、他の仮想化技術と比較しながらDockerの概要を解説しております。
Dockerの構成概要
「コンテナ型仮想化」と「ホスト型仮想化」の違いを明確にするために、双方を図で表してみました。
図内のホスト型仮想化ソフトウエアと仮想H/Wの部分は、VMwareやVirtualBOXなどに相当します。
コンテナ型仮想化ソフトウエアと仮想H/Wの部分が、Dockerの担当部分になります。
ホスト型仮想化は、個々の仮想環境単位に仮想H/Wとkernelが存在していますが、コンテナ型仮想化では、仮想環境が使用するkernelはホスト用kernelを共用することになります。
ここが2つの仮想化技術の大きくことなるポイントになります。
ホスト型仮想化は、1台の物理コンピュータ上に、仮想化ソフトウエアがサポートする様々なkernel環境を作成することが可能ですが、コンテナ型仮想化は1つのkernelしか使用することが出来ないことになります。
しかし個々の仮想環境内にKernelが存在しないということは、オーバーヘッドを減らすことになるため、1台のコンピュータ上に1つのkernelで要件を満足するのであれば、コンテナ型仮想化技術はすばらしいパフォーマンスを発揮することになります。
2つの仮想化技術の比較
以下に、ホスト型仮想化とコンテナ型仮想化の比較表を示します。
項目 | ホスト型 | コンテナ型 |
---|---|---|
仮想バリエーション | Intel系CPUで稼働する ほとんどのOS | Linux、Windows |
オーバーヘッド | 大きめ | 小さい |
消費リソース量 | 多い | とても少ない |
仮想環境の独立性 | 高い | 仮想環境ごとの独立性は高いが、 Kernel動作不良の影響が全コンテ ナに及ぶ |
各項目について解説していきます。
仮想バリエーション
1社の業務システム内に様々な種類のOSやそのバージョンが乱立する構成というのは、運用管理的に煩雑ですので、通常は2~3種類で、バージョンは各種類ごとに同一バージョンという構成が多いと思います。
Linuxだけで見てみた場合、大抵は1つのディストリビューションを選択しているでしょう。
よって、1つの物理コンピュータ上に1つのkernelのみという制約は、特に大きな問題にならないと考えます。
オーバーヘッド
これについては、オーバーヘッドとシステム要件とのトレードオフだと思います。
ホスト型仮想化でなければシステム要件を満たさない場合は、オーバーヘッドは仕方がありません。
しかし、コンテナ型仮想化でシステム要件を満たすのに、ホスト型仮想化でオーバーヘッド分の無駄遣いをしているのは問題でしょう。
消費リソース量
ホスト型仮想化の場合、各OS共にバージョンが上がっていくに従ってハードディスクやメモリの推奨容量も増加してます。
それに伴って、仮想環境のkernel部分のリソース消費量も仮想環境数分増えていくことになります。
比較的容量単価の低いハードディスクはそれほど問題ないという考え方もあるかと思いますが、メモリはつらいものがあると思います。
コンテナ型仮想化の場合は、kernel部分のリソース消費量が増えたとしても、ホスト型仮想化に比べて影響は少ないです。
他仮想環境への影響
ホスト型仮想化の場合は、仮想環境同士は個々のOSレベルで隔離されてますので、基本的に他への影響は少ないでしょう。
しかし、コンテナ型仮想化の場合はkernelは共有されてますので、あるコンテナがkernelに影響を及ぼした場合、他のコンテナが影響を被ることはあると思います。
他のコンテナへの影響が問題になる場合は、コンテナ型仮想化であるDocker環境は、ホスト型仮想化された仮想コンピュータ上にも作成可能ですので、オーバーヘッドを考慮しつつ、Docker環境をホスト型仮想環境で分割することを検討しても良いかもしれません。
まとめ
Dockerは、上記のような特徴をもつコンテナ型仮想化ソフトウエアです。
結局のところシステム要件次第だと思われますが、もし要件に合うようでしたら検証されてみてはいかがでしょうか。
最後までお読みいただきありがとうございました。
コメント