Docker Composeの概要
Docker Composeは、複数のコンテナをまとめて1つのYAMLファイルで定義し、docker compose upの一発で起動・停止できる開発支援ツールです。Webサーバー・アプリケーション・データベース・キャッシュといった構成要素を別々の docker run コマンドで起動する代わりに、1ファイルにネットワーク設定やボリュームマウント、依存関係まで宣言できるため、チーム間で開発環境を揃える用途に適しています。本ツールは、よく使うサービスをボタンで選ぶだけで雛形となる docker-compose.yml を組み立て、そのままコピーして使い始められるように設計されています。
YAMLの基本構造と主要キー
| キー | 役割 |
|---|---|
services | 各コンテナの定義をぶら下げるルートキー。本ツールはここに選択したサービスを列挙します。 |
image / build | 使用するイメージ名、もしくはローカルのDockerfileからのビルド指定。 |
ports | ホスト側ポートとコンテナ側ポートの対応(例: "8080:80")。 |
environment | コンテナに渡す環境変数。DBパスワードやAPIキーをここで指定します。 |
volumes | ホストとコンテナ間で共有するボリューム。DBの永続化や開発時のホットリロードに使います。 |
depends_on | 起動順序の依存関係。Webアプリより先にDBを上げたい場面で指定します。 |
使い方の流れ
- 「テンプレートから始める」でLAMP・MEAN・Next.js+DB・WordPressのいずれかを選ぶか、ゼロから組みたい場合はステップ2に進みます。
- 「サービスを追加・削除」で必要なサービスをタップして追加します。もう一度押すと外せるので、構成を試行錯誤しやすい仕組みにしてあります。
- 追加したサービスごとに、ステップ3でポート番号やパスワードなどの設定を必要に応じて変更します。
- 「docker-compose.yml を生成」を押すと、画面下部にYAMLが表示されます。
- 「YAMLをコピー」でクリップボードに転送し、プロジェクトのルートに
docker-compose.ymlとして保存してdocker compose up -dを実行します。
こんな場面で使う
- 新規プロジェクトの初期セットアップ: ゼロからWebアプリ+DB+キャッシュの環境を整えたいときに、YAMLを書き起こす手間を省けます。
- チーム開発の環境統一: メンバー全員が同じ
docker-compose.ymlを共有することで「自分の環境では動く」現象を減らせます。 - 技術ブログ・教材作成: 学習用にRedisやMongoDBを試したい時、雛形をすぐに用意できます。
- 面接・採用課題の準備: コーディング課題で求められがちなDocker環境を、最短手順で再現できます。
- 既存プロジェクトの整理: 古い
docker-compose.ymlを見直す際に、最新の書き方や定番サービスの組み合わせを再確認できます。
使う前に知っておきたい注意点
- 本ツールは雛形を作るだけなので、生成されたパスワードや秘密鍵は必ず変更してください。サンプル値のまま本番に出さないことが大前提です。
- ポート番号がローカルで競合する場合は、ホスト側のポートを変更します。MySQLの3306やPostgreSQLの5432はすでに使われていることがあります。
- 本番環境では
docker-compose.yml単独でのデプロイは推奨されません。Docker SwarmやKubernetes、もしくはマネージドサービスに移行する想定で、まずは開発・検証用と位置づけてください。 - ボリュームを正しく設定しないと、コンテナを
docker compose down -vで削除した際にDBデータが消えます。永続化したいデータには名前付きボリュームを割り当てます。 - 古い
docker-composev1系(Python製)と、現在主流のDocker CLI同梱版(docker compose)はオプションが一部異なります。本ツールは新しい記法(version指定なし)に寄せて出力します。
用語の補足
- Dockerfile: 1つのコンテナイメージをビルドする手順書。
docker-compose.ymlからbuild:キーで参照します。 - イメージとコンテナ: イメージは「設計図」、コンテナは「実行中のインスタンス」。同じイメージから複数コンテナを立ち上げられます。
- compose profile: 開発・テスト・本番のように起動するサービスを切り替えたい場合に使う仕組み。
profiles:キーで指定します。