Docker: Docker Compose にゅうもん

最終更新:2026-08-26

5 つの docker run を 1 つの docker compose up へまとめられます。Compose はマルチコンテナのデプロイをてさぎょうからせんげんてきなせっていへかえます。

1. まなべること



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_fileenvironment
バージョンかんり ✅ 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_onhealthcheck でいぞんかんけいをせいぎょ (むずかしさ: ⭐⭐)

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 でかえられます。

📖 まとめ


📝 練習問題

  1. きほん (むずかしさ: ⭐): Nginx + PHP + MySQL の LEMP スタックように docker-compose.yml をかき、docker compose up -d でかいししてください。
  2. おうよう (むずかしさ: ⭐⭐): Compose ファイルへ depends_onhealthcheck をついかし、MySQL のじゅんびごに PHP-FPM がかいしするようにしてください。
  3. ちょうせん (むずかしさ: ⭐⭐⭐): docker compose logs でかいしにしっぱいしたサービスをしらべ、ログからげんいんをみつけてなおしてください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%