Trace Id is missing
メイン コンテンツにスキップ

コンテナーとは

アプリケーションのための、標準化された移植可能パッケージ。

コンテナーの説明

輸送業界では物理的なコンテナーを使用してさまざまな貨物を、たとえば船舶や列車での輸送用に分離していますが、これと同様にソフトウェア開発テクノロジでも、コンテナ化と呼ばれるアプローチがますます利用されるようになっています。

ソフトウェアの標準パッケージが「コンテナー」と呼ばれ、これによってアプリケーションのコードと、関連する構成ファイルおよびライブラリがまとめられ、そのアプリの実行に必要な依存関係もまとめられます。これで、開発者と IT 担当者がアプリケーションをシームレスに、さまざまな環境にデプロイできます。

コンテナーを検討する必要がある理由

アプリケーションをある環境から別の環境に移動したときに正しく実行できないという問題は、ソフトウェア開発そのものと同じぐらい古くからあるものです。このような問題は一般的に、構成や基になるライブラリの要件およびその他の依存関係における相違が原因で発生します。

この問題に対処するために、コンテナーによってアプリケーションのパッケージとデプロイのための軽量で不変のインフラストラクチャが提供されます。1 つのアプリケーションまたはサービス、その依存関係、およびその構成が、コンテナー イメージとしてまとめてパッケージ化されます。コンテナー化されたアプリケーションは、1 つのユニットとしてテストでき、コンテナー イメージ インスタンスとしてホスト オペレーティング システムにデプロイできます。

このように、コンテナーを利用すると、開発者と IT 担当者はアプリケーションを複数の環境にデプロイすることを、変更はほとんどまたはまったく不要で行うことができます。

コンテナーの起源と優れた特長の詳しい説明をご覧ください。

白いマーカーでダイアグラムを描いている人。

コンテナーと仮想マシンの比較

人々が仮想化について考えるとき、多くの場合は仮想マシン (VM) が思い浮かびます。実際に、仮想化には多くの形態があり、コンテナーはその 1 つです。では、VM とコンテナーの違いは何でしょうか?

概要レベルでは、VM とは基になるハードウェアを仮想化するものであり、これで複数のオペレーティング システム (OS) インスタンスをそのハードウェア上で実行できるようになります。各 VM では OS が実行され、基になるハードウェアを表す仮想化リソースへのアクセスが可能です。

VM には多くの利点があります。これに含まれるものとしては、さまざまなオペレーティング システムを同じサーバー上で実行できることや、物理リソースの使用の効率とコスト効果が向上すること、およびサーバーのプロビジョニングの高速化などがあります。その反面、各 VM に OS イメージ、ライブラリ、アプリケーションなどが含まれているため、非常にサイズが大きくなる可能性があります。

コンテナーによって、基盤の OS が仮想化され、コンテナー化されたアプリからは、そのアプリ専用の OS (これには CPU、メモリ、ファイル ストレージ、ネットワーク接続が含まれます) があるように認識されます。基盤の OS とインフラストラクチャにおける相違が抽象化されているため、基本イメージに一貫性がある限り、そのコンテナーはどこにでもデプロイして実行できます。開発者にとって、これは非常に魅力的です。

複数のコンテナーでホスト OS が共有されるので、OS を起動したり、ライブラリを読み込んだりする必要はありません。これで、コンテナーをはるかに効率的かつ軽量にすることができます。コンテナー化されたアプリケーションは数秒で起動でき、VM のシナリオと比較すると、マシン上に収容できるそのアプリケーションのインスタンス数は、はるかに多くなります。共有 OS のアプローチには、追加の利点として保守のオーバーヘッド (パッチ適用や更新など) の減少があります。

コンテナーは移植可能ですが、その定義の対象であるオペレーティング システムに限定されます。たとえば、Linux 用のコンテナーを Windows 上で実行することはできず、その逆も同じです。

コンテナーを使用する理由

アジリティ

