Docker Compose入門
複数コンテナをまとめて管理する
Docker Composeを使えば、WebアプリとDB等の複数コンテナをYAMLファイル1つで定義し、コマンド1つで起動・停止できます。
この記事では、docker-compose.ymlの書き方から実践的な構成まで解説します。
こんな人向けの記事です
- 複数のDockerコンテナをまとめて管理したい
- docker-compose.ymlの書き方を知りたい
- Webアプリ + DB の開発環境を構築したい
Step 1Docker Composeとは
Docker Composeは、複数のDockerコンテナの構成を docker-compose.yml(または compose.yml)に定義し、一括管理するツールです。
Docker Compose V2
Docker Compose V2 では docker-compose コマンドの代わりに docker compose(ハイフンなし)を使います。最新のDocker Desktopには V2 が含まれています。
Step 2docker-compose.ymlの基本構造
docker-compose.yml
services:
web:
build: . # Dockerfileの場所
ports:
- "8000:8000" # ホスト:コンテナ
volumes:
- .:/app # ソースコードをマウント
depends_on:
- db # dbが先に起動する
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
db:
image: postgres:16 # 公式イメージを使用
volumes:
- db_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
db_data: # 名前付きボリューム
| キー | 役割 |
|---|---|
services | 各コンテナ(サービス)の定義 |
build | Dockerfileからビルド |
image | 既存のイメージを使用 |
ports | ポートのマッピング |
volumes | ファイルのマウント |
depends_on | 起動順序の依存関係 |
environment | 環境変数の設定 |
Step 3基本コマンド
| コマンド | 動作 |
|---|---|
docker compose up | コンテナ起動(フォアグラウンド) |
docker compose up -d | コンテナ起動(バックグラウンド) |
docker compose up --build | ビルドしてから起動 |
docker compose down | コンテナ停止・削除 |
docker compose ps | コンテナ一覧 |
docker compose logs | ログ表示 |
docker compose logs -f web | webサービスのログをリアルタイム表示 |
docker compose exec web bash | webコンテナに入る |
docker compose restart | コンテナ再起動 |
docker compose down -v はデータを消す
-v オプションを付けると、名前付きボリューム(DBデータ等)も削除されます。開発中のDBデータが消えるので注意してください。
Step 4実践:Django + PostgreSQL
Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yml
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
environment:
- DEBUG=True
- DB_HOST=db
- DB_NAME=django_db
- DB_USER=django
- DB_PASSWORD=secret
db:
image: postgres:16
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=django_db
- POSTGRES_USER=django
- POSTGRES_PASSWORD=secret
volumes:
postgres_data:
ターミナル
# 起動
docker compose up --build -d
# マイグレーション
docker compose exec web python manage.py migrate
# 管理者作成
docker compose exec web python manage.py createsuperuser
Step 5便利な設定
.env ファイルで環境変数を管理
.env
POSTGRES_USER=django
POSTGRES_PASSWORD=secret
POSTGRES_DB=django_db
docker-compose.yml
services:
db:
image: postgres:16
env_file:
- .env
ヘルスチェック
docker-compose.yml
services:
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U django"]
interval: 5s
timeout: 5s
retries: 5
web:
depends_on:
db:
condition: service_healthy
まとめ
docker-compose.ymlで複数コンテナを一括定義docker compose up -dで起動、downで停止volumesでデータ永続化、depends_onで起動順制御.envファイルでパスワード等の環境変数を管理healthcheckでサービスの準備完了を待てる