Docker イメージとコンテナの違い
Docker イメージとコンテナはアプリケーションデプロイテクノロジーです。これまで、アプリケーションを実行するには、マシンのオペレーティングシステムに合ったバージョンをインストールする必要がありました。しかし、現在は、あらゆるタイプのデバイスやオペレーティングシステムで実行される単一のソフトウェアパッケージ (コンテナ) を作成できます。Docker は、ソフトウェアをコンテナにパッケージ化するソフトウェアプラットフォームです。Docker イメージは、コンテナ作成の手順を含む読み取り専用のテンプレートです。Docker イメージは、アプリケーションを実行するためにコンテナ内で必要なライブラリと依存関係のスナップショットまたはブループリントです。
Docker イメージやコンテナが使われる理由
コンテナを使用すると、デベロッパーはソフトウェアをパッケージ化し、あらゆるターゲットシステム上で実行できるようになります。以前は、さまざまなターゲットシステム専用のソフトウェアをパッケージ化する必要がありました。たとえば、アプリケーションを macOS と Windows で実行したい場合、アプリケーションの設計を変更して、さまざまなシステム用にパッケージ化する必要がありました。
コンテナ化により、ソフトウェアアプリケーションを分散型のクロスプラットフォームのハードウェアアーキテクチャ全体で、マイクロサービスとして実行できます。コンテナはポータブルなので、これらのソフトウェアアプリケーションはほとんどすべてのマシンで実行でき、迅速にデプロイできます。たとえば、エンタープライズアプリケーションには何百ものマイクロサービスがあるかもしれません。専用のデータセンターやクラウド内の複数のマシン、および仮想マシン (VM) にわたってコンテナとして実行できます。
仕組み: Docker イメージと作成と管理
Docker は、ソフトウェアをコンテナにパッケージ化してターゲットマシン上で実行できるコンテナ化プラットフォームです。Docker コンテナは、Docker エンジンがインストールされているマシンまたは仮想マシン上で実行されます。また、基盤となるシステムアーキテクチャの知識なしに実行されます。Docker エンジンは、Linux オペレーティングシステムでのみ実行されます。Docker コンテナは、Docker コンテナ化プラットフォームを使用して作成されたコンテナです。あまり一般的ではないコンテナ化プラットフォームは他にもあります。
Docker コンテナの仕組み
Docker コンテナは、コード、依存関係、およびライブラリなど、ホストマシンの依存関係を使用せずにアプリケーションコードを実行するために必要なすべてのコンポーネントを備えたランタイム環境です。このコンテナランタイムは、サーバー、マシン、またはクラウドインスタンスのエンジン上で実行されます。エンジンは、利用可能な基盤となるリソースに応じて複数のコンテナを実行します。
複数のコンテナをデプロイしてスケールし、異なるマシンや仮想マシン間で効果的に通信するには、Kubernetes のようなコンテナオーケストレーションプラットフォームが必要です。これは、お客様のマシンがオンプレミスかクラウド内にあるかに関わらず役立ちます。Kubernetes は、コンテナオペレーションのコンテキスト内で、クラスターと呼ばれる複数のマシンを管理します。
Docker イメージの仕組み
Docker イメージ、またはコンテナイメージは、コンテナーの作成に使用されるスタンドアロンの実行可能ファイルです。このコンテナイメージには、コンテナの実行に必要なすべてのライブラリ、依存関係、およびファイルが含まれています。Docker イメージは共有可能でポータブルなため、ソフトウェアのバイナリファイルのように、同じイメージを一度に複数の場所にデプロイできます。
イメージをレジストリに保存し、複雑なソフトウェアアーキテクチャ、プロジェクト、ビジネスセグメント、およびユーザーグループのアクセスを追跡できます。たとえば、パブリック Docker Hub レジストリには、オペレーティングシステム、プログラミング言語フレームワーク、データベース、およびコードエディターなどのイメージが含まれています。
キーコマンド: Docker イメージと作成と管理
Docker コンテナを操作するには、パラメータ付きのコマンドを使用します。標準のコマンド形式は docker [options] [command] [arguments] です。
コンテナコマンド
次の表には、頻繁に使用されるコンテナコマンドが含まれています。Docker ドキュメントには、さらにいくつかのリストがあります。
コマンド |
説明 |
docker ps -a |
すべてのコンテナを一覧表示します。-a フラグは、実行中のコンテナと実行されていないコンテナの両方を表示します。実行中のコンテナのみを表示するには、このフラグを省略することができます。 |
docker rename [container] [new_name] |
指定されたコンテナの名前を new_name に変更します。 |
docker start [container] |
指定されたコンテナを実行します。 |
docker stop [container] |
指定されたコンテナを停止します。 |
docker wait [container] |
実行中の他のコンテナが停止するまで、指定されたコンテナを待機させます。 |
イメージコマンド
イメージコマンドはコンテナコマンドより少ないです。
Docker build -t image_name . |
現在のディレクトリのファイルから image_name というタグが付けられた Docker イメージを構築します。 |
docker create [image] |
指定されたイメージから実行されていないコンテナを作成します。 |
docker run [image] |
指定されたイメージに基づいてコンテナを作成し実行します。 |
Docker イメージから Docker コンテナを作成
特定の Docker イメージからコンテナを作成するには、マシン上でエンジンを起動します。次に、基本的な Docker run コマンドを使用します。
コマンドの例を次に示します。
docker run -it MyImage bash
このコマンドは、MyImage という名のイメージファイルからコンテナを作成します。-it は、実行中のコンテナ内に擬似ターミナルを作成します。また、コマンドとして bash を指定すると、コンテナー内で bash ターミナルが開きます。
主な相違点: Docker イメージと作成と管理
Docker コンテナは、自己完結型で実行可能なソフトウェアアプリケーションまたはサービスです。一方、Docker イメージは、コンテナを実行するためにコンテナにロードされるテンプレートであり、一連の手順のようなものです。
共有と再利用のためにイメージを保存しますが、コンテナの作成と破棄はアプリケーションのライフサイクル全体で行います。次に、さらに相違点を示します。
ソース
Docker イメージは、設定ファイルに似た、人間が読めるテキストファイルである Dockerfile から作成します。Dockerfile には、イメージを構築するためのすべての手順が含まれています。イメージを構築するには、Dockerfile と関連付けられているすべてのライブラリや依存関係をフォルダーに配置する必要があります。
これとは対照的に、Docker コンテナは Docker イメージファイルから直接作成します。
構成
Docker イメージファイルは、ファイルサイズを小さく保つためにイメージレイヤーで構成されています。 各レイヤーは、イメージに加えられた変更を表します。レイヤーは読み取り専用で、複数のコンテナー間で共有できます。
イメージインスタンスである Docker コンテナにはレイヤーも含まれています。ただし、上にはコンテナレイヤーと呼ばれる書き込み可能なレイヤーがもう 1 つあります。コンテナレイヤーは読み取り/書き込みアクセスを許可します。また、コンテナ内で行われた変更を、同じイメージに基づいて他のコンテナから分離することもできます。
可変性
Docker イメージは変更不可能です。つまり、一度作成すると変更することはできません。イメージに変更を加える必要がある場合は、必要な変更を加えて新しいイメージを作成する必要があります。
これとは対照的に、コンテナは変更可能で、ランタイム時に変更できます。コンテナ内で行われた変更はその特定のコンテナに限定され、関連付けられているイメージには影響しません。変更の例としては、新しいファイルを書き込んだり、ソフトウェアをインストールしたり、または設定を変更する場合などがあります。
使用する場面: Docker イメージと作成と管理
ソフトウェアを作成してデプロイする際に、Docker イメージとコンテナーを互いに組み合わせて使用できます。
コンテナを使用してアプリケーションを一度構築すれば、どこでも実行できます。必要に応じて、コンテナーをすばやく起動、停止、および再起動できます。そのため、アプリケーションの需要に応じて簡単にスケールアップまたはスケールダウンができます。
ただし、イメージとコンテナの両方を使えば、管理はより簡単になります。たとえば、両方を一緒に使用する方法は次のとおりです。
- 同じイメージに基づいて複数のコンテナインスタンスを実行して、アプリケーションを水平方向にスケールします。
- 開発、テスト、本番環境にさまざまなイメージを使用することで、継続的インテグレーションとデプロイ (CI/CD) パイプラインを自動化します。
- さまざまなバージョンのイメージにタグを付けて管理します。これにより、必要に応じて特定のバージョンをロールバックまたはデプロイできます。
相違点のまとめ: Docker イメージと作成と管理
Docker イメージ |
Docker コンテナ |
|
内容 |
コンテナの作成に使用される、再利用可能で共有可能なファイル。 |
ランタイムインスタンス: 自己完結型のソフトウェア。 |
作成元 |
ソフトウェアコード、依存関係、ライブラリ、および Dockerfile。 |
イメージ。 |
構成 |
読み取り専用レイヤー。 |
読み取り専用レイヤーの上の追加の読み取り/書き込みレイヤー。 |
可変性 |
変更不可能。変更がある場合は、新しいファイルを作成する必要があります。 |
変更可能。必要に応じてランタイム時に変更できます。 |
使用する場面 |
アプリケーション設定詳細をテンプレートとして保存する。 |
アプリケーションを実行する。 |
AWS はコンテナとイメージの要件にどのように役立ちますか?
Amazon Web Services (AWS) には、コンテナイメージを安全に保管し管理できるさまざまなサービスがあります。
コンテナをいつどこで稼働させるかを管理するオーケストレーションと、コンテナを強化する柔軟なコンピューティングエンジンを提供します。AWS は、コンテナとそのデプロイを管理するのを支援できるため、基盤となるインフラストラクチャについて心配する必要はありません。詳細については、「AWS のコンテナ」を参照してください。
Amazon Elastic Container Registry (Amazon ECR) は、ハイパフォーマンスホスティングを提供するフルマネージドコンテナレジストリです。そのため、アプリケーションイメージやアーティファクトをどこにでも確実にデプロイできます。コンテナベースのアプリケーションを構築するデベロッパーは、Amazon ECR Public から Docker 公式イメージを直接検索してダウンロードできるようになりました。
Amazon Elastic Container Service (Amazon ECS) は、フルマネージドのコンテナオーケストレーションサービスです。これにより、コンテナ化されたアプリケーションのデプロイ、管理、およびスケールが簡単になります。Amazon ECS はタスク定義の Docker イメージを使用してコンテナを起動します。
今すぐアカウントを作成して、AWS で Docker の使用を開始しましょう。