開発者がアプリケーションをビルドおよびパッケージしてコンテナーを作成し、これを IT に渡して標準化プラットフォーム上で実行させるようにすると、アプリケーションのデプロイの全体的な労力が減り、開発とテストのサイクル全体を効率化することができます。これによって、開発と運用のチーム間のコラボレーションと効率も向上し、アプリのリリースまでの時間を短縮できます。

移植性

コンテナーを利用すると、目的のアプリケーションの実行に必要なすべてのコンポーネントをパッケージ化して保持するための形式を標準化できます。これで、"自分のマシン上では動作する" という一般的な問題が解決し、OS プラットフォーム間やクラウド間での移植性が実現します。コンテナーはいつ、どこにデプロイされても、一貫性のある環境で実行されます。この環境がデプロイのたびに変化することはありません。つまり、開発ボックスから運用まで一貫した形式が保たれることになります。

迅速なスケーラビリティ

コンテナーには、VM の一般的なオーバーヘッド (たとえば別々の OS インスタンス) がないため、より多くのコンテナーを同じインフラストラクチャ上でサポートすることができます。コンテナーには軽量という性質があるため、起動と停止をすばやく行うことができ、迅速なスケールアップとスケールダウンのシナリオが可能になります。

ユース ケース

クラウドネイティブのアプリケーション

クラウドネイティブのアプリケーションでは、さまざまな環境 (パブリック、プライベート、ハイブリッドなど) の共通の運用モデルとしてコンテナーが使用されます。コンテナーは低オーバーヘッドかつ高密度であるため、多くのコンテナーを同じ仮想マシン内でホストすることができ、したがってクラウドネイティブ アプリケーションのデリバリーに最適です。

リフト アンド シフト

組織はクラウドに移行することによって大きなメリットを得ることができますが、既存のアプリケーションを書き換えることができない場合があります。コンテナーを使用すると、コードの変更は一切不要でアプリケーションをクラウドに移行できる可能性があります。

バッチ

バッチ処理とは、人間の介入なしで実行できる、またはリソースが利用可能である場合に実行できるアクティビティを指します。例としては、レポートの生成、画像のサイズ変更、ファイル形式の変換などがあります。コンテナーは、環境と依存関係の管理は不要でバッチ ジョブを簡単に実行する手段となります。Azure Container Instances (ACI) などの動的コンピューティング オプションを使用して、ソース データを効率的に取り込み、処理し、Azure Blob Storage などの耐久性のあるストアに保存することができます。静的にプロビジョニングされる仮想マシンの代わりにこのようなアプローチを使用すると、請求が秒単位のため大幅なコスト削減を実現できます。

機械学習

機械学習では、データにアルゴリズムが適用され、データ内で検出されたパターンに基づいて予測が行われます。コンテナーを使用すると、機械学習アプリケーションを自己完結にすることができ、どの環境でも簡単にスケーラブルになります。

タブに戻る

コンテナーを越えて

コンテナーのメリットを最大化するには、アジリティ、セキュリティ、スケールの実現に役立つ、コンテナー最適化されたツールとサービスが含まれている完全なソリューションを検討してください。

オーケストレーション

コンテナーを大規模に実行するには、分散型でコンテナー化されたアプリケーションのオーケストレーションと管理を、Kubernetes などのオーケストレーション プラットフォームを介して行う必要があります。

セキュリティ

コンテナーを使用するには、コンテナー イメージからクラスター分離に至るまでの、複数層アプローチが必要です。これらのガードレールの構成と CI/CD パイプラインのセットが、最高の組み合わせです。

サーバーレス コンテナー

コンテナー オンデマンドでさらにアジリティを向上させることができます。サーバーレス コンテナー テクノロジを使用すると、サーバーの管理や、トラフィック急増時の Kubernetes クラスターからのバーストは不要で、コンテナーを簡単に実行することができます。

Azure DevOps

DevOps

コンテナーを使用すると、開発者は IT と運用環境の間でソフトウェアと依存関係を簡単に共有できます。DevOps プラクティスと組み合わせると、コードのリリースを効果的にスピードアップするとともにソフトウェア開発サイクルを短縮することができます。

準備ができたら、Azure でコンテナーと Kubernetes を無料でお試しください 
無料で始める