COLUMN

コンテナ仮想化とは。誤解の多いコンテナに対する正しい理解

今回は、コンテナ仮想化についてお話したいと思います。
昨今、普及してそれなりに時間が経った印象のあるコンテナ仮想化ですが、あらためて基本に立ち返り、コンテナ仮想化の設計思想や基本概念について書いていきたいと思います。

1. コンテナ仮想化の設計思想はシンプル

  • 物流のコンテナのイメージがコンテナ仮想化に対する正しい理解を阻む
  • dockerコンテナの仕様をコンテナ仮想化の全体像であると誤解する

最初に注意点からお話します。巷でコンテナ仮想化の特徴としてあげられている特徴の半分くらいはdockerコンテナ(以下、docker)の仕様です。気をつけて頂きたいのは、それらはあくまでもdockerの仕様であってコンテナ仮想化の特徴や仕様・機能ではないという点です。dockerの特徴をコンテナ仮想化として捉えてしまうと別のコンテナ仮想化技術を採用した際に想定外の動作や仕様に苦労することとなりますので注意が必要です。

2. コンテナ仮想化の本質

コンテナ仮想化の本質と目的は一体何なのでしょうか。コンテナ仮想化の本質を一言で表現すると隔離環境(サンドボックス・JAIL環境)の提供にあります。これがすべてと言っても過言ではありません。

[サンドボックスは砂場?JAILは監獄?では、コンテナってなに?]

隔離環境を提供する。これがコンテナ型仮想化の当初からの開発目的であり、コンテナ仮想化の本質です。コンテナと言うと物流で使われることから、データ移行やプログラムの動作環境一式の移動(移植)が簡単なのではないか?と言う印象を持ってしまいますが、これらの特徴は 先の繰り返しになりますが、IaC (インフラのコード化)の設計思想を取り入れたdockerの特徴であり、コンテナ仮想化とは異なる設計思想であることにご留意下さい。(※実際、他のコンテナ仮想化技術では単にサンドボックスの提供にとどまるものも多くあります)

3. 携帯電話とPHSの関係に似ている

一般的な仮想化(仮想マシン)とコンテナ仮想化は開発当初からその利用目的も開発意図もまったく異なっており、それぞれのルーツも異なります。それは、自動車の車載電話をルーツに持つ携帯電話とコードレス電話をベースに発展したPHS(2023年3月31日に日本国内法人向けサービスが終了)が、それぞれ似たような機能を提供しつつ、互いに異なった別のシステム・サービスであることとよく似ています。

コンテナ型仮想化のルーツは古く、1982年 Unixに導入されたchroot (チェンジルート = ユーザーごとにルートディレクトリを変更する機能) まで遡ります。このchrootによってシステム管理者は、他のユーザー(正規ユーザー・意図しない悪意のある侵入者)からのシステムの重要部分へのアクセスを防ぎ、ユーザーの利用環境やプログラム実行環境をOSから分離することができるようになりました。また、ディレクトリツリーを複数用意することで、一つのOS内部で設定ファイルやライブラリ、アプリケーションなど複数の組み合わせを実現することができるようになりました。ただ、chrootはまだ完全なものではなく、あくまでディレクトリ移動を制限すると言うコンテナ仮想化のうちの一部の限定的な機能を提供するものでした。

その後、chrootはFreeBSDでJailとして発展していきます。Jailではディレクトリのみならず、プロセスの隔離機能も実装されました。Jailで起動したプロセスは、ホストOSのプロセスや別のJail内のプロセスやファイルへアクセスすることができません。chroot jailの基本思想がより洗練されていくこととなります。

※Jail(ジェイル)とは監獄・留置所などを意味する英単語で、その枠内に利用者やプログラムを閉じ込めてしまうと言った意味合いです。コンテナやサンドボックス(砂場)もおおむね同じような意味合いで使われています。

 [chrootのイメージ]

FreeBSDのJailがISPなどを中心に普及したのち、Solaris Container (Solaris Zone)、OpenVZ、LXC (Linux Container)、docker、podman とchroot jail(チェンジルート・ジェイル)の発展形がリリースされ、コンテナ型仮想化は広がっていきます。ユーザーと実行権限、プロセス管理、メモリ、ネットワークなど複数のリソースをこのサンドボックスと組み合わせて高度に分離・分割・管理・並行運用できる方向へより高度化していきます。結果として、意図せず高度化された隔離空間はあたかも一つのOSかのようにみなすことができるくらいまでに発展しました。これがコンテナ仮想化の歴史です。

一方で一般的な仮想化されたバーチャルマシン(VM・仮想マシン)は、サポートが終了した古いハードウェア向けのソフトウェア(OSやアプリ)、他のアーキテクチャ向けに開発されたソフトウェア(OSやアプリ)を手元のコンピューターで利用するために、開発されてきました。

