はじめに
Docker Compose は、コンテナ管理とアプリケーションのデプロイを効率化しようとする開発者や DevOps プロフェッショナルにとって不可欠なツールです。この包括的なチュートリアルは、基本的な設定からさまざまな環境での高度なデプロイ技術まで、Docker Compose を理解し実装するためのステップバイステップのガイドを提供します。
Docker Compose の基礎
Docker Compose の概要
Docker Compose は、複数のコンテナからなる Docker アプリケーションを定義および実行するための強力なツールです。YAML ファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを設定することで、コンテナオーケストレーションを簡素化します。
核心概念
graph TD
A[Docker Compose] --> B[サービス定義]
A --> C[マルチコンテナ管理]
A --> D[環境設定]
| キーコンセプト | 説明 |
|---|---|
| サービス | アプリケーション内の個々のコンテナ |
| docker-compose.yml | サービスを定義する設定ファイル |
| ボリューム | コンテナの永続的なデータストレージ |
| ネットワーク | コンテナ間の通信 |
Docker Compose 設定のサンプル
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
Ubuntu 22.04 上の実践的な例
Docker Compose をインストールします。
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
マルチコンテナアプリケーションを実行します。
docker compose up -d
docker compose ps
docker compose down
利用事例
Docker Compose は以下の場合に最適です。
- ローカル開発環境
- 自動化されたテスト環境
- 単一ホストアプリケーションのデプロイ
- マイクロサービスアーキテクチャ
設定とデプロイ
Docker Compose ファイル構造
graph TD
A[docker-compose.yml] --> B[バージョン]
A --> C[サービス]
A --> D[ネットワーク]
A --> E[ボリューム]
包括的な設定例
version: "3.8"
services:
web:
image: python:3.9
build:
context: ./app
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./app:/app
environment:
- DEBUG=true
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
default:
driver: bridge
volumes:
postgres_data:
環境設定の管理
| 設定タイプ | 説明 | 使用例 |
|---|---|---|
| 環境変数 | 実行時設定 | 機密データ、接続文字列 |
.env ファイル |
外部環境設定 | コードから設定を分離 |
| Docker Secrets | 機密情報の安全な管理 | パスワード、トークン |
Ubuntu 22.04 上のデプロイコマンド
設定の検証:
docker compose config
サービスの起動:
docker compose up -d
サービスのスケーリング:
docker compose up -d --scale web=3
サービスの監視:
docker compose ps
docker compose logs
コンテナネットワーク戦略
graph LR
A[コンテナネットワーク] --> B[ブリッジネットワーク]
A --> C[ホストネットワーク]
A --> D[オーバーレイネットワーク]
ボリューム管理テクニック
## 名前付きボリュームの作成
docker volume create myvolume
## ボリュームのリスト表示
docker volume ls
## ボリュームの詳細の確認
docker volume inspect myvolume
高度な Compose テクニック
サービスのスケーリングとロードバランシング
graph TD
A[ロードバランサー] --> B[サービスレプリカ 1]
A --> C[サービスレプリカ 2]
A --> D[サービスレプリカ 3]
スケーリング設定
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
ports:
- "80:80"
動的なサービス管理
| テクニック | コマンド | 説明 |
|---|---|---|
| サービスのスケーリング | docker compose up --scale web=5 |
コンテナ数を動的に調整 |
| ロールアップデート | docker compose up --force-recreate |
最小限のダウンタイムでサービスを更新 |
| 選択的なデプロイ | docker compose up service1 service2 |
特定のサービスのみをデプロイ |
プロダクション対応のデプロイ戦略
## 設定の検証
docker compose config
## ドライランデプロイ
docker compose up --dry-run
## プロダクションデプロイ
docker compose up -d --remove-orphans
コンテナのヘルスチェック
services:
web:
image: myapp:latest
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
高度なネットワーク
graph LR
A[カスタムネットワーク] --> B[内部通信]
A --> C[外部アクセス]
A --> D[サービスディスカバリ]
モニタリングとロギング
## リアルタイムサービスログ
docker compose logs -f
## リソースモニタリング
docker compose top
## パフォーマンス指標
docker stats
マルチ環境設定
version: "3.8"
services:
web:
image: myapp:${ENV:-development}
environment:
- DATABASE_URL=${DATABASE_URL}
シークレット管理
## Docker シークレットの作成
echo "database_password" | docker secret create db_password -
## compose ファイルでシークレットを使用する
services:
database:
secrets:
- db_password
Summary
By mastering Docker Compose, developers can simplify complex application architectures, improve deployment consistency, and create more scalable and maintainable containerized solutions. The tutorial demonstrates how to leverage YAML configurations, manage services, networks, and volumes, and effectively orchestrate multi-container applications with ease and efficiency.



