Managed Service Column <システム運用コラム>

コンテナサービスとは

Category: 入門編

2021.02.05

はじめに

コンテナ技術、特に Docker の普及により、アプリケーションの開発からリリースまでのサイクルが短縮されているのは、皆様実感されているものと思います。

今回は、コンテナサービスの基本について、同じように仮想化の技術であるホスト型、ハイパーバイザー型と比較して解説します。

そもそも仮想化とは?

仮想化とは、1台の物理サーバーで複数のOSを動かす技術です。専用のソフトウェアで物理サーバーのリソース(CPU、メモリ、ストレージ)を複数に分割し、仮想サーバーに割り当てます。

ハードウェアを購入してシステム構築する場合、使わないリソースがハードウェアごとに発生し無駄になるケースが多いです。また、リソースが足りなくなった場合にもスケールアップ(サーバーの増強)に手間がかかり、場合によってはスケールアップできない可能性もあるでしょう。

そこで物理サーバーを仮想化し、大きなリソースプールから必要な分だけを分割して利用する形をとれば、限られたリソースを効率良く利用できるのです。

このように、仮想化技術には、1台の物理サーバーに複数サーバーを集約するためハードウェアコストを下げられるという、大きなメリットがあります。

2種類の仮想化

仮想化にはホスト型とハイパーバイザー型があります。

ホスト型

ホスト型は、OSにベースとなる仮想化ソフトウェアを導入し、そこで仮想マシンを稼働させる方式です。ハードウェア上にOSを展開し、その上に仮想環境を構築します。

ホスト型
ホスト型

ハードウェア上に展開するOSをホストOS、仮想ソフトウェア上で稼働するOSをゲストOSと呼びます。つまり、本来のソフトウェア上に重ねて仮想ホストを展開し、OSを利用できるようにしたものがホスト型です。
ホスト型はおもに、PCで仮想化を利用する場合によく利用されます。

この方式のメリットは手軽さです。すでに利用しているサーバーやPCに仮想化ソフトウェアをインストールするだけで仮想環境を構築することができます。特に、検証環境など何パターンも環境が必要な場合や、すぐにクリーンな開発環境を用意したい場合には重宝するでしょう。

ただし、ゲストOSがハードウェアにアクセスするにはホストOSを経由する必要があるため、余計な処理時間、処理負荷がかかります。

ハイパーバイザー型

ハイパーバイザー型は、物理サーバーへ仮想化ソフトウェアであるハイパーバイザーをインストールして仮想マシンを稼働させるもので、企業で仮想化を行う場合、現在最も一般的な方式です。

ハイパーバイザー型
ハイパーバイザー型

ホストOSが不要なため、ハイパーバイザーがハードウェアを直接制御でき、処理速度の低下を最小限に抑えられます。また、複数の仮想マシンをリソースの無駄なく効率的に動かせるのも強みといえるでしょう。アプリケーションサーバー、Webサーバー、DBサーバーをセットで同じ物理環境に載せ、1つの物理サーバーでシステムを完結させることも可能です。

一方で、ハイパーバイザー型はハイパーバイザーが動作可能な専用の物理サーバーを用意しなければなりません。
システムの質や数によって、物理サーバーに必要なスペックは変わってくるため、最初に物理サーバーを選ぶときは特に慎重になる必要があります。

コンテナサービスとは?

コンテナサービスとは、下図のようにホストとなるコンピュータのOSに、仮想的なユーザ空間(コンテナ)を構築するシステムです。

ハイパーバイザー型
ハイパーバイザー型

ホストOSにコンテナエンジンと呼ばれる仮想化ソフトウェアをインストールし、その上にコンテナを置くことで、複数のアプリケーションを同じOS上で動かします。コンテナの中で各ユーザのアプリケーションが独立して動作するため、仮想サーバーというよりは、隔離された別々のアプリケーション実行環境というほうがイメージは近いでしょう。

また、コンテナはカーネルと呼ばれるOSの中核部分を利用して動作しているため、ゲストOSを持ちません。その分ハイパーバイザー型よりオーバーヘッドが少なく、軽く速い処理が行えます。

