🐳
【Docker】マルチコンテナアプリケーションとは
マルチコンテナアプリケーションとは
- ネットワークを通じて複数のコンテナが互いにやり取りを行いながら処理を実行するアプリケーションのこと。
- 複数のコンテナとは、webアプリケーション(RailsやDjangoなど)とDB(MySQLやPostgreSQLなど)などのことを指す。
-
docker-compose.yml
ファイルで定義する。docker-compose.yml
ファイルでは、web
とdb
を定義する。 - 2つのコンテナーが同一ネットワーク上にあれば互いにやりとりができる。 同一ネットワーク上にないときはできない。
マルチコンテナアプリケーションのディレクトリ構成
myapp/
├── docker-compose.yml
├── web/
│ ├── Dockerfile
│ └── app.py
└── db/
└── Dockerfile
-
Dockerfile
各サービスごとに作成する。各サービスのイメージをビルドする際の依存関係や設定を個別に管理する。 -
docker-compose.yml
単一のファイルで複数のサービスを定義する。サービス間のネットワーク設定、ボリュームの共有、依存関係の管理が容易になる。
docker-compose.yml
version: '3'
services:
web:
build: ./web
ports:
- "5000:5000"
volumes:
- ./web:/app
environment:
- FLASK_ENV=development
depends_on:
- db
db:
build: ./db
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=mydatabase
volumes:
db_data:
Dockerfile
web/Dockerfile
# ベースイメージを指定
FROM python:3.8-slim
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係のインストール
COPY requirements.txt .
RUN pip install -r requirements.txt
# アプリケーションのコピー
COPY . .
# コンテナ起動時に実行するコマンド
CMD ["python", "app.py"]
db/Dockerfile
# ベースイメージを指定
FROM mysql:5.7
# 環境変数の設定
ENV MYSQL_ROOT_PASSWORD=rootpassword
ENV MYSQL_DATABASE=mydatabase
# 初期化スクリプトのコピー
COPY init.sql /docker-entrypoint-initdb.d/
まとめ
参考:
Discussion