Docker Compose の概要
Docker Compose は、複数のコンテナで構成されるアプリケーションを効率的に定義・実行するためのツールです。YAML 形式の設定ファイルを用いて、アプリケーションに必要なサービス群(データベース、キャッシュ、Webサーバーなど)を記述し、単一のコマンドで一括起動できます。
Compose の中心的な概念は以下の2つです:
- サービス (Service): アプリケーションを構成する1つのコンテナ(または同じイメージから生成された複数のコンテナインスタンス)を表します。
- プロジェクト (Project): 関連するサービス群をひとまとめにした論理的な単位です。docker-compose.yml ファイルで定義され、プロジェクト単位でコンテナのライフサイクルを管理します。
Compose はプロジェクトを管理対象とし、その配下の全コンテナに対して起動・停止・削除などの操作を行います。利用には Docker エンジンがインストールされていることが前提です。
利用の流れ:
- Docker 環境のセットアップ
- docker-compose 実行ファイルの導入
- YAML ファイルの作成(プロジェクトとサービスの定義)
- 複数コンテナの起動と管理
具体例: Wordpress ブログを構築する場合、従来は MySQL、Redis、Wordpress の各コンテナを手動で起動し、依存関係(MySQL → Wordpress)に注意しながら順序制御が必要でした。Compose を使えば、これら3つのコンテナを1つのプロジェクトとして統一的に管理し、自動的に依存順序に従って起動できます。
導入とインストール
docker-compose は単一のバイナリファイルとして提供されます。システムの bin ディレクトリに配置し、実行権限を付与して使用します。以下の手順でインストールします。
# バイナリをダウンロード
sudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 実行権限を付与
chmod +x /usr/local/bin/docker-compose
# 動作確認
docker-compose -v
実際の設定例と解説
プロジェクトディレクトリを作成し、その中に設定ファイルを配置します。
# ファイル名: docker-compose.yml
version: '3'
services:
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:latest
ports:
- "6379:6379"
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
REDIS_HOST: redis
depends_on:
- mysql
- redis
volumes:
mysql_data:
設定ファイルのポイント:
- インデント: YAML 形式ではスペース2つで階層を表現します。タブは使用できません。
- キーと値の区切り: コロンの後には必ず半角スペースを入れます(例:
image: mysql:5.7)。 - 複数値の指定: ports, volumes, networks など、複数の値を取るフィールドは、
- (ハイフン + スペース)を使ってリスト形式で記述します。 - ファイル名のルール: 以下のいずれかの名前である必要があります:
docker-compose.yml,docker-compose.yaml,compose.yml,compose.yaml。 - サービス定義: すべてのサービスは
services:の下にユニークな名前で定義します。各サービスにはイメージ名、環境変数、ポートマッピングなどを記述します。 - 依存関係:
depends_onでサービスの起動順序を制御します。ここでは wordpress が mysql と redis に依存するため、それらが先に起動されます。 - ネットワーク:
networksフィールドでカスタムネットワークを作成し、サービスごとに割り当てることができます。 - ボリューム:
volumesフィールドでデータ永続化用のボリュームを定義し、サービス内でコンテナパスにマウントします。
プロジェクトの起動と管理
設定ファイルが置かれたディレクトリで以下のコマンドを実行します。
# バックグラウンドで全サービスを起動
docker-compose up -d
# サービスを再起動
docker-compose restart
# 全サービスを停止し、コンテナとネットワークを削除
docker-compose down
代表的な管理コマンド:
docker-compose up: サービスの起動と実行docker-compose stop: サービスの停止(コンテナは保持)docker-compose restart: サービスの再起動docker-compose build: サービスイメージのビルドdocker-compose rm: 停止したコンテナの削除docker-compose ps: 現在のサービス状態の一覧docker-compose logs: 各サービスコンテナのログ表示docker-compose inspect: コンテナの詳細情報の取得docker-compose exec [サービス名] [コマンド]: 実行中のコンテナ内でコマンドを実行docker-compose down: プロジェクトの完全削除(コンテナ・ネットワーク・必要に応じてボリュームも削除)
まとめ:docker-compose.yml にサービス定義を YAML 形式で記述することで、複数コンテナの一括管理と依存順序の自動制御が可能になります。各サービスの設定内容は docker run コマンドのオプションと基本的に対応しており、インデントルールに注意すれば容易に記述できます。