The DX Leaders
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
コンテナとは、アプリケーション・コードをそのライブラリーや依存関係(動作に必要な外部プログラムや設定)とともにパッケージ化するソフトウェアの実行可能な単位のことです。 これらにより、デスクトップや、従来のITインフラストラクチャー、クラウド・インフラストラクチャーなど、あらゆるコンピューティング環境でコードを実行できます。
コンテナは、オペレーティングシステム(OS)仮想化の形式を利用します。この仮想化では、OSカーネルの機能(Linux名前空間とcgroup、Windowsサイロとジョブオブジェクトなど)を使用してプロセスを分離し、それらのプロセスがアクセスできるCPU、メモリ、およびディスクの量を制御できます。
コンテナは、仮想マシン(VM)よりも移植性とリソース効率に優れており、最新のクラウドネイティブ・アプリケーションにおける事実上のコンピューティング・ユニットとなっています。さらに、コンテナは、オンプレミス環境、プライベートクラウド、パブリッククラウド、さらには複数のクラウド・ベンダーの複数のクラウド・サービスを組み合わせたハイブリッド・マルチクラウド環境を支える基盤となるITインフラストラクチャーにとって重要です。
Business Research Insight1のレポートによると、世界のコンテナ技術市場は2021年に4億9,640万米ドルと評価され、2031年までに31億2,342万米ドルに達すると予想されており、年平均成長率(CAGR)は19.8%です。
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
コンテナについて理解を深める1つの方法は、物理コンピューターの仮想表現またはエミュレーションである従来の仮想マシン(VM)との違いを調べることです。VMはゲストと呼ばれることが多く、VMが実行される物理マシンはホストと呼ばれます。
仮想化技術によってVMが実現されています。ハイパーバイザー(小さなソフトウェア層)が、各VMに物理的なコンピューティング・リソース(プロセッサー、メモリー、ストレージなど)を割り当てます。これにより、各VMが他のVMから分離され、相互に干渉しなくなります。各VMには、ゲストOS、OSの実行に必要なハードウェアの仮想コピー、アプリケーション、および関連するライブラリーや依存関係が含まれます。VMware社は、ハイパーバイザーに基づく仮想化技術を開発し、商品化した最初の企業の1つです。
コンテナ技術では、基盤となるハードウェアを仮想化する代わりに、オペレーティング・システム(通常はLinux)を仮想化し、各コンテナにはアプリケーションとそのライブラリ、設定ファイル、依存 関係のみが 含まれるようにしています。ゲストOSがないため、コンテナはVMより軽量、高速でポータブルです。
コンテナと仮想マシンは相互排他的なものではありません。例えば、組織は、VMでコンテナを実行して分離とセキュリティーを強化し、自動化、バックアップ、監視のために既にインストールされているツールを活用することで、両方の技術を活用できます。
この比較の詳細については、「Containers versus VMs: What's the difference?(コンテナと仮想マシン:その違いとは) 」をご覧ください。あわせて動画もご覧ください。
コンテナの主なメリットは、特にVMと比較して、軽量でポータブルな抽象化レベルを提供できることです。主なメリットは次のとおりです。
コンテナはマシンのOSカーネルを共有するため、アプリケーションごとに完全なOSインスタンスを用意する必要がなく、コンテナ・ファイルを小さくしてリソースを節約できます。特にVMと比較してサイズが小さいため、コンテナはすぐに起動でき、水平方向に拡張するクラウドネイティブ・アプリケーションをより適切にサポートできます。
コンテナではすべての依存関係が保持されます。つまり、ソフトウェアは一度書き込みすれば、コンピューティング環境(ノートPC、クラウド、オンプレミスなど)間で再構成する必要なく実行できます。
VMと同様に、コンテナを使うと、開発者やオペレーターは物理マシンのCPUやメモリの使用率を上げることができます。コンテナのさらに優れている点は、マイクロサービス・アーキテクチャーも可能にするため、アプリケーション・コンポーネントをより細かくデプロイして拡張できることです。 これは、単一のコンポーネントの負荷が増大したためにモノリシック・アプリケーション全体をスケールアップしなければならない場合に比べて、魅力的な代替オプションです。
コンテナはシステム・リソースへの依存度が低いため、VMよりも管理とデプロイが速くなります。この機能によって、アプリケーションの導入にかかる費用と時間を削減でき、市場投入までの時間を最適化できます。
IBMの調査では、開発者とIT幹部がコンテナを使用したことによるその他の多くのメリットを報告しています。レポート全文をご覧ください: 「 企業におけるコンテナ」
コンテナは、コンテナ化、つまりオペレーティング・システム(OS)とその関連する環境変数、構成ファイル、ライブラリ、ソフトウェア依存関係のみを含むソフトウェア・コードのパッケージ化に依存しています。
その結果、コンテナ・プラットフォーム上で実行されるコンテナ・イメージが作成されます。コンテナ・イメージは、アプリケーションとそのすべてのソフトウェア依存関係をカプセル化したバイナリー・データを表します。
コンテナ化により、アプリケーションを「一度書き込みをすればどこでも実行できる」ようになり、ポータブルになり、開発プロセスが高速化でき、クラウド・ベンダーのロックインを防ぐことができます。
コンテナ化と プロセスの分離は 何十年も前から存在していました2。 コンテナ開発の歴史的な瞬間は、1979年にUnixバージョン7オペレーティング・システムの一部であるchrootの開発に伴い起きました。 Chrootは、アプリケーションのファイル・アクセスを特定のディレクトリ(ルート)とその子(またはサブプロセス)に制限することで、プロセス分離の概念を導入しました。
もう1つの重要な節目は2008年に起きました。このとき、Linuxコンテナ(LXC)がLinuxカーネルに実装され、Linux の単一インスタンスの仮想化が完全に実現できるようになりました。長年にわたり、FreeBSD jailやAIXワークロード・パーティションなどの技術によって、同様のOSレベルの仮想化が提供されてきました。
LXCは今でもよく知られたランタイムで、Linuxディストリビューションや ベンダーニュートラル・プロジェクト3の一部ですが、最新のLinuxカーネル技術も利用できます。最新のオープンソースLinux OSであるUbuntuでも、この機能が利用可能です。
コンテナ化の詳細について、動画を見る
多くの開発者は、Dockerが導入された2013年を現代のコンテナ時代の始まりと見ています。Dockerは、Platform-as-a-Service(PaaS)として機能するオープンソースのコンテナ化ソフトウェア・プラットフォームであり、開発者はコンテナの構築、デプロイ、実行、更新、管理を行えます。
Dockerを使うと、Linuxカーネル(OSの基本コンポーネント)とカーネル機能(Cgroupや名前空間など)を使ってプロセスを分離し、独立したプロセスを実行できます。Dockerは基本的に、アプリケーションとその依存関係を取得し、Windows、macOS、Linuxを実行する任意のコンピューター・システムで実行できる仮想コンテナに変換します。
Dockerはクライアント・サーバー・アーキテクチャーに基づいており、基盤となる技術としてDockerエンジンが使われています。Dockerはイメージベースのデプロイ・モデルを提供し、コンピューティング環境間でのアプリの共有を容易にしています。
混乱を避けるためにお伝えすると、Dockerコンテナ・プラットフォームという名前は、オープンソース・コンテナ化プラットフォームやDockerオープンソース・エコシステムおよびコミュニティ5を中心に構築された業務効率化ツールを開発する Docker, Inc. 4社のことも指しています。
2015年、Dockerをはじめとするコンテナ業界のリーダーは、Linux Foundation の一部であるThe Open Container Initiative6を設立しました 。これは、 コンテナ形式とランタイム環境に 関するオープンな業界標準を作成することを明確な狙いとしている オープン・ガバナンス機構です。
Dockerは最も広く使われているコンテナ化ツールで、市場シェアは実に82.84%です。7
システム全体で何十万ものコンテナを運用すると管理できなくなる可能性があり、オーケストレーション管理ソリューションが必要になってきます。
この課題に対処するために登場したのがコンテナ・オーケストレーションです。これにより、企業はコンテナ・ライフサイクル全体を通じて大量のコンテナを管理できるようになり、次のようなメリットが得られます。
他のコンテナ・オーケストレーション・プラットフォーム(Apache Mesos、Nomad、 Docker Swarmなど)も存在しますが、Kubernetesが業界標準となっています。
Kubernetesアーキテクチャーは、複数のマシンや環境にまたがってコンテナを実行できるクラスターで構成されています。通常、各クラスターは、コンテナ化されたアプリケーションを実行するワーカー・ノードと、クラスターを制御するコントロール・プレーン・ノードで構成されています。コントロール・プレーンは、Kubernetesクラスターのオーケストレーターとして機能します。これには、APIサーバー(Kubernetesとのすべてのやりとりを管理)、コントロール・マネージャー(すべての制御プロセスを処理)、クラウド・コントローラー・マネージャー(クラウド・プロバイダーのAPIとのインターフェース)など、いくつかのコンポーネントが含まれます。ワーカー・ノードは、Dockerなどのコンテナ・ランタイムを使用してコンテナを実行します。ポッドはクラスター内でデプロイ可能な最小単位であり、1つまたは複数のアプリ・コンテナで構成され、ストレージやネットワークなどのリソースを共有します。
Kubernetesを使用すると、開発者とオペレーターは、YAMLファイルを通じてコンテナ環境全体の望ましい状態を宣言できます。その後、Kubernetesは、指定された数のアプリケーションまたはワークロードのインスタンスのデプロイ、障害発生時の再起動、ロード・バランシング、自動スケーリング、ゼロ・ダウンタイム・デプロイなどを実行しながら、その状態を自動的に確立・維持します。Kubernetesを使用したコンテナ・オーケストレーションは、継続的インテグレーションと継続的デリバリー(CI/CD)やDevOpsパイプラインにおいても不可欠です。これらはいずれも、自動化なしでは実現できません。
2015年、GoogleはCloud Native Computing Foundation(CNCF)8にKubernetesを寄贈しました。CNCFは、Linux Foundationの後援の下で運営されているオープンソースかつベンダーに依存しないクラウドネイティブ・コンピューティングのハブです。以来、Kubernetesは、コンテナベースのワークロードの実行に世界で最も広く使用されるコンテナ・オーケストレーション・ツールになりました。CNCFレポートによると9、KubernetesはLinuxに次いで世界で2番目に大きなオープンソース・プロジェクトであり、Fortune 100企業の71%で主要なコンテナ・オーケストレーション・ツールとして採用されています。
CaaS(Containers-as-a-Service)とは、開発者がコンテナ化されたアプリケーションを管理・導入できるクラウド・コンピューティング・サービスです。これにより、あらゆる規模の企業がポータブルでスケーラブルなクラウド・ソリューションにアクセスできるようになります。
CaaSは、コンテナベースの仮想化とコンテナ管理プロセスの効率化ができるクラウドベースのプラットフォームです。 CaaSプロバイダーは、コンテナ・ランタイム、オーケストレーション・レイヤー、永続ストレージ管理を含む(がこれらに限定されない)多種多様な機能を提供しています。
Infrastructure-as-a-Service(IaaS)、Platform-as-a-Service(PaaS)、Software-as-a-Service(SaaS)と同様に、CaaSはクラウド・サービス・プロバイダー(AWS、Google Cloud Services、IBM Cloud 、Microsoft Azureなど)から従量課金制の料金体系モデルを通じて提供されており、ユーザーは使用したサービスのみに対して料金を支払います。
組織は、コンテナを使って以下に対応できます。
コンテナは小型かつ軽量であるため、アプリケーションが多数の疎結合で独立してデプロイ可能な小さなサービスで構築されるマイクロサービス・アーキテクチャーに適しています。
アーキテクチャーとしてのマイクロサービスとプラットフォームとしてのコンテナの組み合わせは、DevOps手法を採用する多くの開発チームと運用チームにとって共通の基盤となっています。例えば、コンテナは継続的インテグレーションと継続的デプロイメント(CI/CD)の実装を含むDevOpsパイプラインをサポートします。
コンテナは、ノートPC、オンプレミス、クラウド環境など、どこでも一貫して実行できるため、組織が複数のパブリッククラウドと独自のデータセンターを組み合わせて運営するハイブリッドクラウドやマルチクラウド環境を支える基盤アーキテクチャーとして最適です。
アプリケーションのモダナイゼーションにおける最も一般的なアプローチの1つは、クラウド移行に備えてアプリケーションをコンテナ化することです。
コンテナは、生成AIに関連する大規模言語モデル(LLM)を効率的にデプロイおよび管理する手段も提供します。オーケストレーション・ツールと組み合わせることで、移植性とスケーラビリティーも向上します。さらに、LLMへの変更は、新しいコンテナ・イメージにすばやくパッケージ化することができるため、開発とテストが迅速化できます。
Kubernetes以外にも、コンテナ・エコシステムで最も人気のある2プロジェクトが、IstioとKnativeです。
開発者がコンテナを使用してマイクロサービスを構築および実行すると、管理上の懸念は個々のコンテナのライフサイクルの考慮を超えて、多数の小さなサービス(多くの場合「サービスメッシュ」と呼ばれる)が相互に連携して関係する方法にまで及びます。Istioにより、開発者は、サービスディスカバリー、トラフィック管理、監視、セキュリティーなどに関する課題を容易に管理できるようになります。
Knative(「ケイネイティブ」と読みます)は、サーバーレス・コンピューティングへの容易な移行を実現するオープンソース・プラットフォームです。サーバーレス・コンピューティングは、開発者がサーバーやバックエンド・インフラストラクチャーをプロビジョニングまたは管理する必要がなく、アプリケーション・コードを構築して実行できるクラウド・コンピューティング・アプリケーションの開発および実行モデルです。
サーバーレスは、リクエストを待っている間、アイドル状態のコードの進行中のインスタンスをデプロイする代わりに、必要に応じてコードを起動し、需要の変動に応じてスケールアップまたはスケールダウンし、使用していないときはコードを停止します。サーバーレスでは、コードを実際に実行するときにのみ支払いが発生するため、コンピューティング容量と電力の無駄を防ぎ、コストを削減できます。
コンテナはハイブリッドクラウド環境全体でのソフトウェア開発と導入において重要な役割を果たしているため、組織はコンテナ化されたワークロードが社内外のセキュリティー脅威に対して安全であることを確認する必要があります。
コンテナはどこにでもデプロイできるため、コンテナ・ベースの環境の周囲に新たな攻撃対象領域が生まれます。脆弱なセキュリティー領域には、コンテナ・イメージやイメージ・レジストリー、コンテナ・ランタイム、コンテナ・オーケストレーション・プラットフォーム、ホスト・オペレーティング・システムが含まれます。
まず、企業はコンテナのセキュリティーを自社のセキュリティー・ポリシーと全体的な戦略に統合する必要があります。このような戦略には、クラウドベースのセキュリティー・ソフトウェア・ツールとともにセキュリティーのベスト・プラクティスを含める必要があります。この総合的なアプローチは、コンテナ化されたアプリケーションとその基盤となるインフラストラクチャーをコンテナのライフサイクル全体を通じて保護するように設計する必要があります。
セキュリティーのベスト・プラクティスには、複雑なネットワークのセキュリティーが常に社内外の脅威にさらされていると想定するゼロトラスト戦略が含まれます。さらに、コンテナにはDevSecOpsアプローチの採用が求められます。DevSecOpsは、初期設計から統合やテスト、提供、導入まで、ソフトウェア開発ライフサイクルのあらゆる段階でセキュリティー・プラクティスの統合を自動化するアプリケーション開発手法です。
組織はまた、リスク軽減のために、適切なコンテナ・セキュリティー・ツールを活用する必要があります。自動化されたセキュリティー・ソリューションには、構成管理、アクセス制御、マルウェアやサイバー攻撃の検出、ネットワーク・セグメンテーション、監視などが含まれます。
さらに、コンテナ化されたワークロードがGDPRやHIPAAなどのコンプライアンスおよび規制基準に準拠するよう徹底するためのソフトウェア・ツールも利用できます。
AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。
ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。
1 「Container Technology Market Size, Share, Growth, And Industry Analysis, By Type (Docker, Rkt, CRI-O, & Others), By Application (Monitoring, Data Management, Security, & Others), Regional Insights, and Forecast From 2024 To 2031」、 Business Research Insights社、2024年2月。
2 「A Brief History of Containers: From the 1970s Till Now」、Aqua社、2020年1月10日。
3 https://linuxcontainers.org/
4 「About Docker」、Docker社。
4 「Open Source Projects」、Docker社。
7 「Top 5 containerization technologies in 2024」、6sense社。
8 Cloud Native Computing Foundation
9 Kubernetes Project Journey Report、CNCF、2023年6月8日。