「SAVACAN」担当のMKです。
今回のブログでは各所で導入が進んでいるコンテナ技術と、それ以前に普及しているOS仮想化技術(以下、仮想化)について比較したいと思います。コンテナも出てきた当初(今も)は習得に時間がかかると言われたり、テスト用の開発環境でしか使い道がないと言われたりしましたがすっかり一般化した印象です。
本ブログは、既に仮想化については理解、導入済みでコンテナと比較してみたい方に向けた内容となっております。
それではさっそく比べてみましょう!
仮想化概要と代表的なサービス
・特徴
サーバーそのものを仮想化させる技術です。
CPUやメモリ、HDDも仮想マシンごとに割り当てますので1つのOSとして扱うことができます。
仮想化を実装する場合、ホストOSへインストールする形で利用するホスト型と、物理サーバーに仮想化ソフトをインストールして稼働させるハイパーバイザー型があります。
本運用では通常、仮想マシンの速度低下を抑えることができるハイパーバイザー型を使います。
ホスト型は、主に検証や学習用途で利用されます。
・ホスト型の仮想化ソフトウェア
VMware Workstation
VMware社が提供しているホスト型の仮想化ソフトウェアです。
WindowsやLinuxOSへインストールする事で簡単に仮想化環境を構築できます。
VirtualBox
Oracleが提供しているオープンソースの仮想化ソフトウェアです。
・ハイパーバイザー型の仮想化ソフトウェア
VMware ESXi
VMware社のエンタープライズ向けハイパーバイザー仮想化ソフトです。
Linux KVM
Linux Kernelに組み込まれた仮想化モジュールです。Linuxをハイパーバイザーとして機能させる事が出来ます。
AWSの比較的新しい仮想化基盤はKVMベースで構築されていると言われています。
Microsoft Hyper-V
Microsoftの仮想化ソフトです。Xenをベースに開発されています。
Xen
Citrix社の仮想化ソフトです。AWSの古いインスタンス環境はXenベースで運用していたようです。
コンテナ概要と代表的なサービス
・特徴
コンテナとはアプリケーションおよび実行に必要な環境だけを仮想化する技術です。
仮想化がOSそのものを仮想化させるのに対して、コンテナはOS上のアプリケーションだけ仮想化させるため、OSのデバイス制御や起動/停止フローが不要となり、処理速度が早く効率的とされています。
・代表的なサービス
Docker
コンテナ化を簡易化するためのツールセット及びプラットフォームを指します。現在はOCI準拠にて実装されています。
コンテナといえばDockerをイメージするほどデファクトスタンダート化しました。
Dockerほど情報が豊富でユーザーが多いコンテナが見当たりません。
・コンテナ管理ツール
Podman
Redhatが提供するオーケストレーションツール(複数のコンテナを効率的に管理するツール)です。
OCI準拠のコンテナに対応します。
Amazon ECS
AWSが運用するDockerコンテナのオーケストレーションサービスです。Dockerコンテナのデプロイ、管理、スケーリングを行うために提供されます。
Kubernetes
Googleが開発したコンテナオーケストレーションツールです。オープンソースで公開されました。
OCI準拠のコンテナに対応します。
スケールイン・スケールアウトも自動で実施することができます。
仮想化するリソースの違い
仮想化はOSそのものを仮想化させます。
コンテナはアプリケーションの実行に必要な環境(ミドルウェア+ライブラリ+アプリケーション)のみ仮想化します。
仮想化、コンテナそれぞれのメリット・デメリット
仮想化のメリット・デメリット
メリット | デメリット |
---|---|
1台の物理サーバー上で異なるOSの仮想マシンを運用できる 仮想マシン単位で性能の上限を決めて運用できる 1台の仮想マシンの負荷が他の仮想マシンに影響しない 従来のOS単位でのマシン管理がそのまま活用できる | 開発者毎の環境用意が高コスト コンテナと比較するとオーバーヘッドが大きい コンテナに比べ初回の環境構築に時間がかかる |
コンテナのメリット・デメリット
メリット | デメリット |
---|---|
アプリケーション環境を短時間で構築可能 OSを共有するためリソース効率が良く処理速度が早い 開発環境から本番環境への移行など異なる環境への移植が容易 自動化に適しており、従来より柔軟な環境をローコストに運用できる | OSを共有するためコンテナへの攻撃で物理ホスト全体に影響が出る可能性がある OSを共有するためコンテナはホストOSのkernelに対応したイメージしか実行できない データ永続化やネットワーキング制御が従来と異なり管理が複雑 |
どちらがおすすめか
弊社の運用環境ではシステム構造と堅牢性の面から、OS仮想化環境を主に基盤を構築しています。一時的な用途や技術検証であったり、パブリッククラウドと連携する場合にクラウド環境をコンテナで実装する場合もあります。
ここまでコンテナと仮想化を比較してきましたが、コンテナと仮想化には異なった特製があり、実のところ相互補完の関係にあります。マイクロサービス化されたサービス群をスケーリングしながら運用する場合にはコンテナが適しており、特定のOSが必要な場合や堅牢な環境で実行すべき場合には仮想化が適しています。