前回までは、これまでのITシステムの変遷を大まかに追ってきた。今回はいよいよ現在進行中のコンテナの概要に入っていく。

「コンテナとはいったい何なのか?」という問いに対して、簡潔に回答すると「コンテナとは仮想化技術の一種」と言える。

そのため、コンテナに触れる前に「仮想化技術」そのものについて知っておくことで、コンテナへの入門のハードルを下げることができる。仮想化技術に慣れていない人のために、まずは「そもそも仮想化とは何なのか?」について簡単に触れておきたい。

サーバ仮想化とは?

「仮想化技術」は、何かを仮想的に再現する技術である。中でも、仮想化するレイヤーによって仮想化技術の名称が異なっている。ここではコンテナ仮想化の話に入る前段として、「サーバ仮想化」を取り上げる。

サーバ仮想化とは、物理的なサーバ上に仮想的なハードウェアをエミュレートし、それを使って別のサーバ(=仮想マシン)を稼働させることである。サーバ仮想化の手法はいくつかあるが、わかりやすくシステム運用で広く取り入れられている「ハイパーバイザー型仮想化」の構成イメージを以下に図示する。

「ハイパーバイザー型仮想化」は、ハードウェアの上に「ハイパーバイザー」と呼称される仮想化ソフトウェアをインストールし、ハイパーバイザーの上に複数台の「仮想マシン」を構築し、仮想マシンの中にOSをインストールしていく。この仮想マシンの中にインストールしたOSを「ゲストOS」という。

実際のハードウェアは1台だが、稼働している仮想マシンは複数台となっている。限られた物理的な資源に対し、それ以上の数の仮想マシンの稼働を実現できるのはサーバ仮想化の大きなメリットだ。

このようなサーバ仮想化においては「ハードウェア、OSすべてが仮想化の対象」となっている。これは従来のサーバ仮想化の特徴であると同時に、コンテナ型仮想化の概要を学んでいく上で重要なポイントだ。

コンテナ型仮想化とは?

それでは、コンテナの概要について具体的に触れていこう。

コンテナとは、サーバのプロセスやリソースを区画化した空間である。コンテナを稼働させる場所となるサーバを「ホスト」と呼び、ホスト上に区画化された空間を実現することやその方法が「コンテナ型仮想化」「コンテナ技術」である。

「プロセスやリソース」と一言で言ってしまうと抽象的だが、アプリケーションそのものや動作に必要となるライブラリ、その他にも依存するあらゆるものが対象となる。コンテナはアプリケーションを「稼働が保証された実行環境ごと」まとめていると言える。

これにより「自分の環境ではアプリケーションが動いたが、他の人の環境では動かなかった」という、アプリケーション開発の現場でよくある問題を回避することが可能となっている。

ここでさらに、コンテナ型仮想化のポイントとなる点をいくつか挙げる。

  • コンテナの起動には「仮想マシンおよびゲストOSの起動/停止」といった工程が不要である。

  • ホストのOSに常駐する「コンテナエンジン」と呼ばれるプロセスがコンテナへの操作・管理を行う形式が一般的である。これは従来のサーバ仮想化でいう「ハイパーバイザー」の立ち位置に近いと言える。

  • 基本的に、仮想化された各コンテナはコンテナエンジンが稼働するホストOSのカーネル(※1)を共有して稼働している。

  • ホストOSと異なるOSのコンテナは原則として稼働させることはできない。

  • 1つの機能を実現するためのプロセスを「プロセス群」として扱うことができ、コンテナ間でお互いのプロセスは不可視となる。(※2)

※1 カーネルは、OSの本体とも言えるソフトウェアである。CPUやメモリをどのプロセスにどう割り当てるかといったリソース管理、アプリケーションの起動や終了、デバイスとの通信などの多くの処理を行っている。
カーネルという言葉をあまり聞いたことがない人も、「OSの中で最も核となる部分」だということを押さえておいていただきたい。

※2 コンテナ同士ではプロセスを確認できない状態を実現できるが、ホストからは確認が可能である。

では、これらのポイントを踏まえた上で、先ほどのハイパーバイザー型仮想化とコンテナ型仮想化を図で比較してみよう。

あらためて図にすることで、コンテナ型仮想化のイメージをなんとなくつかんでいただけたと思う。

ハードウェアを仮想化したものである「仮想マシン」がカーネルを共有した「コンテナ」に変わっている。カーネルが共有化されることでOSの起動は不要となり、仮想環境を構成するスタックが少なくなっている。これにより、アプリケーションを動かすまでの時間に大きな差が出てくることになる。

ここまで、従来の仮想化技術との比較も交えながら、コンテナ型仮想化技術の概要を説明してきた。このコンテナ型仮想化技術は、昨今のIT業界では急速な広まりを見せ必要不可欠な技術となりつつある。

さて、なぜコンテナ型仮想化技術は注目を集めているのだろうか? その理由を理解するには、まずコンテナの一般的な特徴と、この特徴によって、システム開発にどのような変化がもたらされるのかを把握することが重要だ。これらについては、次回以降解説していく。

著者プロフィール

町田哲朗


2011年TIS入社。

小規模なシステムの保守・開発・運用の一貫から大規模なアプリケーション開発まで、金融系を中心に様々なSI案件に従事。

現在はDocker、Kubernetes等のクラウドネイティブ関連の技術を中心に扱うチームに所属。