コンテナとは

コンテナは、アプリケーションコード、ランタイム、システムライブラリ、システムツールなど、あらゆる環境で実行するために必要なすべてのファイルと依存関係を備えたソフトウェアのパッケージです。オペレーティングシステムが仮想化されているため、コンテナは開発、テスト、本番環境で実行できます。また、個人のデバイスからパブリッククラウド、プライベート・データ・センターまで、あらゆるコンピューティング環境で実行できます。

コンテナの仕組み

コンテナには複数のコンポーネントが含まれます。

  • コンテナイメージは、コンテナの実行に必要なすべての情報を含む、完全で静的な軽量の実行可能ソフトウェアパッケージです。コンテナイメージにはいくつかの形式があります。最も一般的な形式は Open Container Initiative(OCI)です。
  • コンテナエンジンは、リポジトリからコンテナイメージにアクセスし、それを実行します。最も一般的なコンテナエンジンには、Docker、CRI-O、Containerd、runC、LXD、RKT などがあります。コンテナエンジンは、個人のデバイス、物理サーバー、クラウドなど、あらゆるコンテナホスト上で実行できます。
  • コンテナは、コンテナエンジンによって実行されるコンテナイメージです。ホスト・オペレーティング・システム(通常は Linux、Mac、Microsoft Windows)は、CPU、メモリー、ストレージなどのリソースに対するコンテナのアクセス能力を制限し、1 つのコンテナが過剰な量の物理リソースを消費するのを防ぎます。
  • コンテナスケジューラーとオーケストレーションテクノロジーは、コンテナの展開と実行を管理します。

コンテナ化とは

コンテナ化は、ソフトウェアコードをオペレーティングシステム、ライブラリ、設定ファイル、およびコードの実行に必要なその他の依存関係にバンドルするタスクです。アプリケーションをコンテナ化することで、「一度ビルドすればどこでも実行できる」というソフトウェア開発のアプローチがもたらされ、開発者はアプリケーションをより迅速かつ安全に作成して展開できるようになります。

コンテナが必要である理由

