Docker Composeコマンドについて
Docker Composeは、複数のコンテナを一括管理できる便利なツールだ。プロジェクトの環境変数(.env
)、docker-compose.yml
ファイル、Dockerfile
を変更した際に、どのコマンドを使用して再起動すればよいのかを理解することが重要だ。それぞれの場合について詳しく説明する。
Dockerの基本概念: イメージとコンテナ
Dockerを理解する上で重要な「イメージ」と「コンテナ」という概念について簡単に説明する。
イメージとは?
Dockerイメージは、アプリケーションを動かすためのテンプレートや設計図だ。イメージには、アプリケーションの実行に必要なすべてのファイル、設定、依存関係が含まれている。
-
特徴:
- 不変: イメージは読み取り専用で変更されない。
- 軽量: 必要なものだけを含むことで効率的に動作する。
- 再利用可能: 同じイメージを使って複数のコンテナを作成できる。
-
例:
-
nginx:latest
: Nginxの最新バージョンが含まれるイメージ。 -
mysql:8.0
: MySQL 8.0を実行するためのイメージ。
-
コンテナとは?
Dockerコンテナは、イメージを基に実行される実際のアプリケーションの動作環境だ。イメージが設計図なら、コンテナはその設計図を元に動作している「実行中のインスタンス」と言える。
-
特徴:
- 軽量: 必要なものだけを含み、リソース消費が少ない。
- 分離: 他のコンテナやホストシステムと隔離された環境で動作する。
- 短命: コンテナは使い捨てが基本。停止したら削除し、必要なら再作成する。
-
イメージとコンテナの関係:
- イメージ → 設計図
- コンテナ → 実際に動作するインスタンス
-
例:
-
nginx:latest
から起動したコンテナ → 実際にWebサーバを提供しているプロセス。
-
イメージやコンテナが関係するコマンドの動作
1. .env
の変更時
.env
ファイルを変更した場合、既存のコンテナに環境変数の変更は反映されない。なぜなら、環境変数はコンテナの作成時にイメージからコピーされるためだ。
docker-compose down
docker-compose up -d
-
理由:
-
docker-compose down
で古いコンテナを削除し、新しい環境変数を持つコンテナを再作成する。
-
2. docker-compose.yml
の変更時
docker-compose.yml
を変更した場合、Composeはその差分を検出して影響するサービスのコンテナだけを再作成する。この場合、イメージ自体の再ビルドは行われない。
docker-compose up -d
-
理由:
- Composeは既存のイメージを使用して変更部分のみを再構築する。これは効率的で、変更のないサービスに影響を与えない。
3. Dockerfile
の変更時
Dockerfile
が変更された場合、イメージを再ビルドしてから新しいイメージを使ってコンテナを再作成する必要がある。
docker-compose up -d --build
-
理由:
-
Dockerfile
の変更はイメージの設計図を更新することに相当する。そのため、--build
オプションを付けて新しいイメージを作成する必要がある。
-
まとめ
Dockerを効果的に活用するためには、「イメージ」と「コンテナ」の違いを理解し、それに応じた適切なコマンドを選択することが重要だ。
- イメージ: アプリケーションの設計図(読み取り専用)。
- コンテナ: イメージを実行するインスタンス(動作中の環境)。
再起動のコマンドまとめ
状況 | コマンド | 理由 |
---|---|---|
.env ファイルを変更した場合 |
docker-compose down && docker-compose up -d |
環境変数を再読み込みするためにコンテナを再作成する必要がある。 |
docker-compose.yml を変更した場合 |
docker-compose up -d |
差分を検出して必要なサービスのみ再作成する。 |
Dockerfile を変更した場合 |
docker-compose up -d --build |
新しいイメージをビルドし、コンテナを再作成する。 |