コンテナとは

大学の主任教授が図書館で学生の統計を確認している

執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

コンテナとは

コンテナとは、アプリケーション・コードをそのライブラリーや依存関係とともにパッケージ化するソフトウェアの実行可能な単位です。 これらにより、デスクトップや、従来のITインフラストラクチャー、クラウド・インフラストラクチャーなど、あらゆるコンピューティング環境でコードを実行できます。

コンテナは、オペレーティングシステム(OS)仮想化の形式を利用します。この仮想化では、OSカーネルの機能(Linux名前空間とcgroup、Windowsサイロとジョブオブジェクトなど)を使用してプロセスを分離し、それらのプロセスがアクセスできるCPU、メモリ、およびディスクの量を制御できます。

コンテナは、 仮想マシン (VM)よりも移植性とリソース効率が高いため、 最新のクラウドネイティブ・アプリケーションの 事実上の 標準的な コンピューティング・ユニット となっています。さらに、コンテナは、ハイブリッド・ マルチクラウドが設定する基盤となるITインフラストラクチャー(オンプレミス、 プライベートクラウド、 パブリッククラウド や、複数のクラウド・ベンダーによる複数のクラウド・サービスなどの組み合わせ)にとって重要です。

Business  Research Insight1のレポートによると、世界のコンテナ技術市場は2021年に4億9,640万米ドルと評価され、2031年までに31億2,342万米ドルに達すると予想されており、年平均成長率(CAGR)は19.8%です。

ビジネス街をバックにスマホを持つ手

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

コンテナとVirtual Machinesの比較

コンテナについて理解を深める1つの方法は、 物理コンピューターの仮想表現またはエミュレーションである 従来の仮想マシン(VM)との違いを調べることです。VMはゲストと呼ばれることが多く、VMが実行される物理マシンはホストと呼ばれます。

仮想化技術がVMを可能にしています。ハイパーバイザー(小さなソフトウェア層)が、各VMに物理的なコンピューティング・リソース(プロセッサー、メモリ、ストレージなど)を割り当てます。これにより、各VMが他のVMから分離され、相互に干渉しなくなります。ここでの各VMには、ゲストOS、OSの実行に必要なハードウェアの仮想コピー、アプリケーション、関連するライブラリと依存関係が含まれます。VMware社は、ハイパーバイザーに基づく仮想化技術を開発し、商品化した最初の企業の1つです。

コンテナ技術では、基盤となるハードウェアを仮想化する代わりに、オペレーティング・システム(通常はLinux)を仮想化し、各コンテナにはアプリケーションとそのライブラリ、設定ファイル、依存 関係のみが 含まれるようにしています。ゲストOSがないため、コンテナはVMより軽量、高速でポータブルです。

コンテナと仮想マシンは相互に排他的ではありません。例えば、組織は、VMでコンテナを実行して分離とセキュリティーを強化し、自動化、バックアップ、監視のために既にインストールされているツールを活用することで、両方の技術を活用できます。

この比較の詳細については、「コンテナvs VM: その違いとは」をご覧ください。動画を見る:

コンテナの主なメリット

コンテナの主なメリットは、特にVMと比較して、軽量でポータブルな抽象化レベルを提供できることです。主なメリットは次のとおりです。

軽量

コンテナはマシンのOSカーネルを共有するため、アプリケーションごとに完全なOSインスタンスを用意する必要がなく、コンテナ・ファイルを小さくしてリソースを節約できます。特にVMと比較してサイズが小さいため、コンテナはすぐに起動でき、水平方向に拡張する クラウドネイティブ ・アプリケーションをより適切にサポートできます。

ポータブルでプラットフォームに依存しない

コンテナではすべての依存関係が保持されます。つまり、ソフトウェアは一度書き込みすれば、コンピューティング環境(ノートPC、クラウド、オンプレミスなど)間で再構成する必要なく実行できます。

最新の開発とアーキテクチャー環境に対応

