コンテナーとは

お客様のアプリケーション用に標準化されたポータブル パッケージ

コンテナーの説明

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

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

Docker を使ってみる

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

アプリケーションをある環境から別の環境に移動したときに正しく実行されない問題は、ソフトウェア開発と同じく古くからあるものです。このような問題は通常、構成の基になるライブラリの要件とその他の依存関係が異なるために発生します。

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

こうすることで、開発者や IT 担当者は、ほとんど、またはまったく変更を加えることなく、環境全体にアプリケーションをデプロイできます。

コンテナーの起源と優れた特長について詳しくご確認ください。

短いビデオの視聴

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

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

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

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

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

コンテナーはホスト OS を共有するため、OS を起動したり、ライブラリを読み込んだりする必要はありません。これにより、コンテナーをはるかに効率的かつ軽量にすることができます。コンテナー化されたアプリケーションは数秒で起動でき、VM のシナリオと比較して、さらに多くのアプリケーションのインスタンスをマシンに適合させることができます。共有 OS のアプローチには、修正プログラムの適用や更新プログラムなど、メンテナンスに関する負荷が少ないという利点があります。

コンテナーはポータブルですが、定義されているオペレーティング システムに制限されています。たとえば、Linux のコンテナーを Windows で実行することはできません。また、その逆も同じです。

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

機敏性

開発者がアプリケーションを構築してコンテナーにパッケージ化し、それを IT に提供して標準化されたプラットフォーム上で実行できるようにすると、アプリケーションをデプロイする全体的な手間が減り、開発とテストのサイクル全体を効率化することができます。これにより、開発および運用チームのコラボレーションと効率性が向上し、アプリをよりすばやくリリースできます。

移動が簡単

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

迅速なスケーラビリティ

コンテナーには、個別の OS インスタンスなど、VM の一般的な負荷がないため、同じインフラストラクチャ上でより多くのコンテナーをサポートすることができます。コンテナーの軽量な性質により、迅速なスケールアップとスケールダウンのシナリオを、簡単に開始および停止することができます。

ユース ケース

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

クラウドネイティブ アプリケーションは、パブリック、プライベート、ハイブリッドなど、環境全体で共通の運用モデルのコンテナーに依存しています。コンテナーの負荷を減らし、高密度を実現することで、多くのコンテナーを同じ仮想マシン内でホストすることができ、クラウドネイティブ アプリケーションの配信が最適化されます。

リフト アンド シフト

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

Batch

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

機械学習

機械学習では、データにアルゴリズムを適用し、データ内で検出されたパターンに基づいて予測を行います。コンテナーを使用すると、機械学習アプリケーションをあらゆる環境で自己完結かつ簡単に拡張できます。

コンテナーを越えて

コンテナーのメリットを最大限に活用するには、俊敏性、セキュリティ、スケールの実現に役立つコンテナー最適化ツールとサービスを含んでいる完全なソリューションを検討してください。

オーケストレーション

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

Azure を使用した Kubernetes の探索

セキュリティ

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

コンテナーと Kubernetes のセキュリティに関する基本事項を確認する

サーバーレス コンテナー

必要に応じて、コンテナーの機敏性をさらに向上させることができます。サーバーレス コンテナー テクノロジを使用すると、サーバーを管理したり、トラフィックが急増したときに Kubernetes クラスターからバーストしたりすることなく、コンテナーを簡単に実行することができます。

サーバーレス コンテナーを試す

DevOps

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

Azure での DevOps ガイドを見る

リソース

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