例えば、「MacOSでWindowsのアプリを少しだけ使いたい」、「MS-DOSで開発したアプリケーションを工場内で使い続けているがMS-DOS対応パソコンの入手が難しくなった」などでお困りの場合に、仮想マシンに古いOSや別のアーキテクチャ向けのOS、それらの上で動作するアプリケーションソフトをインストールするなどして利用されてきました。ただ、これらの一般的なハードウェア仮想化はCPU命令の翻訳などハードウェアのエミュレーション、H/Wリソース分割に伴う物理ハードの管理などのオーバーヘッド(翻訳・管理コスト)により実機で動作させるより動作速度がかなり遅く、業務などで日常的に利用するには厳しいなどの課題もありました。

その後、VMware ESX / Citrix Xenなどの仮想化特化のハイパーバイザーやIntel-VT (vtd/vtx)、AMD-Vなどの仮想化技術対応ハードウェアの登場により、安価なパソコンやサーバーで仮想マシンを実用上で十分過ぎるほど快適な速度で動作させられるようになりました。サーバーOSを仮想化し、仮想基盤上でv-motion(仮想基盤で故障が発生した際、仮想マシンを他の仮想基盤へ動作させながら移動するライブマイグレーション技術:vmware用語)などを利用してシステムを無停止運用させるなど仮想化が特殊なことではなくなり、仮想化でさらに可用性が向上する時代に入りました。そしてその延長として仮想マシンを共同利用するawsやMicrosoft Azureなどパブリッククラウド全盛の時代を迎えます。

コンテナ型仮想化の隔離環境が発展し続けた結果として意図せず仮想OS化・仮想マシン化してしまったのに対し、一般的な仮想化による仮想マシンは最初からこれを意図して開発されてきました。

[ハードウェアの仮想化事例:Windowsに搭載されている仮想キーボード]

[様々なハードウェア・レイヤーの仮想化 → エミュレータ・仮想マシン・仮想キーボード・仮想パソコン(VDI)・VLANなど]

4. サンドボックスの利用用途

JAIL(コンテナ・サンドボックス)環境の提供はどんなメリットをもたらすのでしょうか。先でも述べましたが、ユーザー環境を複数作成し、ユーザーにその枠内で自由にコンピューターを利用する権限を与え、権限外の環境(OSや他のユーザ使用領域)に影響を及ぼさない枠組み(境界線)を提供することでシステムの可用性・利便性・安定性を向上させることができます。

ユーザーはその隔離された環境内でスーパーユーザ、パワーユーザなどの権限を持ってライブラリを更新したり、アプリケーションを動作させたり、自由にコンピューターを利用しつつも、万が一の操作ミスなどで他のユーザーが利用している共用部分(プログラムやデータ・プロセス・メモリ領域)を停止・消去する・誤作動させると言った事故からは守られることとなりました。また悪意を持って他のユーザーのファイルを盗み見る、消去する、改ざんするなどを防止することが可能となりました。

サンドボックスは利用者だけでなくプログラムも利用しますので、プログラムのバグによる誤動作やマルウェアへの感染、悪意のあるハッカーによるroot権限の奪取と言った際も被害はサンドボックス(コンテナ)内のみで済むことが多く、システムの安全性や安定性も向上します。

※時にハッカーはこのサンドボックスを抜け出して、他のサンドボックスや共用のシステム部まで侵入されてしまうこともあります。ですが、こういった何重もの防御態勢を敷くことでセキュリティーは確実に向上していきます。また、常に仕様の不備や脆弱性は指摘され修正されていきますので、最新版や後発のリリースほど安定性や安全性は向上していきます。

JAIL環境のもう一つの使い方としてライブラリやパッケージの依存関係などから一台のサーバーで共存できないソフトウェアを分離・分割して、それぞれ必要な環境を構築することで、本来、共存できないアプリケーションを一つのOS上で並行動作させると言ったことも可能です。あるいは、複数のOS環境や複数のバージョンのライブラリをインストールし、それぞれのバージョンで問題なく動作するのかテストすると言った際もOS環境の再構築が不要となり、作業効率が格段に向上します。

上記の特徴から、隔離された作業空間であるため、アプリケーションのコンパイルやパッケージ作成、元の環境に影響を与えずに気軽に変更と取り消しを行えることから、開発環境・テスト環境としてよく利用されています。

5. 知らないうちに利用しているサンドボックスやコンテナ

iPhoneに搭載されているiOSは、先に紹介したJailを実装したFreeBSDをルーツの一つ(MacOS/iOSのルーツはNeXTSTEP + FreeBSD + Machカーネル)に持つOSです。iPhoneのアプリは、すべてサンドボックス内で動作しています。具体的にはiTunesもSafariもChromeもゲームもチャットツールもすべてサンドボックス内で動作しています。そのため、マルウェアの感染、拡大などに対して強い抵抗力を持っており、iPhoneの安全神話を実現する主要な技術の一つとなっています。

本記事に記載されている会社名、サービス名、商品名は、各社の商標または登録商標です。

ページ上部へ戻る

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。