コンテナとは

公開日 2024年05月9日
Many laptop computers seamless texture make by paper.
By Stephanie Susnjara and 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%です。

コンテナとVirtual Machinesの比較

コンテナについて理解を深める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、クラウド、オンプレミスなど)間で再構成する必要なく実行できます。

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

コンテナは、プラットフォーム間での移植性と一貫性に加え、サイズが小さいことから、小規模なコード変更を継続的にデプロイして構築されるDevOpsサーバーレスマイクロサービスなどの最新の開発手法やアプリケーション・アーキテクチャーに最適です。

使用率の向上

VMと同様に、コンテナを使うと、開発者やオペレーターは物理マシンのCPUやメモリの使用率を上げることができます。コンテナのさらに優れている点は、マイクロサービス・アーキテクチャーも可能にするため、アプリケーション・コンポーネントをより細かくデプロイして拡張できることです。 これは、単一のコンポーネントの負荷が増大したためにモノリシック・アプリケーション全体をスケールアップしなければならない場合に比べて、魅力的な代替オプションです。

市場投入までの時間の短縮

コンテナはシステム・リソースへの依存度が低いため、VMよりも管理とデプロイが速くなります。この機能によって、アプリケーションの導入にかかる費用と時間を削減でき、市場投入までの時間を最適化できます。

IBMの調査では、開発者とIT幹部がコンテナを使用したことによるその他の多くのメリットを報告しています。レポート全文をご覧ください: 「 企業におけるコンテナ」

IBM DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

コンテナ化とは

コンテナは、コンテナ化、つまりオペレーティング・システム(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 Foundation(CNCF)8にKubernetesを寄贈しました。CNCFは、Linux Foundationの後援の下で運営されているオープンソースかつベンダーに依存しないクラウドネイティブ・コンピューティングのハブです。以来、Kubernetesは、コンテナベースのワークロードの実行に世界で最も広く使用されるコンテナ・オーケストレーション・ツールになりました。CNCFレポートによると9、KubernetesはLinuxに次いで世界で2番目に大きなオープンソース・プロジェクトであり、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など)から従量課金制の料金体系モデルを通じて提供されており、ユーザーは使用したサービスのみに対して料金を支払います。

コンテナのユースケース

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

マイクロサービス

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

DevOps

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

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

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

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

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

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

執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

関連ソリューション
IBM Instana Observability

AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。

IBM Instana Observabilityはこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。

DevOpsソリューションはこちら
クラウド・コンサルティング・サービス

ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。

クラウド・コンサルティング・サービスはこちら
次のステップ

IBM Instana®によるプロアクティブな問題検知から、スタック全体にわたるリアルタイムの洞察まで、クラウドネイティブ・アプリケーションの安定した稼働を維持できます。

  1. IBM Instanaの詳細を見る
  2. DevOpsソリューションはこちら