HPE Blog, Japan
1748171 メンバー
4335 オンライン
108758 解決策
新規ポスト
shingoyamanaka

Dockerコンテナと仮想化の違いとは?SynergyとDevOps

IMG_3906.JPG

最近、Dockerコンテナと仮想化の違いは何?という質問を多くいただくようになりました。今日はこの違いについて技術面とビジネス面から説明をしてみたいと思います。

私は秋刀魚が大好きなので、安いときにスーパーで大量に買って圧力鍋で20分。こういった、汁も含んだお料理の作り置きを保存するのに便利なのがプラスチックの保存容器。これ、実は英語では、Plastic Container と呼びます。

よく、コンテナ技術を説明するときに貨物を運ぶ大きなコンテナの絵を使われる方も多いのですが、個人的にはこちらの秋刀魚を入れたPlastic Containerのほうが、出来ることを語る上ではしっくりきます。

まずは技術面からDockerコンテナと仮想化の違いをできるだけ簡単に説明してみたいと思います。

Dockerコンテナとは?という資料中にこんな絵が使われることがあります。

図1.jpg

 

仮想化との比較です。1個の物理サーバーを複数のシステムに分割して使う、という目的では、仮想化とDockerコンテナは同じ目的を達成できるのですが、Dockerコンテナは1つのOSを複数領域に区切っているだけなので、従来の仮想化と比べると軽量動作が可能で、コストも安いわけです。また、コンテナ一つ一つは単なるファイルなので、100個のコンテナの立ち上げもファイルのコピーだけで済むので、数秒で終わってしまいます。

ただ、この図がどうしても多くの誤解を生んでしまう原因なのです。

「なるほど、OSは一個なのね。そうすると、仮想化と異なり、異なるOSが動いているシステム同士は一つの物理サーバーに混在はできない、というわけだ。」

いえ、違います。WindowsとLinuxの混在は難しいですが、Linux同士であれば、異なるバージョンのOSは同一物理サーバーに混在可能なのです。むしろ、これが出来るので多くのアプリケーション開発者がコンテナを利用したがるのです。

 

はい、頭の中、パニックですよね…

実はOSを少し「分解」して考えるとわかります。

図2.jpg

 

OSは大きく分けて、「ライブラリ」と呼ばれる部分と、「カーネル」と呼ばれる部分に分けることができます。「カーネル」というのはOSの心臓部分で、ハードウェアとアプリケーションを中継ぎする役目をします。ただ、動作は非常にシンプルで、最新のカーネルを利用していれば、数年前のカーネルで動いていたアプリケーションも問題なく動作させることができます。

アプリケーションとOSの互換性の問題が起こるのは、「ライブラリ」の部分です。「ライブラリ」とは、そのアプリケーションが動作するのに必要な様々な機能を持った沢山のファイルの固まりです。図2のようにOSのバージョンが異なると、それに含まれるライブラリも別物となります。

ライブラリが異なると、アプリは全てテストしなおし、ということになるわけです。

これを踏まえて、Dockerコンテナで「異なるOSを動かす」とはどういうことかを示したのが、下記の図です。

図3.jpg

 

カーネルは最新のものを利用して共通で使いますが、ライブラリはアプリがそれぞれ必要とするものを使うことが出来るということなのです。

ここからはアプリ開発者(Dev.さん)の目線で考えて見ます。以前、Dev.さんとOps.さんのケンカの話を書かせていただきました。DockerコンテナはこのDev.さんの働き方改革に大きく役立ちます。

Dev.さんは、自分でアプリケーションを作りましたが、ある特定のOSライブラリと一緒でしか動作ができません。これまでは、このライブラリを含むOSを使わせてください、といった依頼をOps.さんにする必要がありましたが、Dockerコンテナでは、自分が作ったアプリケーションとその動作に必要なライブラリを丸ごと、コンテナに入れることが出来るのです。Ops.さんにコンテナごと渡して、これを動かして!と言えばいいのです。

図4.jpg

 これにより、Dev.さんの働き方は大きく変わります。手元のPCで開発することが出来て、本番稼動時もOps.さんの力を借りずにコンテナを配置、増設することが自由に出来るようになります。開発期限が迫っているシステムの場合、Ops.さんの作業待ちで、システム稼動が夜中にずれこんでしまったり、などということが無くなるのです。また、他のエンジニアが作成したDockerコンテナをDocker Hubからダウンロード可能ですので、似たようなアプリケーションを作成するときは開発時間を大幅に短縮することが可能です。

図5.jpg

これがしっかりと社内で実装できてくると、Dev.さんと Ops.さんの担当範囲が大きく変わり、Dev.さんのみで開発できる部分が増えてくるため、開発期間を大幅に短縮することが可能になるわけです。

 

Dockerコンテナの、仮想化との違いをご理解いただけましたでしょうか?素晴らしいソリューションではありますが、いくつか課題があります。

Dockerコンテナと一般的なサーバーのみを利用している場合、もしも物理サーバー自体が不足するパフォーマンス問題にぶつかると、物理的なサーバーの増設が必要ですので、Ops.さんに増設の依頼をすることとなります。

図6.jpg

今、弊社がイチオシしている、HPE Synergyは、この物理サーバーの増設自体もDev.さんが出来るようにしよう、と目論んだ製品なのです。特別知識のないDev.さんがマウスやキーボードの操作で、簡単に物理サーバーの増設が可能となるのです。まるでパブリッククラウドを利用しているように。

図7.jpg

HPE Synergyの具体的な機能はまた別の機会に!

 

 

 

 

 

 

 

0 感謝
作者について

shingoyamanaka

2003年よりHP BladeSystem, HP Superdomeの日本でのプロダクトマネージャーを務めた後、2012年から4年間、日本を含めたアジア地区のSuperdome X Product Managerを務める。2016年12月から、日本ヒューレット・パッカードの総合エバンジェリストに就任し、様々な製品を紹介。2017年11月より、ハイパーコンバージド製品の日本でのプロダクトマネージャー。2021年より、SDS(Software Defined Storage)製品のCategory Managerに着任。自称ハードウエアオタク。