コンテナはプラットフォーム間での移植性と一貫性やサイズの小ささを兼ね備えているため、通常のコードを少しずつ使用して構築されるDevOps サーバーレス マイクロサービス などの最新の開発およびアプリケーションパターンに最適です。

使用率の向上

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と最新のコンテナの時代

多くの開発者は、 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

Kubernetesを使用したコンテナ・オーケストレーション

システム全体で何十万ものコンテナを運用すると管理できなくなる可能性があり、オーケストレーション管理ソリューションが必要になってきます。

この課題に対処するために、 コンテナ・オーケストレーション は、次のような大量のコンテナをコンテナ・ライフサイクル全体にわたって管理する方法として登場しました。

  • プロビジョン
  • 冗長性
  • ヘルス・モニタリング
  • リソース割り当て
  • スケーリングと ロード・バランシング
  • 物理ホスト間の移動

他のコンテナ・オーケストレーション・プラットフォーム(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財団(CNCF)8にKubernetesを寄贈しました。CNCFは、Linux財団の後援の下で運営されているオープンソースかつベンダーに依存しない クラウドネイティブ ・コンピューティングのハブです。以来、Kubernetesは、コンテナベースのワークロードの実行に世界で最も広く使用されるコンテナ・オーケストレーション・ツールになりました。CNCFレポート9では、Kubernetesは、世界で2番目に大きなオープンソース・プロジェクト(首位はLinux)で、Fortune誌が選ぶ世界の上位企業100社の実に71%により主要コンテナ・オーケストレーション・ツールとして選ばれています。

CaaS(Containers-as-a-Service)とは

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 など)から従量課金制の料金体系モデルを通じて提供されており、ユーザーは使用したサービスのみに対して料金を支払います。 

AI Academy

ハイブリッドクラウドでAI対応を実現

IBMのエキスパートが主催するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資に優先順位を付けるために必要な知識を習得できます。

コンテナのユースケース

組織は、コンテナを使って以下に対応できます。

マイクロサービス

コンテナは小型かつ軽量であるため、アプリケーションが多数の疎結合で独立してデプロイ可能な小さなサービスで構築されるマイクロサービス・アーキテクチャーに適しています。

DevOps

アーキテクチャーとしてのマイクロサービスとプラットフォームとしてのコンテナの組み合わせは、DevOps手法を採用する多くの開発チームと運用チームにとって共通の基盤となっています。例えば、コンテナは 継続的インテグレーション と 継続的デプロイメント (CI/CD)の実装を含むDevOps パイプライン をサポートします。

ハイブリッドとマルチクラウド

コンテナは、ノートPC、オンプレミス、クラウド環境など、どこでも一貫して実行できるため、組織が複数のパブリッククラウドと独自のデータセンターを組み合わせて運営する ハイブリッドクラウド および マルチクラウド のシナリオに最適な基盤アーキテクチャーです。

アプリケーションのモダナイゼーションと移行

 アプリケーションのモダナイズと移行 : アプリケーションのモダナイゼーションに対する最も一般的なアプローチは、 クラウド移行に備えてアプリケーションをコンテナ化することです。

AIとMLのワークロード

コンテナ化(つまり、KubernetesでオーケストレーションされたDockerイメージ)により、DevOps パイプラインは人工知能(AI)および機械学習(ML)アプリをクラウド・コンピューティング環境に迅速にデプロイできるようになります。

生成AI

コンテナは、生成AIに関連する大規模言語モデル(LLM)を効率的に展開・管理する方法も提供でき、オーケストレーション・ツールと併用すると移植性とスケーラビリティが向上できます。さらに、LLMへの変更は、新しいコンテナ・イメージにすばやくパッケージ化することができるため、開発とテストが迅速化できます。

広範なコンテナ・エコシステム: IstioとKnative

Kubernetes以外にも、コンテナ・エコシステムで最も人気のある2プロジェクトが、IstioとKnativeです。

Istioサービス・メッシュ

