コンテナは、アプリケーションコードとそのライブラリや依存関係とともにパッケージ化されたソフトウェアの実行可能な単位であり、デスクトップ、従来のIT、クラウドなど、どこでもコードを実行できるように一般的な方法でパッケージ化されています。
コンテナは、オペレーティングシステム(OS)仮想化の形式を利用します。この仮想化では、OSカーネルの機能(Linux名前空間とcgroup、Windowsサイロとジョブオブジェクトなど)を使用してプロセスを分離し、それらのプロセスがアクセスできるCPU、メモリ、およびディスクの量を制御できます。
コンテナは、Virtual Machinesとは異なり、すべてのインスタンスにゲストOSを含める必要がなく、ホストOSの機能とリソースを使用するだけで済むため、小型で高速かつポータブルです。
コンテナは、FreeBSD JailsやAIX Workload Partitionsなどのバージョンで数十年前に初めて登場しましたが、現代の開発者のほとんどが、2013年がDockerの導入による現代のコンテナ時代の始まりだったと記憶しています。
戦略的アプリケーションのモダナイゼーションは、年間収益を増加させ、メンテナンス・コストとランニング・コストを削減できる変革成功への鍵の一つです。
登録してDaaSガイドを受け取る
コンテナをよりよく理解する方法の1つは、従来のVirtual Machine(VM)との違いを理解することです。従来の仮想化では、オンプレミスでもクラウドでもハイパーバイザーを使用して物理ハードウェアを仮想化します。各VMには、ゲストOS と、OSの実行に必要なハードウェアの仮想コピー、およびアプリケーション、そして関連するライブラリと依存関係が含まれます。
基礎となるハードウェアを仮想化する代わりに、コンテナはオペレーティングシステム(通常は Linux)を仮想化するため、個々のコンテナにはアプリケーションとそのライブラリおよび依存関係のみが含まれます。 ゲストOSがないため、コンテナは軽量で、高速でポータブルです。
この比較について詳しく知りたい場合は、「コンテナとVM:その違いとは」をご覧ください。
コンテナの主なメリットは、特にVMと比較して、軽量でポータブルな抽象化レベルを提供できることです。主なメリットは次のとおりです。
軽量:コンテナはマシンOSカーネルを共有するため、アプリケーションごとに完全なOSインスタンスを用意する必要がなく、コンテナファイルを小さくしてリソースを節約できます。特にVMと比較してサイズが小さいため、コンテナはすぐに起動でき、水平方向に拡張するクラウドネイティブ・アプリケーションをより適切にサポートできます。
ポータブルでプラットフォームに依存しない:コンテナには依存関係がすべて含まれているため、ソフトウェアを一度作成すれば、ラップトップ、クラウド、オンプレミスのコンピューティング環境で再構成しなくても実行できます。
最新の開発とアーキテクチャーをサポート:コンテナはプラットフォーム間での移植性/一貫性とサイズの小ささを兼ね備えているため、通常のコードを少しずつ使用して構築されるDevOps、サーバーレス、マイクロサービスなどの最新の開発およびアプリケーションパターンに最適です。
使用率の向上:これまでのVMと同様、コンテナを使用すると、開発者とオペレーターは物理マシンのCPUとメモリの使用率を向上させることができます。コンテナがさらに優れている点は、マイクロサービス・アーキテクチャーも可能にするため、アプリケーション・コンポーネントをより細かくデプロイして拡張できることです。これは、単一のコンポーネントの負荷が増大したためにモノリシック・アプリケーション全体をスケールアップしなければならない場合に比べて、魅力的な代替オプションです。
最近のIBMの調査では、開発者とIT幹部がコンテナを使用したことによるその他の多くのメリットを報告しました。
レポート全文をダウンロードする:エンタープライズにおけるコンテナ
コンテナは、特にクラウド環境においてますます重要になってきています。多くの組織がアプリケーションやワークロードの汎用コンピューティング プラットフォームとしてVMに代わるコンテナを検討しています。 しかし、その広い範囲の中でも、コンテナが特に関連する重要なユースケースがあります。
コンテナを活用するには、ソフトウェアを異なる方法で設計およびパッケージ化する必要があります。このプロセスは一般にコンテナ化と呼ばれます。
アプリケーションをコンテナ化する場合、プロセスには、アプリケーションを関連する環境変数、構成ファイル、ライブラリ、およびソフトウェアの依存関係とともにパッケージ化することが含まれます。その結果、コンテナプラットフォーム上で実行できるコンテナイメージが作成されます。
Kubernetesを使用したコンテナ・オーケストレーション
企業がコンテナを採用し始めると(多くの場合、最新のクラウドネイティブアーキテクチャの一部として採用)、個々のコンテナのシンプルさと、分散システム全体で数百(または数千)のコンテナを管理する複雑さが衝突し始めました。
この課題に対処するために、コンテナ・オーケストレーションは、次のような大量のコンテナをライフサイクル全体にわたって管理する方法として登場しました。
多くのコンテナ・オーケストレーション・プラットフォーム(Apache Mesos、Nomad、Docker Swarmなど)が作成されましたが、2014年にGoogleによって導入されたオープンソースプロジェクトであるKubernetesは、瞬く間に最も人気のあるコンテナ・オーケストレーション・プラットフォームとなり、現在では業界の大多数が標準化の基盤とするプラットフォームになっています。
Kubernetesを使用すると、開発者とオペレーターはYAMLファイルを通じてコンテナ環境全体の望ましい状態を示すことができます。その後、Kubernetesはその状態を確立し、維持するために必要なすべての処理作業を実行します。これには、特定のアプリケーションまたはプログラムの指定された数のインスタンスのデプロイ、障害が発生した場合のアプリケーションの再起動、ロード・バランシング、Auto-Scaling、ゼロダウンタイムの実現などのアクティビティーが含まれます。
Kubernetesは現在、Linux Foundationの後援の下で運営されている、ベンダーに依存しない業界グループのCloud Native Computing Foundation(CNCF)によって運営されています。
コンテナは、アプリケーションをパッケージ化して実行するための一般的な方法として勢いを増し続けており、本番環境のユースケースに対応し、拡張するために設計されたツールとプロジェクトのエコシステムは成長し続けています。Kubernetes以外にも、コンテナ・エコシステムで最も人気のある2プロジェクトが、IstioとKnativeです。
istio
開発者がコンテナを使用してマイクロサービスアーキテクチャーを構築および実行すると、管理上の懸念は個々のコンテナのライフサイクルの考慮を超えて、多数の小さなサービス(多くの場合「サービスメッシュ」と呼ばれる)が相互に接続して関係する方法にまで及びます。Istioは、開発者が検出、トラフィック、監視、セキュリティーなどに関連する課題を簡単に管理できるようにするために作成されました。
knative
サーバーレスアーキテクチャーも、特にクラウドネイティブ・コミュニティー内で人気が高まり続けています。たとえば、Knativeは、コンテナ化されたサービスをサーバーレス関数としてデプロイできるという点で大きな価値があります。
サーバーレス関数は(サーバーのように)常に実行していて、必要なときに応答する代わりに、呼び出されない限りまったく実行しない「ゼロスケール」を利用できます。このモデルは、何万ものコンテナに適用すると膨大な量の計算能力を節約できます。
Red Hat OpenShift on IBM Cloudは、パブリック環境およびハイブリッド環境でOpenShiftを活用し、速度、市場対応性、拡張性、信頼性を実現します。
CP4Appsは、デプロイ、新しいクラウドネイティブ・アプリケーションの構築、既存アプリケーションのリファクタリングやリプラットフォームなどをカバーします。
IBM Cloud Satellite を使用すると、オンプレミス、エッジ、パブリック・クラウド環境など、どこでも一貫したクラウド・サービスを開始できます。
コンテナイメージ、バッチジョブ、またはソースコードをサーバーレスワークロードとして実行します。サイジング、デプロイ、ネットワーク、スケーリングは必要ありません。
IBM Cloud Container Registryは、イメージを管理し、安全性の問題を監視できるプライベート・レジストリーを提供します。
Turbonomicソフトウェアは、リソースの適切な割り振りと、それを実行するタイミングを自動的に決定することで、SLOを満たすために必要なものをKubernetes環境と基幹業務を担うアプリケーションが確実に取得できるようにします。