Dockerにおいて、コンテナとイメージは密接に関連していますが、異なる役割を持つ概念です。以下にその違いをわかりやすく説明します。
目次
コンテナとは
- 概要:
- 動作中のアプリケーションの実行環境。
- イメージを基にして作られる「実体化されたもの」。
- コンテナは「プロセス」として動作し、ホストマシン上で実行されます。
- 特徴:
- 一時的: コンテナは停止または削除すると消える。一部のデータは保持(永続化)可能。
- 可変性: コンテナ内での変更(ファイルの作成・削除など)は実行中のみ有効。
- 実行環境: アプリケーション、ライブラリ、設定ファイルなどを含む。
- 例:
- 実行中のWebサーバー(例: Nginxコンテナ)。
- データベース(例: MySQLコンテナ)。
- 作成コマンド:
docker run -d --name my-container my-image
イメージとは
- 概要:
- コンテナを作成するための設計図やテンプレート。
- アプリケーション、ライブラリ、設定ファイル、依存関係が含まれる読み取り専用のファイルシステム。
- 特徴:
- 不変性: イメージは変更されず、常に同じ状態を保つ。
- 再利用可能: 複数のコンテナを同じイメージから作成可能。
- 階層構造: イメージはレイヤーで構成され、効率的なストレージ利用が可能。
- 例:
- Ubuntuベースのイメージ(例:
ubuntu:latest
)。 - Webアプリケーション用に構築されたカスタムイメージ。
- Ubuntuベースのイメージ(例:
- 作成コマンド:
docker build -t my-image
コンテナとイメージの関係
- イメージからコンテナを作成:
- イメージを基にしてコンテナが作成されます。
- 例:
docker run
コマンドでイメージを指定すると、そのイメージからコンテナが生成されます。
- 実行中のコンテナはイメージに依存:
- イメージに保存されている内容(アプリケーションや設定など)を基に動作します。
- コンテナの変更をイメージ化できる:
- コンテナ内の変更を保存して新しいイメージを作成できます。
- コマンド例:
docker commit my-container new-image
具体例で比較
要素 | イメージ | コンテナ |
---|---|---|
役割 | 実行環境のテンプレート | 実行中のアプリケーションのインスタンス |
状態 | 読み取り専用 | 実行中で変更可能 |
作成コマンド | docker build | docker run |
寿命 | 永続(削除されるまで保持) | 一時的(停止・削除可能) |
変更の反映 | 再ビルドが必要 | commit でイメージとして保存可能 |
例: Nginxを使ったデプロイ
1. イメージを取得
docker pull nginx
- Nginxイメージ(
nginx:latest
)をローカルにダウンロード。
2. コンテナを作成
docker run -d --name my-nginx -p 80:80 nginx
- Nginxコンテナを作成し、ポート80で公開。
3. コンテナの変更
- コンテナ内で設定ファイルを編集。
docker exec -it my-nginx /bin/bash
4. 変更を保存(新しいイメージを作成)
docker commit my-nginx custom-nginx
custom-nginx
イメージが作成され、他のコンテナに再利用可能。
結論
- イメージ: コンテナを作成するためのテンプレート。不変で複数回使用可能。
- コンテナ: イメージを基に動作するアプリケーションのインスタンス。可変で一時的。
コメント