Docker: Docker Compose にゅうもん
最終更新:2026-08-26
5 つの docker run を 1 つの docker compose up へまとめられます。Compose はマルチコンテナのデプロイをてさぎょうからせんげんてきなせっていへかえます。
1. まなべること
- docker-compose.yml のこうせいとかきかた
- サービスのていぎといぞんかんけい
- ボリュームとネットワークのせんげんてきなかんり
- かんきょうへんすうのかんりほうしん
- よくつかう Docker Compose コマンド
2. デベロッパーのじつわ
(1) こまりごと: デバッグのたびに 5 つの docker run がひつよう
Alice はデバッグのたびに Web、DB、Cache、Queue、Worker をかいしする 5 つの docker run をてでうっていました。パラメーターがおおく、ただしいじゅんばんがひつようで、かんきょうへんすうもまちがえやすいさぎょうです。いちど --network app-net をわすれ、Web からデータベースへつながらないげんいんを 1 じかんしらべました。
(2) Docker Compose のせんげんてきなせってい
Bob が docker-compose.yml をかいたので、Alice は docker compose up -d だけでよくなりました。
YAML
# docker-compose.yml - ひとつのファイルですべてをていぎ
services:
web:
image: nginx:alpine
ports: ["8080:80"]
depends_on:
- api
api:
build: .
environment:
- DATABASE_URL=postgresql://postgres:secret@db:5432/myapp
db:
image: postgres:15-alpine
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=myapp
volumes:
- pg-data:/var/lib/postgresql/data
volumes:
pg-data:
networks:
default:
name: app-net
(3) メリット: 5 コマンドから 1 コマンドへ
5 つのコマンドとてさぎょうのせっていは、docker compose up -d だけになりました。あたらしいメンバーでも 5 ふんでプロジェクトぜんたいをうごかせます。
3. docker-compose.yml のこうせい
(1) 3 つのトップレベルフィールド
YAML
# docker-compose.yml のこうせい
services: # コンテナていぎ (ひっす)
web:
image: nginx:alpine
volumes: # なまえつきボリュームのせんげん (にんい)
pg-data:
networks: # カスタムネットワークのせんげん (にんい)
app-net:
(2) docker run と docker compose のくらべかた
| ひかくこうもく | docker run | docker compose |
|---|---|---|
| ていぎほうほう | コマンドラインひきすう | YAML ファイル |
| さいげんせい | ひくい | たかい (Git へコミットできる) |
| ふくすうコンテナ | ふくすうコマンド | ひとつのファイル |
| ネットワーク/ボリューム | てさぎょうでさくせい | じどうでせんげんてきにかんり |
| かんきょうへんすう | ふくすうの -e |
env_file や environment |
| バージョンかんり | ❌ | ✅ Git diff をつかえる |
4. services せっていのくわしいせつめい
(1) よくつかうサービスフィールド
| フィールド | つかいみち | サンプル |
|---|---|---|
image |
きぞんイメージをつかう | image: nginx:alpine |
build |
Dockerfile からビルド | build: . |
ports |
ポートマッピング | ports: ["8080:80"] |
environment |
かんきょうへんすう | environment: { POSTGRES_PASSWORD: secret } |
env_file |
ファイルからへんすうをよむ | env_file: .env |
volumes |
ボリュームをマウント | volumes: [pg-data:/var/lib/postgresql/data] |
depends_on |
かいしいぞんかんけい | depends_on: [db] |
restart |
さいきどうポリシー | restart: unless-stopped |
networks |
ネットワークをしてい | networks: [app-net] |
healthcheck |
ヘルスチェック | healthcheck: { test: ["CMD", "curl", "-f", "http://localhost/"] } |
▶ サンプル: もっともシンプルな Compose ファイル (むずかしさ: ⭐)
YAML
# さいしょうの docker-compose.yml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
BASH
# Compose でかいし
docker compose up -d
# かくにん
docker compose ps
5. いぞんかんけいのせいぎょ: depends_on
(1) 3 つのまちかた
| ほうしん | かきかた | いつまでまつか | せつめい |
|---|---|---|---|
| started (デフォルト) | depends_on: [db] |
コンテナかいし | サービスのじゅんびはほしょうしない |
| healthy | condition: service_healthy |
ヘルスチェックせいこう | ✅ ほんばんでおすすめ |
| completed | condition: service_completed_successfully |
コンテナのせいじょうしゅうりょう | しょきかタスク |
▶ サンプル: depends_on と healthcheck でいぞんかんけいをせいぎょ (むずかしさ: ⭐⭐)
YAML
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- pg-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
api:
build: .
environment:
DATABASE_URL: postgresql://postgres:secret@db:5432/myapp
depends_on:
db:
condition: service_healthy
volumes:
pg-data:
💡 ヒント:
depends_on: [db] は DB コンテナのかいしだけをまち、PostgreSQL のじゅんびまではまちません。condition: service_healthy ならヘルスチェックがとおるまで API をかいししません。
6. ボリュームとネットワークのせんげん
▶ サンプル: ボリュームとネットワークをせんげんする (むずかしさ: ⭐⭐)
YAML
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./src:/usr/share/nginx/html:ro # よみとりせんようバインドマウント
- nginx-cache:/var/cache/nginx # なまえつきボリューム
networks:
- frontend
- backend
api:
build: .
networks:
- backend
- database
db:
image: postgres:15-alpine
volumes:
- pg-data:/var/lib/postgresql/data
networks:
- database
volumes:
pg-data:
nginx-cache:
networks:
frontend:
backend:
database:
internal: true # そとからアクセスできない
7. かんきょうへんすうのかんり
(1) 3 つのほうほうをくらべる
| ほうほう | かきかた | むいているばめん |
|---|---|---|
| environment ブロック | environment: { KEY: VALUE } |
すくないこていへんすう |
| env_file | env_file: .env |
たくさんのへんすうやセンシティブなじょうほう |
| シェルへんすう | environment: { KEY: ${VAR} } |
どうてきなせってい |
▶ サンプル: env_file とへんすうてんかい (むずかしさ: ⭐⭐)
YAML
# へんすうてんかいつき docker-compose.yml
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD:-defaultsecret}
POSTGRES_DB: ${DB_NAME:-myapp}
env_file:
- .env.db
api:
build: .
environment:
DATABASE_URL: postgresql://postgres:${DB_PASSWORD:-defaultsecret}@db:5432/${DB_NAME:-myapp}
BASH
# .env.db
POSTGRES_USER=appuser
POSTGRES_PASSWORD=secret123
📌 たいせつ:
${VAR:-default} は VAR がなければデフォルトちをつかいます。Compose ファイルにデフォルトをもち、ほんばんでは .env でうわがきできます。
8. よくつかう Docker Compose コマンド
| コマンド | はたらき | サンプル |
|---|---|---|
docker compose up -d |
すべてのサービスをバックグラウンドでかいし | docker compose up -d |
docker compose down |
コンテナとネットワークをていししてさくじょ | docker compose down |
docker compose down -v |
ボリュームもさくじょ | docker compose down -v |
docker compose ps |
サービスのじょうたいをみる | docker compose ps |
docker compose logs |
ログをみる | docker compose logs -f api |
docker compose exec |
コンテナないでコマンドをじっこう | docker compose exec api bash |
docker compose build |
イメージをさいビルド | docker compose build api |
docker compose pull |
さいしんイメージをプル | docker compose pull |
docker compose config |
マージずみせっていをけんしょうしてひょうじ | docker compose config |
▶ サンプル: docker compose up -d でかいし (むずかしさ: ⭐)
BASH
# すべてのサービスをバックグラウンドでかいし
docker compose up -d
# すべてのサービスのログをフォロー
docker compose logs -f
# とくていサービスのログをフォロー
docker compose logs -f api
▶ サンプル: docker compose exec でコンテナへはいる (むずかしさ: ⭐)
BASH
# api サービスのコンテナでシェルをひらく
docker compose exec api bash
# 1 かいだけコマンドをじっこう
docker compose exec db psql -U postgres -d myapp
▶ サンプル: docker compose down でクリーンアップ (むずかしさ: ⭐)
BASH
# コンテナとネットワークをていししてさくじょ
docker compose down
# なまえつきボリュームもさくじょ (データがきえるのでちゅうい)
docker compose down -v
# イメージもさくじょ
docker compose down --rmi all
9. かんぜんなサンプル: WordPress + MySQL
YAML
# ============================================
# docker-compose.yml: WordPress + MySQL
# ボリューム、ネットワーク、depends_on、healthcheck
# ============================================
services:
wordpress:
image: wordpress:6.4-php8.2-apache
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD:-wppass123}
WORDPRESS_DB_NAME: wordpress
volumes:
- wp-content:/var/www/html/wp-content
depends_on:
mysql:
condition: service_healthy
restart: unless-stopped
networks:
- wp-net
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootsecret}
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: ${DB_PASSWORD:-wppass123}
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- wp-net
volumes:
mysql-data:
wp-content:
networks:
wp-net:
BASH
# デプロイ
docker compose up -d
# かくにん
docker compose ps
docker compose logs -f wordpress
# WordPress へアクセス
# ブラウザーで http://localhost:8080 をひらく
# データをのこしてクリーンアップ
docker compose down
# データもふくめてクリーンアップ
docker compose down -v
❓ よくある質問
Q
docker-compose.yml ではどの version をつかいますか?A Docker Compose V2 では
version フィールドはいりません。services: からかきはじめられます。ふるいチュートリアルの version: "3.8" は V2 でむしされます。Q
depends_on はサービスのじゅんびをほしょうしますか?A デフォルトでは DB コンテナのかいしだけをほしょうし、PostgreSQL のじゅんびはほしょうしません。
condition: service_healthy とヘルスチェックをつかってください。Q Compose ファイルのかんきょうへんすうはどうかんりしますか?
A センシティブではないデフォルトは
environment、かんきょうごとのちやパスワードは Git へコミットしない .env、フォールバックには ${VAR:-default} をつかいます。Q
docker compose down はデータボリュームをけしますか?A デフォルトではけしません。コンテナとネットワークだけをけし、なまえつきボリュームはのこします。ボリュームもけすには
-v がひつようです。ほんばんでは down -v をつかわないでください。Q Compose のプロジェクトめいはなんのためですか?
A べつべつの Compose アプリのリソースをぶんりします。デフォルトはカレントディレクトリめいで、
docker compose -p myproject up でかえられます。📖 まとめ
- docker-compose.yml はふくすうの
docker runをせんげんてきな YAML へおきかえる - 3 つのメインフィールドは services、volumes、networks
depends_onとcondition: service_healthyでいぞんサービスのじゅんびをまつ- かんきょうへんすうは
environment、env_file、${VAR:-default}でかんりする docker compose up -dでまとめてかいしし、docker compose downでまとめてクリーンアップするdocker compose configでじっこうまえにせっていをけんしょうする
📝 練習問題
- きほん (むずかしさ: ⭐): Nginx + PHP + MySQL の LEMP スタックように
docker-compose.ymlをかき、docker compose up -dでかいししてください。 - おうよう (むずかしさ: ⭐⭐): Compose ファイルへ
depends_onとhealthcheckをついかし、MySQL のじゅんびごに PHP-FPM がかいしするようにしてください。 - ちょうせん (むずかしさ: ⭐⭐⭐):
docker compose logsでかいしにしっぱいしたサービスをしらべ、ログからげんいんをみつけてなおしてください。