コンテナ管理には長い歴史があります。何十年もの間、コンテナ化された環境を管理することは比較的簡単なことでした。コンピューター・コンテナの現代的なアイデアは、1970年代に登場し、この概念はUnixシステム上でアプリケーション・コードを定義するのに初めて使用されました。
現代のコンテナ化技術は初期の頃から着実に進歩しており、企業はコンテナを運用することで、投資に対してさらに多くのユーティリティーが得られるようになりました。小規模なスタートアップから定評のある大企業まで、コンテナ・フレームワークは、最適化されたランタイムと継続的な配信により安定したワークフローを生成する優れた能力を備えていることが証明されています。
コンテナとは、アプリケーション・コードがライブラリーや依存関係とともにパッケージ化されたソフトウェアの実行可能な単位です。これらは標準化された方法でパッケージ化されているため、デスクトップや従来のIT、クラウドなど、どこでもコードを実行できます。
これは、OSカーネルの機能(例えば、Linuxの名前空間やcgroups、Windowsのサイロやジョブ・オブジェクトなど)を利用するオペレーティング・システム(OS)仮想化の形式を介して実現されます。その結果、プロセスを分離し、それらのプロセスがアクセスできるCPUやメモリー、ディスクの量を制御できます。
コンテナ技術は、2013年にDockerの登場により根本的に変化しました。この10年間も衰えることなく継続し、着実に人気を伸ばし、ユーザーに受け入れられてきました。このタイプのコンテナ化ソフトウェアに対する市場の需要が大きいにもかかわらず、それが満たされていなかったことは、Dockerの急速な成功と今や圧倒的な市場優位性によって証明されています。
2021年のIBMの調査によると、回答者の61%が、過去2年間に構築した新しいアプリケーションの少なくとも50%でコンテナを使用したと回答しています。さらに多くの回答者(64%)が、今後2年間に構築するアプリの少なくとも50%でコンテナを使用する予定であると回答しています。
コンテナは、データの配布と保護およびアプリの実行を目的としています。したがって、コンテナ化ソフトウェアの主要ユーザーはIT業界であり、以下の業界が上位3社にランクされていることは完全に理にかなっています(ibm.com外部へのリンク)。
コンテナ化されたアプリケーション市場は現在、次の2つの企業によって支配されています。
最も一般的に使用されているコンテナ化プラットフォームはDockerです。Dockerコンテナはもともと2013年にDocker Engineを中心に構築され、アプリケーション・プログラミング・インターフェース(API)に従って実行されます。Dockerは、実際のところはPaaS(サービスとしてのプラットフォーム)であり、その主なメリットはその柔軟性です。Dockerは、あらゆるアプリケーションとそれに関連する依存関係を取得し、それを仮想コンテナに変換し、WindowsやmacOSまたはLinuxを実行する任意のコンピューターで実行できます。このシステムでは、コンテナ構築に使用される読み取り専用テンプレートであるDockerイメージと、Dockerイメージに付属して説明するテキスト・ファイルであるDockerfilesが使用されます。Dockerイメージやその他のコンテナ・イメージを実行するには、スペースが必要です。これは、コンテナ・ランタイム(OSと対話するソフトウェア・ソリューション)によって管理され、コンテナ・イメージの実行に必要なスペースを確保します。
最も人気のあるコンテナ・オーケストレーション・プラットフォームはKubernetesです。これは2014年にGoogleによって作成され、ソフトウェア・デプロイメントを自動化し、拡張性を実現し、コンテナ管理をサポートする堅牢な方法により、今でも人気があります。さらに、Kubernetesはオープンソース・システムであり、コントリビューター(現在プロジェクトを監督している)の熱心な参加を奨励し、各ソフトウェア・プロバイダーがKubernetesに独自の工夫を凝らしています。例えば、一部のサービスでは、Kubernetesクラスターを作成するだけでなく、スケーラブルなwebアプリのデプロイやログの分析も行えます。
現在、DockerとKubernetesは、コンピューター・コンテナを扱う最も多く使用されているツールです。最近のコンテナ化予測(ibm.com外部へのリンク)によると、2024年現在でDockerはこの市場の82.8%を占め、Kubernetesは11.52%の市場シェアを獲得しています。
KubernetesとDockerの関係について詳しくは、「Kubernetes vs. Docker: Why Not Both?」をご覧ください。
コンテナは、特にクラウド・コンピューティング環境やエコシステムでますます重要になってきているため、コンテナ関連のユースケースには事欠きません。多くの組織では、アプリケーションやワークロード用の汎用クラウド・コンピューティング・プラットフォームの選択肢として、仮想マシン(VM)の代わりとしてコンテナを検討しています。しかし、その非常に広い範囲の中でも、クラウドネイティブ・コンテナが特に重要なユースケースがいくつかあります。
コンテナやコンテナ化、またはコンテナ・オーケストレーションは、次の関連ソリューションにも含まれます。
コンテナの基本的な種類は2つあり、それぞれが異なるコンテナ・テクノロジのグループを提供します。
「オペレーティング・システム・コンテナ」とも呼ばれるシステム・コンテナを使用すると、さまざまなプロセスを同時に実行できます。システム・コンテナは、従来型アプリを管理し、1つの論理的実行可能ファイルで表現される、単一の機能を実行するように設計されたモノリシック・アプリケーションを処理するのに最適です。これらのコンテナには、VMの実行に必要なアーキテクチャーと構成、ツールをホストする機能も備わっています。デフォルトの対策として、システム・コンテナは階層化されたファイルシステムを禁止します。
コンテナ技術:BSD Jails、Linux VServer、LXC、OpenVZ、Solaris Zones
アプリケーション・コンテナは、複数のプロセスを同時に実行できるシステム・コンテナほど多機能ではありません。アプリケーション・コンテナは、1つの実行可能アクションのみを実行することで1つのアプリケーションを提供することを目的としているため、その名前が付けられています。アプリケーション・コンテナーは、1つのサービスをパッケージ化して運用するために存在し、階層化されたファイル・システムをサポートしていません。
コンテナ技術を提供するDocker、Rocket
コンテナ化には、追加の労力と装備が必要ですが、その分見返りがあります。コンテナ・オーケストレーション・ツールは、製品がそれぞれのライフサイクルのどの段階にあるかにかかわらず、本番環境でのコンテナ体験を容易にします。
Kubernetesなどのオープンソース・テクノロジーを基盤とするIBMのコンテナ・サービスにより、クラウドへの移行を迅速・安全かつ生産的な方法で推進・加速できます。