2025年9月19日現在、Docker Compose、最新のv2.39.4が出てる。Docker Inc.が開発してるから安心だ。複数のDockerコンテナで構成されるアプリケーションを、単一のdocker-compose.yml
YAMLファイルで定義・実行できる。Compose Specificationに従って標準化されており、公式ドキュメントでは詳細な仕様が説明されている。
なんでこんなに神ツールなのか
手動でコンテナ管理とか、今思うと頭おかしかった。WebアプリとPostgreSQLとRedisとNginx、全部別々にdocker run
で起動して、ポート番号とか覚えてられないし、IP変わったら全部設定し直しだし。5個のコンテナ立ち上げるのに毎回1時間とかかかってた。
Docker Compose使ったら:
docker-compose up
一発で全部起動。終了。- 依存関係?勝手に順番守って起動してくれる
- ネットワーク?コンテナ名で通信できる
- データ?ボリューム設定で永続化
- 設定?
.env
ファイル一個で終わり
実際の使用例
前の会社でもメルカリでも使ってたし、友達がいるサイバーエージェントでも普通に使ってる。特に開発環境やCI/CDパイプラインで威力を発揮する。GitHub ActionsやGitLab CIでの自動化も簡単だ。
version: '3.8'
services:
web:
build: .
ports:
- \"3000:3000\"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: password
手動コンテナ管理の地獄
あの頃の俺らは何やってたんだろうな:
- ポート番号競合で
EADDRINUSE
、毎回lsof -ti:8080 | xargs kill
- コンテナ間通信?IPアドレス手動で調べて書き換えて
- 新人「環境構築できません」→俺「また?」の無限ループ
- 本番「DBに接続できません」→あ、ポート番号typoしてた
docker run
5回叩いてる間に他のコンテナ死んでる
Docker Composeならこの地獄が終わる。YAMLに書いてdocker-compose up
。それだけ。
俺の黒歴史: 昔、5個のサービスを手動で起動してた。毎朝30分かけてdocker run
コマンドを5回叩いて、ポート番号間違えて、DB接続URLタイポして、結局動かなくて1時間無駄にしてた。Docker Compose導入したら1コマンドで全部起動。あの苦労は何だったのか。
結論: 5個のサービスを手動で管理してたあの日々がウソみたいだ。今はYAMLファイル一個でWebアプリもDBもRedisもNginxも全部面倒見てくれる。
パフォーマンスとスケール
Docker ComposeはGoで書かれてて、起動がクソ速い。昔のPython版は重くて使い物にならなかった。
Kubernetesとかいう化け物と比較されがちだけど、正直99%の会社にK8sはオーバーキル。「将来Netflixレベルのスケールが」とか言ってK8s導入したプロジェクト、大体そのスケールに到達する前にチーム全員疲弊して転職してる。前の会社でも「k8s勉強会」とかやってたけど、結局Docker Composeで十分だった。
Docker Desktopでは、macOSやWindows上でもLinuxコンテナを動かせるので、日本のMacユーザーが多い開発現場でも問題なく使える。
なんで今さら学ぶ必要あるのか
コンテナは逃げられない。AWS ECS、Azure AKS、GCP GKE、どこもコンテナ前提。「俺はVMで十分」とか言ってたら、転職の時にポートフォリオ見せられない。
Docker Composeできれば、次にKubernetes触っても「あーこれComposeの複雑版ね」で理解できる。実際、Compose BridgeでComposeからK8sマニフェスト生成できるし。
要は、Docker Compose = コンテナ管理の基礎。これ分からずにK8s行くとか、ひらがな読めずに小説読むようなもん。