「WebサーバーとDBを同時に起動したい」「開発環境をコマンド一発で再現したい」そんな場面で活躍するのがDocker Composeです。複数のコンテナをYAMLファイルで定義して、docker compose up一発で全部まとめて起動できます。この記事ではdocker-compose.ymlの書き方から実践的な使い方まで徹底解説します。
Docker Composeとは?
Docker Composeは複数のコンテナをまとめて定義・管理するツールです。Webアプリ開発では「Nginxコンテナ」「アプリコンテナ」「MySQLコンテナ」など複数のコンテナが連携することが多く、これらを個別にdocker runするのは大変です。Docker Composeを使えば、すべての設定を1つのdocker-compose.ymlファイルに書いておくだけで環境を再現できます。
Docker Composeの主なメリット
- 複数コンテナを1コマンドで起動・停止できる
- 設定をYAMLファイルでコードとして管理できる
- チームで同じ開発環境を簡単に共有できる
- コンテナ間のネットワークが自動設定される
- 環境変数・ボリューム・ポートの設定を一元管理できる
docker-compose.ymlの基本構造
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- app
app:
build: .
environment:
- DB_HOST=db
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
実践例:WordPress + MySQL環境
version: '3.8'
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
volumes:
- wp_data:/var/www/html
depends_on:
- db
volumes:
db_data:
wp_data:
このファイルを用意してdocker compose up -dを実行するだけで、WordPressとMySQLが自動的に連携した状態で起動します。http://localhost:8080でアクセスできます。
よく使うdocker composeコマンド
| コマンド | 説明 |
|---|---|
docker compose up | 全サービスを起動 |
docker compose up -d | バックグラウンドで起動 |
docker compose up --build | イメージを再ビルドしてから起動 |
docker compose down | 全サービスを停止・削除 |
docker compose down -v | ボリュームも含めて削除 |
docker compose ps | サービスの状態を確認 |
docker compose logs | 全サービスのログを表示 |
docker compose logs -f app | appサービスのログをリアルタイム表示 |
docker compose exec app bash | appコンテナにシェルで入る |
docker compose restart | 全サービスを再起動 |
docker compose pull | 最新イメージを取得 |
docker compose build | イメージをビルド(起動しない) |
環境変数の管理(.envファイル)
パスワードなどの機密情報は.envファイルに分離して管理するのがベストプラクティスです。
# .envファイルの例(.gitignoreに追加すること!)
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppassword
# docker-compose.ymlで.envの変数を参照
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
healthcheckでコンテナの状態を監視する
services:
db:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
app:
image: myapp:latest
depends_on:
db:
condition: service_healthy
まとめ
- Docker Composeは複数コンテナをYAMLで定義して一括管理するツール
docker compose up -dで全サービスをバックグラウンドで起動できる- 機密情報は.envファイルに分離してgitignoreに追加する
- healthcheckを使うとサービスの起動順序を確実に制御できる
- WordPressやFlaskなど複数サービスを組み合わせた開発環境を素早く構築できる



コメント