開発者がコンテナを使用してマイクロサービスを構築および実行すると、管理上の懸念は個々のコンテナのライフサイクルの考慮を超えて、多数の小さなサービス(多くの場合「サービスメッシュ」と呼ばれる)が相互に連携して関係する方法にまで及びます。ISTIOにより、開発者は、検出、トラフィック、監視、セキュリティーなどに関連する課題を簡単に管理できるようになります。

Knativeとサーバーレス

Knative(「ケイネイティブ」と読みます)は、サーバーレス・コンピューティングへの容易な導入を提供するオープンソース・プラットフォームです。サーバーレス・コンピューティングは、開発者がサーバーやバックエンド・インフラストラクチャーをプロビジョニングまたは管理する必要がなく、アプリケーション・コードを構築して実行できるクラウド・コンピューティング・アプリケーションの開発および実行モデルです。

サーバーレスは、リクエストを待っている間、アイドル状態のコードの進行中のインスタンスをデプロイする代わりに、必要に応じてコードを起動し、需要の変動に応じてスケールアップまたはスケールダウンし、使用していないときはコードを停止します。サーバーレスでは、コードを実際に実行するときにのみ支払いが発生するため、コンピューティング容量と電力の無駄を防ぎ、コストを削減できます。

コンテナのセキュリティとガバナンス

コンテナはハイブリッドクラウド環境全体でのソフトウェア開発と導入において重要な役割を果たしているため、組織はコンテナ化されたワークロードが社内外のセキュリティー脅威に対して安全であることを確認する必要があります。

コンテナはどこにでもデプロイできるため、コンテナ・ベースの環境の周囲に新たな攻撃対象領域が生まれます。脆弱なセキュリティー領域には、コンテナ・イメージやイメージ・レジストリー、コンテナ・ランタイム、コンテナ・オーケストレーション・プラットフォーム、ホスト・オペレーティング・システムが含まれます。

まず、企業はコンテナのセキュリティーを自社のセキュリティー・ポリシーと全体的な戦略に統合する必要があります。このような戦略には、クラウドベースのセキュリティー・ソフトウェア・ツールとともにセキュリティーのベスト・プラクティスを含める必要があります。この総合的なアプローチは、コンテナ化されたアプリケーションとその基盤となるインフラストラクチャーをコンテナのライフサイクル全体を通じて保護するように設計する必要があります。

セキュリティーのベスト・プラクティスには、複雑なネットワークのセキュリティーが常に社内外の脅威にさらされていると想定するゼロトラスト戦略が含まれます。さらに、コンテナにはDevSecOpsアプローチが必要です。DevSecOpsは、初期設計から統合やテスト、提供、導入まで、ソフトウェア開発ライフサイクルのあらゆる段階でセキュリティー・プラクティスの統合を自動化するアプリケーション開発手法です。

組織はまた、リスク軽減のために、適切なコンテナ・セキュリティー・ツールを活用する必要があります。自動化されたセキュリティー・ソリューションには、構成管理やアクセス制御、マルウェアサイバー攻撃のスキャン、ネットワーク・セグメンテーション、監視などが含まれます。

さらに、コンテナ化されたワークロードがGDPRやHIPAAなどのコンプライアンスおよび規制基準に準拠するよう徹底するためのソフトウェア・ツールも利用できます。

関連ソリューション
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloudは、フルマネージドのOpenShiftコンテナ・プラットフォーム(OCP)です。

Red Hat OpenShiftの詳細はこちら
コンテナ・ソリューション

コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントにより、コンテナ化されたワークロードを実行およびスケールアップします。

コンテナの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

IBMのコンテナ・ソリューションでインフラストラクチャーをモダナイズします。IBMの包括的なコンテナ・プラットフォームを使用して、柔軟性、セキュリティー、効率性を備えたコンテナ化されたワークロードを環境全体で実行、拡張、管理します。

コンテナ・ソリューションの詳細はこちら 無料のIBM Cloudアカウントを作成