デジタルトランスフォーメーション(https://www.akamai.com/ja/glossary/what-is-digital-transformation)によって世界の結びつきが強まったため、アプリケーションはさまざまな環境で動作することを求められることが多くなっています。これまで、多くのアプリケーションは、別の環境へ移動する際、変更を加えなければ正しく動作しませんでした。これは主に、基盤となるインフラや依存関係の設定が異なるためです。

コンテナは、アプリケーションの実行に必要なすべてのものを含む軽量インフラにソフトウェアをパッケージ化することで、この問題を解決します。そうすることで、コンテナは開発者や IT チームがコードを変更することなく、環境にソフトウェアを展開できるようにします。その結果、IT チームはさまざまなマシンや環境で一貫したふるまいを期待できるようになります。開発者は、修正されたコードが多様な環境に適合するかどうかを心配することなく、コードに変更を加え、コンテナに新しい依存関係を追加できます。

コンテナと仮想マシンの違い

仮想マシン(VM)も仮想コンピューティングモデルの 1 つです。VM はハイパーバイザーを使用して、サーバーの実行に必要な物理ハードウェアを仮想化します。各 VM には、アプリケーション、ライブラリ、依存関係とともにゲスト・オペレーティング・システムが含まれます。VM は大量のシステムリソースを消費する可能性があります。複数の VM(それぞれにゲスト OS がある)が同じ物理サーバー上で実行される場合はなおさらです。

一方、コンテナテクノロジーはハードウェアレベルではなく OS レベルで仮想化され、複数のコンテナが同じホスト OS またはシステムカーネルを共有します。その結果、コンテナは OS カーネルを共有するため、必要なメモリーの量が VM と比べて極めて少なくなります。そのため、コンテナは数秒で起動できますが、VM は数分かかる場合があります。

コンテナの目的

コンテナは複数のユースケースに対応します。

  • DevOps:コンテナを使用することで、アプリケーション開発チームは、DevOps、継続的インテグレーションおよび継続的デリバリー(CI/CD)、サーバーレスフレームワークのクラウドネイティブ開発モデルを採用できます。
  • マイクロサービス:コンテナは軽量であるため、複数の疎結合された小さなサービスでソフトウェアが構成されるマイクロサービスアーキテクチャに最適です。
  • クラウドコンピューティング:コンテナはどこでも一貫したパフォーマンスを提供するため、パブリッククラウド環境とプライベート・データ・センター環境間でワークロードを移動できるマルチクラウドハイブリッドクラウドの展開に最適です。
  • クラウド移行:IT チームがアプリケーションのクラウド移行を準備する際に、コンテナはアプリケーションを現代化するためによく使用されます。また、コンテナは、移行時にリファクタリングされるサービスにも最適です。

コンテナのメリット

コンテナには、次のような多くのメリットがあります。

  • 効率性の向上:ホストと同じオペレーティング・システム・カーネルを共有しているため、コンテナは VM よりも効率的です。
  • 管理が容易:コンテナを使用すると、アプリケーションの迅速な展開、パッチ適用、スケーリングが可能になります。
  • ワークロードポータビリティ:コンテナを使用することで、IT チームは Linux、Windows、Mac のオペレーティングシステム、VM または物理サーバー、個々のデバイス、オンプレミスのデータセンター、クラウドなど、あらゆる場所にワークロードを展開して実行できます。
  • 一貫性のあるパフォーマンス:コンテナは、複数のオペレーティングシステムとプラットフォームで信頼性の高いパフォーマンスを提供します。
  • オーバーヘッドの削減:従来のコンピューターや VM と比較して、コンテナはメモリー、CPU、ストレージに関するシステムリソース要件がはるかに少ないです。そのため、同じインフラでより多くのコンテナをサポートできます。
  • 利用の最適化:コンテナでマイクロサービスアーキテクチャを実現することにより、アプリケーションコンポーネントをきめ細かく展開してスケーリングすることが容易になります。単一のコンポーネントでワークロードを管理できない場合でも、アプリケーション全体をスケールアップする必要がなくなります。

コンテナオーケストレーションとは

コンテナオーケストレーションは、組織全体で複数のコンテナ展開を管理するタスクです。コンテナオーケストレーターは、コンテナ管理のライフサイクルを自動化するプラットフォームです。これには、プロビジョニングと展開、リソース割り当て、アップタイムの維持、スケールアップとスケールダウン、サービス探索、ネットワーキング、ストレージ、セキュリティなどのタスクが含まれます。

オーケストレーションにより、コンテナがどこに展開されるか、複数のコンテナ間でワークロードがどのように割り当てられるかを可視化し、制御できます。オーケストレーションにより、コンテナを手動で管理する必要がなくなり、IT チームはコンテナのグループにポリシーを選択的にまたはまとめて適用できます。

Kubernetes は最も有名なコンテナ・オーケストレーション・プラットフォームであり、パブリッククラウド、オンプレミス、エッジネットワークなど、あらゆるインフラに展開できます。Red Hat® OpenShift® は、あらゆるインフラでフルスタックの自動運用を実現する企業向けの Kubernetes プラットフォームであり、コンテナを構築するためのセルフサービス環境も備えています。

コンテナに対するセキュリティ上の脅威

コンテナを使用することで、IT チームはどこにでもソフトウェアを展開し、アプリケーションを迅速に開始できますが、セキュリティ上の懸念も生じます。開発者と IT チームは、コンテナが攻撃者に悪用されるのを防ぐために、次のようないくつかの対策を講じることができます。

  • セキュリティのベストプラクティスを採用し、アプリケーション/コードレベルの検証を追加する
  • Kubernetes などの安全なサービスでコンテナを実行する
  • クラスターレベルのネットワーク制限を追加して、不正なトラフィックをフィルタリングする
  • クラウドレベルで安全性と信頼性の高いコンテナプラットフォームを選択する
  • コンテナイメージをスキャンし、マルウェアがないか確認する
  • コンテナレジストリで強力な制御を適用する
  • セキュリティツールを使用して、コンテナの実行中にアクティブになる可能性のある脆弱性に対処する

よくある質問

コンテナは数十年前に登場しましたが、現代のコンピューティング時代の需要に対応するために、2013 年に Docker によって再導入されました。

Docker は、共通のオペレーティングシステム上で仮想アプリケーションコンテナを作成、展開、管理するためのオープンソースプラットフォームです。Docker プラットフォームは、コンテナのパッケージ化、プロビジョニング、実行を行い、OS カーネル内でリソース分離を使用して同じオペレーティングシステム上で複数のコンテナを実行します。

Kubernetes は、コンテナ化されたアプリケーション、ワークロード、サービスを自動化、展開、スケーリング、管理するためのオープンソースのコンテナ・オーケストレーション・プラットフォームです。

Open Container Initiative(OCI)は、Linux Foundation 傘下のオープンなガバナンス組織であり、コンテナ形式とランタイムに関するオープンな業界標準の作成に取り組んでいます。

Akamai が選ばれる理由

Akamai はサイバーセキュリティとクラウドコンピューティングを提供することで、オンラインビジネスの力となり、守っています。市場をリードするセキュリティソリューション、優れた脅威インテリジェンス、そして世界中の運用チームが、あらゆるところで企業のデータとアプリケーションを多層防御で守ります。Akamai のフルスタック・クラウドコンピューティング・ソリューションは、世界で最も分散されたプラットフォーム上で、パフォーマンスと手頃な価格を両立します。安心してビジネスを展開できる業界トップクラスの信頼性、スケール、専門知識の提供により、Akamai はグローバル企業の信頼を獲得しています。

Akamai の全セキュリティソリューションをご紹介