
docker-compose.yml は、複数のDockerコンテナ構成を1つの設定ファイルで定義・管理するための YAML ファイルである。このファイルには、使用するイメージ、ビルド方法、ネットワーク、ボリューム、環境変数、起動順序などを記述し、 docker compose up コマンドにより、定義された複数のコンテナをまとめて起動・停止できる。

docker-compose.yml の設定
services(コンテナ定義)
| 項目 | 説明 |
|---|---|
| image 【例】image: nginx:alpine | 使用するDockerイメージ |
| build 【例】build: . | Dockerfileからビルド |
| container_name 【例】container_name: my-web | コンテナ名を指定 |
| command 【例】command: npm start | 起動コマンドを上書き |
| ports 【例】ports: - "8080:80" - "3000:3000" | ポートマッピング |
| expose 【例】expose: - "3000" | 内部ポート公開 |
| networks 【例】networks: - frontend - backend | 接続するネットワーク |
| environment 【例】environment: - NODE_ENV=production - DB_URL=postgres://db:5432/mydb | 環境変数を設定 |
| env_file 【例】env_file: - .env | 環境変数ファイル |
| volumes 【例】volumes: - db-data:/var/lib/mysql - ./app:/app - ./config:/etc/config:ro | ボリュームマウント |
| depends_on 【例】depends_on: - db - cache | 起動順序の依存関係 |
| restart 【例】restart: always | 再起動ポリシー |
networks(ネットワーク定義)
| 項目 | 説明 |
|---|---|
| (名前のみ) 【例】networks: frontend: | シンプルな定義 |
| driver 【例】networks: frontend: driver: bridge | ネットワークドライバー |
| ipam.config 【例】networks: frontend: ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1 | サブネット・ゲートウェイ |
| internal 【例】networks: backend: internal: true | 内部専用ネットワーク |
| external 【例】networks: existing: external: true name: my-network | 既存ネットワークを使用 |
volumes(ボリューム定義)
| 項目 | 説明 |
|---|---|
| (名前のみ) 【例】volumes: db-data: | シンプルな定義 |
| driver 【例】volumes: db-data: driver: local | ボリュームドライバー |
| external 【例】volumes: existing: external: true name: my-volume | 既存ボリュームを使用 |
docker-compose.yml の設定例
基本的な構成
version: '3.8'
services:
web:
image: nginx:alpine
container_name: web-server
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
restart: always
Web + データベース
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- api
networks:
- frontend
api:
build: ./api
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://user:pass@db:5432/mydb
ports:
- "3000:3000"
depends_on:
- db
networks:
- frontend
- backend
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=mydb
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
volumes:
db-data:
networks:
frontend:
backend:
マイクロサービス構成
version: '3.8'
services:
gateway:
image: nginx:alpine
ports:
- "80:80"
networks:
- services
user-service:
build: ./services/user
environment:
- DATABASE_URL=postgres://postgres:secret@user-db:5432/users
networks:
- services
user-db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=users
volumes:
- user-data:/var/lib/postgresql/data
networks:
- services
order-service:
build: ./services/order
environment:
- DATABASE_URL=postgres://postgres:secret@order-db:5432/orders
networks:
- services
order-db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=orders
volumes:
- order-data:/var/lib/postgresql/data
networks:
- services
volumes:
user-data:
order-data:
networks:
services: