コンテナ ネットワークは、自宅のデスクトップや Web スケールのエンタープライズ ネットワーク ソリューションで使用される、仮想マシンに似たコンセプトの新しいアプリケーション サンドボックス メカニズムです。コンテナ内は、ホストやほかのすべてのコンテナから分離され、独自のユーザー、ファイル システム、プロセス、ネットワーク スタックを持つフル機能の Linux 環境になっています。コンテナ内のすべてのアプリケーションは、コンテナ内で利用可能なファイルまたはリソースのみアクセスまたは変更することが許可されています。
複数のコンテナのそれぞれに独自のアプリケーションをインストールして独自の依存関係を持たせ、同時に実行することができます。これは、新しいバージョンのアプリケーションで依存関係のアップグレードが必要であるにもかかわらず、そのアップグレードを実行するとサーバ上で実行されているほかのアプリケーションの依存関係と競合を引き起こす可能性がある場合に、特に便利です。コンテナは、仮想マシンとは異なり、コンピュータ上のすべてのハードウェアを完全にシミュレートするのではなく、ホスト リソースを共有するものであるため、仮想マシンよりも小型で高速であるとともに、オーバーヘッドが軽減されます。特に Web スケールのアプリケーションの用途において、コンテナは、仮想マシンに代わるマイクロサービス アーキテクチャの展開プラットフォームとして設計されました。
コンテナには可搬性という特性もあり、たとえばコンテナ エンジンの Docker では、コンテナとその依存関係をすべてまとめてパッケージ化し、ダウンロード可能なコンテナ パッケージとして提供できます。コンテナは、ダウンロード後すぐにホスト上で実行できます。
コンテナ ネットワークは、コンセプトが仮想マシン(VM)に似た仮想化の一形態ですが、異なる点があります。第一に、仮想マシンがハードウェアの仮想化であるのに対し、コンテナ方式は OS の仮想化の一種です。
ハイパーバイザー上で稼働する各仮想マシンには、それぞれ独自のオペレーティング システム、アプリケーション、ライブラリがあり、永続データのカプセル化、新しい OS のインストール、ホストとは異なるファイル システムの使用、異なるカーネル バージョンの使用が可能です。
一方コンテナは、イメージの「実行中のインスタンス」です。つまり、起動していくつかのタスクを実行したら削除される、一時的なオペレーティング システムの仮想化です。コンテナは一時的であるという特性上、より大きなアドレス空間を必要とする仮想マシンと比べて、数多くのコンテナのインスタンスを実行できます。
コンテナでは、ネームスペースと cgroup という 2 つの Linux カーネル機能を利用して分離を実現します。コンテナをほかのリソースから分離してコンテナ独自のシステムのビューを提供するために、各リソースに対してネームスペースを作成し、残りのシステムから共有できないようにします。そしてコントロール グループ(cgroup)を使って、CPU、メモリ、ディスク I/O、ネットワークなどのシステム リソースを監視、制限します。
コンテナは、マイクロサービスのプラットフォームとして仮想マシンに代わって急速に採用が進んでいます。
コンテナには、いくつかの重要なメリットがあります。
エンタープライズ環境では、コンテナがマイクロサービス アーキテクチャの一部として展開されることで、大規模な Web アプリケーションに共通する個々のタスクがカプセル化されます。各タスクは独自のコンテナを持ち、API や GUI のような外部向けのコンテナは公共のインターネットに公開され、それ以外はプライベート ネットワークに配置されます。
マイクロサービス モデルには以下のメリットがあります。
現在、コンテナ ネットワークには 5 つの種類があります。その特徴は、コンテナごとの IP モデルであるかポッドごとの IP モデルであるか、および NAT が必要か必要でないかを軸とするものです。
署名済みのイメージとバイナリ、および Project Antrea の完全なエンタープライズ サポートの提供
コンテナ化されたアプリケーションとマイクロサービスの接続と保護
Virtual Cloud Network でパブリッククラウドの操作性をデータセンターに導入