コンテナーと Docker の概要

コンテナリゼーションは、ソフトウェア開発のアプローチであり、アプリケーションまたはサービス、その依存関係、その構成 (展開マニフェスト ファイルとして抽象化) がコンテナー イメージとしてパッケージ化されます。 コンテナー化アプリケーションは、ユニットとしてテストし、ホスト オペレーティング システム (OS) にコンテナー イメージ インスタンスとして展開することができます。

輸送用のコンテナーが、内部の貨物に関係なく商品を船舶、列車、またはトラックによって輸送できるのと同様に、ソフトウェア コンテナーは、別のコードと依存関係を含めることができるソフトウェア デプロイの標準的なユニットとして機能します。 ソフトウェアをこのようにコンテナー化することで、開発者や IT プロフェッショナルは、ほとんどまたはまったく変更せずに環境全体にソフトウェアを展開できます。

コンテナーは、共有 OS 上で個々のアプリケーションも分離します。 コンテナー化アプリケーションは、さらに、OS (Linux または Windows) で実行されているコンテナー ホスト上で実行されます。 したがって、コンテナーは、仮想マシン (VM) のイメージよりもフット プリントが大幅に小さくなります。

各コンテナーは、図 2-1 に示すように、Web アプリケーションまたはサービスの全体を実行することができます。 この例では、Docker ホストが、コンテナー ホストであり、App1、App2、Svc 1、および Svc 2 はコンテナー化アプリケーションまたはサービスです。

VM またはサーバーで実行されている 4 つのコンテナーを示す図。

(図 2-1) 。 コンテナー ホストで実行されている複数のコンテナー

コンテナリゼーションのもう 1 つの利点はスケーラビリティです。 短期的なタスク用の新しいコンテナーを作成することでに簡単にスケール アウトできます。 アプリケーションの観点から、イメージのインスタンス化 (コンテナーの作成) は、サービスまたは Web アプリのようなプロセスのインスタンス化に似ています。 ただし、信頼性のために、同じイメージの複数のインスタンスを複数のホスト サーバーで実行するときには通常、各コンテナー (イメージのインスタンス) を異なるフォールト ドメイン内の別のホスト サーバーまたは VM で実行します。

つまり、コンテナーには、アプリケーション ライフサイクル ワークフロー全体にわたり、分離、移植性、敏捷性、スケーラビリティ、およびコントロールの利点があります。 最も重要な利点は、開発と運用間で提供される環境の分離です。