代表的なコンテナエンジンの一つにDockerがあります。Dockerは、コンテナを管理するDockerサーバー、操作用のツール、レジストリによって動きます。Dockerサーバーにレジストリから機能を導入することで、必要な機能を動かせる仕組みです。

コンテナサービスと仮想化の比較

コンテナサービスや仮想化は、1つのサーバーやPC上で複数のOSやアプリケーションを動かすシステムです。一見すると同じようなものですが、それぞれ異なる点があります。

コンテナサービス

ゲストOSがない分サーバー起動時の度にOSを立ち上げずに済むため、メモリなどのリソース消費量が少ないことや、サーバーの起動・再起動が高速に行えることがメリットです。
サーバー起動時にゲストOSまで立ち上げる必要があるハイパーバイザー型と比べ、起動速度ではコンテナ型が勝ります。

また、コンテナは全体的な処理速度も比較的高速です。これはハードウェアからのアクセスをホストOSが直接処理しているためで、各ゲストOSからのアクセスを処理しているハイパーバイザー型よりも速い処理ができます。
システムの性質上、必要になった時に必要なだけその場で起動させるような設計のシステムや、Webベースのサイトで画面レスポンスが重視される場合などはコンテナで動かすほうが向いているかもしれません。

ハイパーバイザー型

各仮想マシンのゲストOSを自由に選べることが、ハイパーバイザー型の強みです。コンテナサービスは共通のホストOSを利用するため、要求するOSの種類が異なるアプリケーションは、同じ基盤に乗せることができません。コンテナサービスのOSはほとんどがLinuxのため、サーバー運用をWindowsで行いたい場合には、ハイパーバイザー型を採用しましょう。

また、ハイパーバイザー型はカスタマイズが柔軟に行えることもメリットです。ハイパーバイザー上で稼働する仮想マシンには個別でハードウェアのリソースが割り当てられ、別個のOSを持ちます。個別の物理マシン上で動いているかのように振舞うため、基盤やOSを起因とする制約を受けずに済みます。

コンテナサービスのメリット・デメリット

コンテナサービスはメリットとデメリットを整理しましょう。両者は表裏一体となっています。メリットを最大限に享受できる構成をとりつつ、デメリットへの対策を検討しておきましょう。

メリット

コンテナエンジンさえあればどこでも起動できるのがコンテナ最大のメリットです。
テスト環境で動いたものをそのまま本番環境にもっていくことができるため、環境要因によるトラブルを減らすことができ、開発コストだけでなく運用コストも下げることができます。

また、コンテナイメージをもとにして環境を展開し、開発が進められるので、アプリケーション開発に必要な環境構築などの下準備の部分を繰り返す必要がなく、効率良く開発を進められます。
ゲストOSが不要な分、ハイパーバイザー型と比較してより少ないリソースと時間で仮想環境を構築できるのは大きな魅力でしょう。

デメリット

デメリットとして挙げられるのが、異なるOSを同一基盤上で動かせないことです。コンテナ環境のホストOSは1つしかないので当然ですが、別OSで稼働するアプリケーションを同じコンテナエンジン上に乗せることはできません。

また、コンテナエンジンをインストールしている基盤自体は共有しているため、カーネルなどの変更を個別にすることもできません。

コンテナサービス自体が比較的新しい技術のため、ノウハウを持った技術者がそれほど多くないことも課題です。そのため、既存の技術とは異なり、導入・運用のための学習コストがかかってしまいます。
コンテナでトラブルが発生した場合の原因分析など、ある程度経験や知識がないと対応が難しい部分もあります。特に大規模な展開を行うには管理ツールを充実させたり、ノウハウを持った技術者を担当者にしたりと相応の体制づくりが求められるでしょう。

おわりに

1台のホストで複数の環境を動かす仮想サーバーやコンテナサービスは、現在のネットサービスの提供や開発において欠かせません。

今回ご紹介したコンテナサービスと仮想化の違いや、コンテナサービスのメリットやデメリットを理解したうえで、自社にマッチするスムーズなシステム構築・運用を目指しましょう。

Tag: コンテナ

関連記事

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php