ホーム Topics containers コンテナとは何ですか?
IBM Cloud 上の Red Hat OpenShift を探索する 登録してクラウドの最新情報を受け取る
コンピューターのモニター、サーバー、雲、つながったドットのピクトグラムをコラージュしたイラスト

公開日: 2024年5月9日
寄稿者: Stephanie Susnjara、Ian Smalley

コンテナとは何ですか?

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

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

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

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

戦略的なアプリのモダナイゼーションがデジタル・トランスフォーメーションを推進

戦略的アプリケーションのモダナイゼーションは、年間収益を増加させ、メンテナンス・コストとランニング・コストを削減できる変革成功への鍵の一つです。

関連コンテンツ

IBMニュースレターの購読

コンテナと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は、 プラットフォーム・アズ・ア・サービス(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は、コンテナベースのワークロードを実行する際に世界で最も広く使用されているコンテナ・オーケストレーション・ツールとなりました。Kubernetesは、CNCFレポートにおいて 9、世界で2番目に大きな オープン・ソース  ・プロジェクト(首位はLinux)であり、Fortune誌が選ぶ世界の上位企業100社の実に71%に主要なコンテナ・オーケストレーション・ツールとして選ばれています。 

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

Containers as a service (CaaS) とは、開発者がコンテナ化されたアプリケーションを管理し、デプロイできるようにするクラウド・コンピューティング・サービスです。どのような規模の企業でも、移植や拡張が容易なクラウド・ソリューションにアクセスできるようにします。

CaaSは、コンテナベースの仮想化とコンテナ管理プロセスの効率化ができるクラウドベースのプラットフォームです。 CaaSプロバイダーは、コンテナ・ランタイム、オーケストレーション・レイヤー、永続ストレージ管理を含む(がこれらに限定されない)多種多様な機能を提供しています。

 インフラストラクチャー・アズ・ア・サービス(IaaS) 、プラットフォーム・アズ・ア・サービス(PaaS)、ソフトウェア・アズ・ア・サービス(SaaS)と同様に、 CaaSはクラウド・サービス・プロバイダー(AWS、Google Cloud Services、IBM Cloud 、Microsoft Azure など)から従量課金制の料金体系モデルを通じて提供されており、ユーザーは使用したサービスのみに対して料金を支払います。 

コンテナのユースケース

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

マイクロサービス

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

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などのコンプライアンスおよび規制基準に準拠するよう徹底するためのソフトウェア・ツールも利用できます。

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

Red Hat OpenShift on IBM Cloudは、パブリック環境およびハイブリッド環境でOpenShiftを活用し、速度や市場対応性、拡張性、信頼性を実現します。

IBM Cloud 上の Red Hat OpenShift を探索する
IBM Cloud Pak for Applications

デプロイメントであれ、新しいクラウドネイティブ・アプリケーションの構築であれ、既存アプリケーションのリファクタリングや再プラットフォーム化などであれ、Cloud Pak for Applications(CP4Apps)がすべてをカバーします。

IBM Cloud Pak for Applicationsはこちら
IBM Cloud Satellite

IBM Cloud Satellite を使用すると、オンプレミス、エッジ、パブリック・クラウド環境など、どこでも一貫したクラウド・サービスを開始できます。

IBMクラウド・サテライトを探索する
IBM Cloud Code Engine

コンテナイメージ、バッチジョブ、またはソースコードをサーバーレスワークロードとして実行します。サイジング、デプロイ、ネットワーク、スケーリングは必要ありません。

IBM クラウド・コード・エンジンについて詳しく見る
IBM Cloud Container Registry

IBM Cloud Container Registryは、イメージを管理し、安全性の問題を監視できるプライベート・レジストリーを提供します。

IBM Cloud Container Registryの詳細はこちら
IBM Turbonomic

Turbonomicソフトウェアは、リソースの適切な割り振りと、それを実行するタイミングを自動的に決定することで、SLOを満たすために必要なものをKubernetes環境と基幹業務を担うアプリケーションが確実に取得できるようにします。

IBM Turbonomicの詳細はこちら
IBM Fusion

Fusionソフトウェアは、パブリッククラウド、オンプレミス、ベアメタル、仮想マシンなど、Red Hat OpenShiftが動作する環境ならどこでも実行できます。Fusionは、Red Hat OpenShiftアプリケーションとIBM watsonxをデプロイする簡単な方法を提供します。

IBM Fusionはこちら
参考情報 企業内のコンテナ

IBM の新しい調査では、コンテナーと Kubernetes の導入の勢いが急速に高まっていることが文書化されています。

クラウドと従来のITの最高の機能を組み合わせる

コンテナ オーケストレーションは、どこからでもワークロードを構築および管理できるオープン ハイブリッド クラウド戦略の重要なコンポーネントです。

Dockerとは?

Dockerは、コンテナ化されたアプリケーションを構築、デプロイ、管理するためのオープンソース プラットフォームです。

コンテナ戦略をお持ちですか?

コンテナ化は、現代のアプリケーション開発において重要な役割を果たします。このビデオでは、Chris Rosenがソフトウェア開発とIT運用の4つのユースケースについて説明し、パフォーマンスとアップタイムの最大化やコストの最小化、俊敏性の維持、コンプライアンスの維持を支援します。

Kubernetesとは

Kubernetes(k8sまたはkubeとも呼ばれます)は、コンテナ化されたアプリケーションの導入、管理、スケーリングをスケジュールおよび自動化するためのオープンソースのコンテナ・オーケストレーション・プラットフォームです。

ロード・バランシングとは

ロード・バランシングとは、アプリケーションの可用性を最適化し、エンド・ユーザー・エクスペリエンスを確実に向上させるために、ネットワーク・トラフィックを複数のサーバー間で効率的に分散するプロセスです。

次のステップ

Red Hat OpenShift on IBM Cloudは、エンタープライズ ワークロードをKubernetesクラスターにコンテナ化してデプロイするための高速かつ安全な方法を開発者に提供します。セキュリティ管理、コンプライアンス管理、展開管理、継続的なライフサイクル管理を含む、面倒で反復的なタスクの負荷を軽減します。

Red Hat OpenShift on IBM Cloudの詳細はこちら 無料で始める