コンテナと仮想化の違い

コンテナと仮想化の違いについて解説します。

コンテナと仮想化の違い

仮想化はハイパーバイザーによって立ち上げられるハードウェア環境で、仮想環境にゲストOSやアプリケーションのインストールを行い、ホストOSとは独立した実行環境を構築します。一方でコンテナはホストOSのマシンリソースをコンテナ専用に隔離・制限したプロセスであり、コンテナ上でアプリケーションを実行する際に、物理マシンから確保したリソースのプロセスの属性を変更させることで、独立した実行環境を構築します。

ハードウェアからリソースを確保するという点において仮想化とコンテナは共通点をもちますが、プロセスの共有と管理の面で仮想化とコンテナには違いがあります。仮想化の場合は仮想的なハードウェア単位でリソースの隔離が行われます。そのため仮想環境上で動作するアプリケーションは、ホストOSや他の仮想マシンプロセスとは独立した存在として動き、プロセス管理も仮想環境上のゲストOSによって行われます。一方でコンテナはホストOSのプロセスの一つとして扱われるため、ホストOSとプロセスが共有されています。そのためホストOS上でローカル環境のポート番号の割り当てを行い、それ絵に対して別プロセスからアクセスを行うこともできます。

fコンテナと仮想化の違い

コンテナの利用が推奨されるケース

チーム共通の開発環境の整備

チーム開発の現場では、メンバー間でデバイスのスペックやインストールされたソフトウェアに差分が生じることで、開発中のアプリケーションが動作しなくなる問題が頻発します。仮想化技術ではこのような差分のある環境に対して、イメージと呼ばれる単位で環境に必要なソフトウェア一式のパッケージ化を行います。

仮想化ではそのイメージサイズが数GBにも及ぶ一方、コンテナではyaml形式で環境の内容を記述して、コンテナのビルド時に関連するイメージをローカル環境へとインストールします。そのためyamlファイルによる環境の再配布は仮想化のダウンロードに比べて遥かに簡易となり、チーム開発の現場ではコンテナを採用することが推奨されます。

アプリケーションの継続的デプロイ

仮想化はマシンリソースの効率化という面で、システム運用の側面に多大な貢献をしました。しかしながら、仮想化ではイメージサイズが大きくなることによって、サービス起動までの時間が長くなる他、イメージの再配布が数GBに及ぶことでポータビリティに欠けるなど、サービスのデプロイにおいて課題を残したままでした。

それに対してコンテナは、ゲストOSのインストールが不要ということもあり、軽量に再配布可能かつ、起動までの時間も仮想化に比べて短縮化することに成功します。システム運用の現場では、企業によって1日単位で複数回のサービスのデプロイが行われることも十分にあり得ます。デプロイ回数の増加をはじめとして、開発者からの広範囲な要望にシステム運用担当者が対応していく上でもコンテナ技術は欠かせない存在になりつつあります。

単一から複数個に限られたアプリケーションの利用

コンテナではイメージの単位がOSから単一のソフトウェアまで様々です。仮想化においてはイメージの最小単位がOSとなりますが、コンテナにおいてはMySQLやWordpressなどのアプリケーション単位でのインストールと立ち上げを行うことができます。インターネット上のレジストリというサービス経由で、コンテナのイメージは様々なバージョン、種類のものが配布されています。スピード重視で開発を進めていきたい時など、コンテナは環境構築をスムーズに進める上でも多大なメリットを持ちます。

仮想化の利用が推奨されるケース

独立したシステム運用

前述したようにコンテナはホストOSのプロセスの一部として動作するため、ホストOS上の他のプロセスへの影響を考慮する必要があります。システム運用ではセキュリティ面等を考慮して、ホストOSとは完全に切り離した運用を行いたいケースも存在します。コンテナでは技術的な仕組み上、ホストOSと強い依存関係を持ちますので、システム間で独立した運用においては、仮想化を採用することが推奨されます。

GUIアプリケーションの実行

金融やインフラなど領域によっては、GUI操作が伴うアプリケーションを24時間常に稼働させておきたいケースがあります。このような場合、デスクトップ画面を仮想環境上で準備するのにコンテナでは対応することができないため、仮想化でゲストOSを立ち上げ、その中でデスクトップ環境を構築する必要があります。

Mac上でWindowsのデスクトップアプリケーションを使いたい時についても同様で、Mac上で仮想環境を立ち上げその中にWindowsのデスクトップ環境をインストールした上で、アプリケーションの実行を行う必要があります。

まとめ

仮想化が抱えていたデプロイの効率化という点でコンテナは大きなパラダイムシフトとなりました。クラウドサービスにおいても最近ではコンテナを使うことを前提としたサービスがスタンダードになりつつあります。クラウド時代の流れからもシステム運用担当者には、コンテナに関する理解を深め、効率的かつ柔軟なシステム運用を設計することが求められています。