はじめに
Docker Compose は、開発者がコンテナの管理とアプリケーションのデプロイを効率化するための不可欠なツールです。この包括的なチュートリアルでは、Docker Compose の基礎を掘り下げ、複雑なマルチコンテナ環境を効率的かつ体系的に構成、デプロイ、管理するための実践的な洞察を提供します。
Docker Compose の基礎
Docker Compose の概要
Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するための強力なツールです。YAML ファイルを使用してアプリケーションサービス、ネットワーク、ボリュームを構成することで、コンテナオーケストレーションと管理を簡素化します。
核心概念とアーキテクチャ
graph TD
A[Docker Compose] --> B[サービス構成]
A --> C[マルチコンテナ管理]
A --> D[宣言型インフラストラクチャ]
| キーコンセプト | 説明 |
|---|---|
| docker-compose.yml | サービス、ネットワーク、ボリュームを定義する構成ファイル |
| サービス | アプリケーションを構成する個々のコンテナ |
| ボリューム | コンテナの永続的なデータストレージ |
| ネットワーク | コンテナ間の通信のためのカスタムネットワーク構成 |
実践例:Web アプリケーションの設定
一般的な Web アプリケーション向け Docker Compose 構成の包括的な例を以下に示します。
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
コードの解説
version: '3.8'は Docker Compose ファイルのフォーマットを指定しますservicesセクションは、Web サーバーとデータベースの 2 つのコンテナを定義しますnginxサービスは、ホストポート 80 をコンテナポート 80 にマッピングしますpostgresサービスは、永続的なボリュームストレージを持つデータベースを設定します
インストールと基本コマンド
Ubuntu 22.04 に Docker Compose をインストールするには:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Docker Compose の主要なコマンド:
docker compose up: すべてのサービスを開始しますdocker compose down: コンテナを停止および削除しますdocker compose ps: 実行中のサービスを一覧表示しますdocker compose logs: サービスログを表示します
構成とデプロイ
Docker Compose ファイル構造
Docker Compose の構成は、アプリケーション全体のインフラストラクチャを定義する YAML ファイルに依存します。標準的なファイル名は docker-compose.yml であり、包括的なサービス定義を含みます。
graph TD
A[docker-compose.yml] --> B[サービス]
A --> C[ネットワーク]
A --> D[ボリューム]
A --> E[環境変数]
サービス構成の詳細な例
version: "3.8"
services:
backend:
image: python:3.9
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@database:5432/appdb
depends_on:
- database
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
postgres_data:
構成パラメータ
| パラメータ | 説明 | 例 |
|---|---|---|
image |
ベースとなるコンテナイメージ | nginx:latest |
build |
カスタムイメージビルド構成 | context: ./app |
ports |
ポートのマッピング | "8080:80" |
volumes |
永続的なデータストレージ | - ./data:/app/data |
environment |
コンテナ環境変数 | DATABASE_HOST=localhost |
デプロイ戦略
graph LR
A[ローカル開発] --> B[ステージング環境]
B --> C[本番デプロイ]
C --> D[サービスのスケーリング]
デプロイコマンド
Ubuntu 22.04 上での一般的なデプロイワークフロー:
## compose ファイルの検証
docker compose config
## サービスのビルド
docker compose build
## サービスの起動
docker compose up -d
## 実行中のサービスの確認
docker compose ps
## ログの表示
docker compose logs backend
## サービスの停止
docker compose down
高度な構成テクニック
services:
webserver:
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
高度な Compose 戦略
マルチ環境構成
Docker Compose は、複数の構成ファイルとオーバーライド機構を介して洗練された環境管理をサポートします。
graph LR
A[基本構成] --> B[開発用オーバーライド]
A --> C[本番用オーバーライド]
A --> D[ステージング用オーバーライド]
環境固有の構成
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
サービスの動的スケーリング
## web サービスを 3 つのインスタンスにスケールアップ
docker compose up -d --scale web=3
高度なネットワーク構成
| ネットワークモード | 説明 | 使用例 |
|---|---|---|
| bridge | デフォルトのネットワーク | 隔離されたコンテナ間の通信 |
| host | ホストネットワークの直接接続 | 高パフォーマンスなシナリオ |
| custom | ユーザー定義のネットワーク | 複雑なマイクロサービスアーキテクチャ |
本番運用対応の Compose 例
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file: ./config.json
コンテナのバージョン管理戦略
## バージョン付きイメージをタグ付けしてプッシュ
docker build -t myapp:v1.0 .
docker compose push
デプロイワークフロー
graph TD
A[イメージのビルド] --> B[テストの実行]
B --> C[レジストリへのプッシュ]
C --> D[コンテナのデプロイ]
D --> E[パフォーマンスの監視]
セキュリティとコンプライアンスコマンド
## Compose サービスの脆弱性スキャン
docker compose config --resolve-env-vars
docker scan docker-compose.yml
まとめ
Docker Compose を習得することで、開発者はコンテナオーケストレーションを簡素化し、インフラストラクチャをコードとして定義し、スケーラブルで再現可能なアプリケーション環境を作成できます。このチュートリアルでは、コアコンセプト、構成戦略、実用的な実装手法について説明し、さまざまなインフラストラクチャ環境でシームレスなマルチコンテナアプリケーションの開発とデプロイを可能にします。



