フロントエンド、バックエンドAPI、データベース。現代のWeb開発では、こうした複数のサービスをそれぞれ別のコンテナで動かすのが当たり前になりました。けれど、毎回コンテナごとに長いオプションを打ち込み、ネットワークを手作業でつなぎ、起動順を気にして……となると、開発のスピードはあっという間に落ちてしまいます。
そんな悩みを一気に解消してくれるのが Docker Compose です。たった1つのYAMLファイルに設定を書いておくだけで、複数コンテナをワンコマンドで立ち上げられるようになり、毎日の「環境構築のストレス」から解放されます。✨
Docker Composeは、複数のDockerコンテナをまとめて起動・管理するためのツールです。たとえば旅行予約のWebシステムを開発する場合、画面側のフロントエンド、サーバー側のバックエンドAPI、そしてデータを保存するデータベースといった複数の役割(=サービス)が必要になります。
これらを1つのコンテナに詰め込むこともできますが、サービスごとにコンテナを分けたほうが圧倒的に開発しやすくなります。フロントエンドだけ修正したいときに他へ影響を与えず作業できたり、ボトルネックになっている部分だけコンテナを増やせたり、問題が起きたサービスだけ切り離したりと、運用の柔軟性が一気に上がるからです。
本番運用でDocker Composeを使うプロジェクトは多くありません。単一ホストでしか動かず、オートスケーリングやセルフヒーリングといった本番向け機能が弱いためです。本番ではKubernetesなど他の手段が選ばれることが一般的です。
とはいえ、ローカル開発環境では軽量でシンプルなDocker Composeが圧倒的に使われているのが現実です。だからこそ、エンジニアとして身につけておけば一生モノのスキルになります。学習しておけば、案件に入った瞬間「あ、知ってる構成だ」と即戦力で動けるようになります。💪
プロジェクトフォルダ直下に docker-compose.yml を作成し、以下のような構造で記述します。
同じCompose内のコンテナ同士は、サービス名をホスト名として通信できます。たとえばDBサービス名が `db` なら、APIコンテナからは `db:5432` で接続OK。手動でネットワークを設定する必要がないのは、本当に気持ちいい体験です。😊
`depends_on` だけでは「コンテナが起動した」状態しか保証されず、DBが接続可能になるまで待ってくれるとは限りません。そこで `healthcheck` を使い、`condition: service_healthy` を組み合わせれば、DBが本当にクエリを受け付けられるようになってからAPIが起動する、という安全な順序制御が実現できます。
docker compose up 🟢:コンテナを作成して起動。`--build` でイメージビルドも同時実行、`-d` でバックグラウンド起動。docker compose ps 👀:起動中コンテナを一覧表示。`-a` で停止中も含めて表示。docker compose stop ⏸:コンテナを停止(削除はしない)。docker compose start ▶️:停止中のコンテナを再開。docker compose down 🗑:コンテナを停止して削除。docker compose exec サービス名 コマンド 💻:コンテナ内で任意のコマンドを実行。「ホスト側で動かすAPIに切り替えたい」「コンテナ側のAPIを使いたい」といった環境差分は、`docker-compose.yml` を直接書き換えるのではなく、.envファイル を活用するのが定番です。Docker Composeは起動時に同じ階層の `.env` を読み込み、変数を展開してくれるので、設定ファイル自体は綺麗に保ちつつ、状況に応じた切り替えが一瞬で行えます。
動画や公式ドキュメントだけでは掴みきれない「設計思想」や「実務での勘所」は、書籍でじっくり学ぶのが近道です。手元に置いて何度も読み返せる学習リソースを揃えれば、コンテナ技術への理解が一段深まります。📖
Dockerは1つのコンテナを動かすための基本ツール、Docker Composeは複数のコンテナをまとめて起動・管理するための上位ツールです。Composeを使うとYAMLファイル1つで構成を再現できるので、開発環境の共有や再構築が圧倒的にラクになります。
使えなくはないですが、単一ホスト上での動作・オートスケーリング非対応・セルフヒーリング機能の弱さなどから、本番ではKubernetes等が選ばれるのが一般的です。Composeはローカル開発と検証環境で本領を発揮します。
`depends_on` に加えて、DBサービスに `healthcheck` を設定し、API側で `condition: service_healthy` を指定するのが王道です。これでDBが本当に接続可能になってからAPIが起動するようになります。
`.env` ファイルに環境変数を書き、Compose内では `${変数名:-デフォルト値}` の形式で参照するのが便利です。YAMLを書き換えずに、`.env` だけ差し替えれば構成を切り替えられます。
Dockerの基礎(イメージ・コンテナ・Dockerfile)を押さえてから、Composeの `services` / `ports` / `volumes` / `depends_on` の4つを実際に手を動かして書いてみるのがおすすめです。書籍で全体像を掴みつつ、小さなプロジェクトで試すと定着が早いですよ。
Docker Composeを使えるようになると、複雑なマルチコンテナ環境がたった1つのYAMLとシンプルなコマンドで再現できるようになります。チームで同じ環境を共有でき、新しいメンバーが入ってきても「`docker compose up` だけでOK」と言える快適さは、一度味わうと戻れません。✨
ローカル開発のあらゆる場面で活躍する技術なので、学んでおいて損は絶対にありません。書籍や周辺アイテムも揃えて、ぜひあなたの開発環境を一段レベルアップさせてみてください。🚀