Dockerfile
とdocker-compose.yml
の役割や使い分け、関連性について説明しますね。
1. Dockerfile
- Dockerイメージを作成するための設計図です。
- 各ステップに従って、ソフトウェアや設定がイメージに組み込まれます。
- たとえば、
Dockerfile
には次のような情報を記述できます:- ベースイメージ(例:
FROM ubuntu:20.04
) - 必要なソフトウェアのインストールコマンド(例:
RUN apt-get install -y python3
) - アプリケーションの実行に必要な設定(例:
COPY
でアプリケーションファイルをコピーしたり、CMD
で実行コマンドを指定する)
- ベースイメージ(例:
使用例:
# ベースイメージを指定
FROM python:3.9
# アプリケーションコードをイメージにコピー
COPY . /app
# 作業ディレクトリを設定
WORKDIR /app
# 必要なパッケージをインストール
RUN pip install -r requirements.txt
# アプリケーションを起動するコマンド
CMD ["python", "app.py"]
2. docker-compose.yml
- 複数のコンテナを管理するための設定ファイルです。
- アプリケーションが複数のサービス(たとえば、Webサーバーとデータベース)で構成される場合、それらをまとめて起動・管理するのに便利です。
-
docker-compose.yml
では、どのDockerfile
を使うか、ネットワーク設定、ボリュームの設定、依存関係などを指定できます。 - コマンド一つで複数のコンテナを連携して起動したり停止したりできるので、開発やテストに非常に便利です。
使用例:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: example
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Dockerfileとdocker-compose.ymlの関連性
-
Dockerfile
は、各サービスのイメージの作成に必要で、個々のコンテナの動作環境を定義します。 -
docker-compose.yml
は、全体を構成する複数のコンテナの起動や設定に使われ、Dockerfile
を基にした各サービス(コンテナ)の関連性を管理します。
まとめ
- Dockerfile:個々のコンテナイメージの設計図を定義。
- docker-compose.yml:複数のコンテナをまとめて管理し、相互に連携させる設定。
これにより、アプリケーションを構成する複数のサービスを手軽に扱えるようになります。