はじめに
Docker Compose は、開発者がコンテナの管理とアプリケーションのデプロイを効率化するための不可欠なツールです。この包括的なチュートリアルでは、Docker Compose の基礎を掘り下げ、単一の宣言型構成ファイルを通して複雑なマルチコンテナ環境の作成、設定、管理について解説します。
Docker Compose の基礎
Docker Compose の概要
Docker Compose は、コンテナオーケストレーションのための強力なツールであり、開発者は単一の構成ファイルを通してマルチコンテナアプリケーションを定義および管理できます。宣言的な方法でサービス、ネットワーク、ボリュームを記述することで、複雑なアプリケーションアーキテクチャの実行を簡素化します。
核心概念とアーキテクチャ
Docker Compose は、アプリケーションサービスを構成するために YAML ファイルを使用し、コンテナサービスの構成を効率化します。主な構成ファイルは通常 docker-compose.yml と命名されます。
graph TD
A[Docker Compose] --> B[YAML 構成]
B --> C[サービス定義]
B --> D[ネットワーク設定]
B --> E[ボリュームマッピング]
構成ファイルの構造
典型的な Docker Compose 構成には、重要な要素が含まれます。
| 要素 | 説明 | 例 |
|---|---|---|
| version | Compose ファイルのバージョン | version: '3.8' |
| services | コンテナ定義 | 複数のサービス構成 |
| networks | カスタムネットワーク設定 | ブリッジ、ホストネットワーク |
| volumes | 永続的なデータストレージ | 名前付きまたはホストマウントされたボリューム |
実用的な例: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: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
コマンドライン操作
マルチコンテナアプリケーションを管理するための重要な Docker Compose コマンドを以下に示します。
## docker-compose.yml に定義されたサービスを開始
docker-compose up -d
## コンテナを停止および削除
docker-compose down
## 実行中のコンテナを表示
docker-compose ps
## サービスのログを表示
docker-compose logs web
サービスの依存関係管理
Docker Compose は、サービスの依存関係を定義することで、起動シーケンスを制御できます。
services:
web:
depends_on:
- database
restart: on-failure
この構成では、データベースサービスが web サービスの前に起動され、自動再起動機能が有効になります。
ボリューム管理
Docker ボリュームの理解
Docker ボリュームは、コンテナの永続的なストレージメカニズムを提供し、ホストシステムとコンテナ化されたアプリケーション間でのデータの保存と共有を可能にします。コンテナ化された環境におけるデータの永続性と状態管理の重要な課題を解決します。
ボリュームタイプの比較
| ボリュームタイプ | 特長 | 使用例 |
|---|---|---|
| 名前付きボリューム | Docker によって管理 | 永続的なアプリケーションデータ |
| バインドマウント | ホストファイルシステムのマッピング | 開発環境 |
| Tmpfs マウント | メモリベースのストレージ | 一時的な、機密データ |
ボリューム管理のワークフロー
graph TD
A[ボリュームの作成] --> B[コンテナへのマウント]
B --> C[データの永続化]
C --> D[バックアップ/移行]
Docker Compose ボリューム構成
version: "3.8"
services:
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backup:/database_backup
volumes:
postgres_data:
driver: local
高度なボリューム管理コマンド
## 名前付きボリュームを作成
docker volume create myapp_data
## 既存のボリュームを一覧表示
docker volume ls
## ボリュームの詳細を表示
docker volume inspect myapp_data
## 使用されていないボリュームを削除
docker volume prune
バインドマウント構成例
services:
web:
image: nginx:latest
volumes:
- ./website:/usr/share/nginx/html:ro
この構成は、ローカルディレクトリをコンテナにマッピングし、読み取り専用権限を付与することで、シームレスな開発ワークフローを可能にします。
高度なデプロイ
マルチ環境構成
Docker Compose は、環境固有の構成を通して洗練されたデプロイ戦略をサポートし、開発、ステージング、本番環境間のシームレスな移行を可能にします。
環境構成戦略
version: "3.8"
services:
web:
image: myapp:${TAG:-latest}
environment:
- DATABASE_HOST=${DATABASE_HOST:-localhost}
- DEBUG=${DEBUG:-false}
サービスのスケーリングメカニズム
graph TD
A[基本サービス] --> B[水平スケーリング]
B --> C[複数のコンテナインスタンス]
C --> D[ロードバランシング]
ネットワーク構成オプション
| ネットワークタイプ | 範囲 | 使用例 |
|---|---|---|
| ブリッジ | コンテナ間 | 内部通信 |
| ホスト | 直接ホストネットワーク | パフォーマンス重視のアプリケーション |
| オーバーレイ | マルチホストネットワーク | 分散システム |
高度なネットワーク例
version: "3.8"
services:
web:
networks:
- frontend
database:
networks:
- backend
networks:
frontend:
backend:
デプロイワークフローコマンド
## 特定の構成でイメージをビルド
docker-compose build
## デタッチモードでデプロイ
docker-compose up -d
## 特定のサービスをスケール
docker-compose up --scale web=3
## ロールアップデートを実行
docker-compose up -d --no-deps --build web
ヘルスチェック構成
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
まとめ
Docker Compose を習得することで、開発者は複雑なアプリケーションアーキテクチャを効率的にオーケストレーションし、サービス間の相互作用を定義し、ネットワーク構成を管理し、さまざまな環境間で一貫したデプロイを確実に行うことができます。このチュートリアルでは、コアコンセプト、実践的な構成戦略、および開発者がコンテナ化技術を効果的に活用するための必須のコマンドライン操作について説明します。



