コンテナ化アプリケーションは、コンテナと呼ばれる分離されたコードのパッケージ内で実行されるアプリケーションです。コンテナには、ライブラリ、バイナリ、構成ファイル、フレームワークなど、アプリケーションがホスト オペレーティング システム上で実行する必要があるすべての依存関係が、1 つの軽量な実行可能ファイルにまとめられています。
アプリケーションをコンテナ化するプロセスでは、ハードウェアの依存関係や他のソフトウェアからさまざまな機能を分離することで、アプリケーション開発をより迅速かつ効率的に、安全に行えるようにします。コンテナはどのホスト オペレーティング システムでも実行でき、他のソフトウェアやハードウェア オブジェクトから分離されているため、一度構築すればどこでも実行できるアプリケーションを構築するための汎用性の高いツールになります。
Google 検索から YouTube や Gmail まで、Google ではあらゆるものがコンテナで実行されています。Google が開発したオープンソース プラットフォームである Kubernetes と Knative は、コンテナとアプリケーションの管理に広く使用されているツールの一つです。
分離
各コンテナ化アプリケーションは、他のアプリやシステム コンポーネントから離れた隔離された環境に存在するため、アプリケーション内の障害が他のアプリケーションやローカル システムに影響を与えず、バグ インシデントの範囲を制限できる。
ポータビリティ
コンテナ化アプリケーションはオペレーティング システムから独立して動作するため、物理サーバー、仮想マシン、開発者の個人のマシン、クラウドなど、ほぼすべての環境に移植できます。
軽量
仮想マシンとは異なり、コンテナにはオペレーティング システムのバージョンが含まれないため、他の仮想化手法よりもはるかに軽量で効率的です。
効率性
コンテナ化アプリケーションはマシンのコンピューティング カーネルとリソースを共有でき、コンテナ内のアプリケーション レイヤは複数のコンテナ間で共有できます。このように、コンテナ化アプリケーションは必要なリソースが少なくて済むため、複数のコンテナを同じマシンまたは仮想環境で実行できます。
スケーラビリティ
コンテナ インスタンスをすばやく追加して、増加するアプリケーションの負荷に対応できます。
コンテナ化アプリケーションは、ホスト オペレーティング システム上でアプリを実行するために必要なすべてのアプリケーション依存関係を含む、ソフトウェアの実行可能パッケージ(コンテナ)を実行することで機能します。コンテナ化アプリケーションには複数のオブジェクトがあります。これには、コンテナ イメージを構成するすべてのアプリ コンポーネント(フレームワーク、ライブラリなど)が含まれており、コンテナ エンジンによって実行されます。コンテナ イメージは、コンテナ システムのブループリントまたはアーキテクチャです。アプリケーションを実行すると、イメージのコンテンツがコンテナ インスタンスにコピーされ、アプリケーション内の任意の数のコンテナで使用できます。コンテナ イメージは、コンテナの共有性と互換性に役立つ Open Container Initiative(OCI)という業界標準に基づいて作成されます。
Container Engine はコンテナのランタイム環境であり、コンテナ化されたアプリケーションが実行されるプラットフォームです。コンテナ エンジンは、クライアント ツールを使用してコンテナをビルド、管理、起動するためのコマンドを受け入れます。最も一般的なコンテナ エンジンは、Docker や CRI-O などのツールです。
オーケストレーション ツールは、コンテナ化アプリケーションの管理のために、特に多数のコンテナがある環境で使用されます。Kubernetes などのオーケストレーション ツールは、コンテナのデプロイ、管理、スケーリングを行います。
コンテナと仮想マシンは機能は似ていますが、コンテナは使用するリソースが少なく、柔軟性に優れている傾向があります。
仮想マシンを使用すると、複数のアプリケーションやオペレーティング システムが 1 台の物理コンピュータまたはサーバーのリソースを共有し、同時に実行できます(Windows と Linux が同じコンピュータを共有する場合など)。仮想マシンは、ファイル、依存関係、オペレーティング システムの独自のコピーを保持します。
コンテナには、仮想マシンとは異なり、オペレーティング システムのコピーは保持されません。このため、コンテナと仮想マシンの主な違いは、コンテナ化によってコンピューティング リソースがより効率的に使用されることです。コンテナ ランタイムはコンピュータまたはサーバーの既存のオペレーティング システムにインストールされるため、すべてのコンテナで同じオペレーティング システムを共有できます。
最も基本的なレベルでは、コンテナはシステム コンテナとアプリケーション コンテナの 2 種類に分類されます。
アプリケーション コンテナは、通常は単一のプロセスを実行するステートレス ソリューションです。ここでいうコンテナ化アプリケーションは、各コンテナがプロセスを処理するアプリケーション コンテナを実行し、Kubernetes などのツールによって複数のコンテナをオーケストレートします。
市場にはアプリケーション コンテナが豊富にあります。Docker が最も人気がありますが、他にもいくつかあります。コンテナのオープンソース開発は OCI によって管理されます。
システム コンテナ(オペレーティング システム コンテナとも呼ばれます)は古いもので、仮想マシンのように機能しますが、同じコンピューティング オーバーヘッドではありません。スタンドアロン システムとして動作し、コンテナ イメージを含まず、特殊なソフトウェアを必要としません。システム コンテナは通常、モノリシックなレガシー アプリケーションで使用されています。
コンテナ化アプリケーションの一般的なエンジンとツールタイプは次のとおりです。
コンテナ化で最も人気のあるオープンソース プラットフォームです。Docker を使用すると、Linux ベースのコンテナの作成とオペレーションが可能になります。
LinuxContainers.org のオープンソース プロジェクトである LXC では、単一の Linux カーネルをオペレーティング システムとして使用して、アプリで複数の Linux システムを同時に実行できます。
rkt はRocket とも呼ばれ、コンテナをきめ細かく制御できる、または Docker コンテナ システム内の特定のコンポーネントとして使用できるアプリケーション ベースのコンテナ エンジンです。
コンテナ管理プラットフォーム Kubernetes 用の Container Runtime Interface(CRI)。OCI 互換のランタイムを有効にするために使用されます。多くの場合、Kubernetes の使用時に Docker の代替として使用されます。