Docker Compose は、複数のコンテナを一括で定義し、管理するためのツールです。
アプリケーションを構成する複数のサービス(コンテナ)を、簡単に起動・停止・管理できます。これは主に YAML
形式の設定ファイル(compose.yaml
/docker-compose.yml
)を用いて行います。
主な特徴
複数コンテナの管理
複数のDockerコンテナを、1つのコマンドで起動、停止、削除できます。
シンプルな設定
設定ファイル(compose.yaml
)に必要なサービスの構成を記述するだけで、それらを自動的にリンクし、ネットワークやボリュームを構成できます。複数のComposeファイルを使用することもできます。
Compose ファイルのデフォルト パスはcompose.yaml
(推奨) またはcompose.yml
です。Compose は、以前のバージョンdocker-compose.yaml
との下位互換性もサポートしています。compose.yaml
とdocker-compose.yaml
の両方が存在する場合、compose.yaml
を優先します。
環境の再現性
チームで共有すれば、異なる環境(開発、テスト、本番など)で同じ構成を再現できます。
ネットワークの自動設定
Composeを使うと、定義したすべてのコンテナが自動的に同じネットワーク上で通信できるようになります。
使用例
基本的な compose.yaml
の例
以下は、Webアプリ(Nginx)とデータベース(MySQL)を構成する例です。
version: '3.8'
services:
web:
image: nginx:latest # nginxイメージを使用
ports:
- "8080:80" # ホストの8080ポートをコンテナの80ポートにマッピング
volumes:
- ./html:/usr/share/nginx/html # ローカルディレクトリをコンテナにマウント
depends_on:
- db # `db` サービスが先に起動する
db:
image: mysql:8.0 # MySQLの公式イメージ
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: exampledb
MYSQL_USER: user
MYSQL_PASSWORD: userpass
volumes:
- db_data:/var/lib/mysql # データを永続化
volumes:
db_data: # 永続化用のボリューム定義
主要なオプション
以下は compose.yaml
におけるよく使われる設定項目です。
1. ベース設定
version
Compose ファイルのバージョンを指定します。
2.services
オプション | 説明 |
---|---|
image | 使用する Docker イメージ名を指定image: nginx:latest のように指定します。 |
build | イメージをビルドするための設定context でDockerfileの場所を指定。 |
command | コンテナ起動時に実行するコマンドを指定 |
ports | ホストとコンテナ間のポートマッピングを指定"8080:80" 。 |
volumes | ホストとコンテナ間で共有するボリュームを指定 例: ./data:/app/data 。 |
environment | 環境変数を指定 例: - ENV_VAR=value または辞書形式で指定。 |
env_file | 外部ファイルで環境変数を定義 |
depends_on | 起動順序を指定 (例: 他のサービスが先に起動する必要がある場合)(MySQL → Webの順など)。 |
networks | 複数のネットワークを定義してサービス間を分離可能。 |
restart | 再起動ポリシー (例: always , on-failure , no ) |
container_name | コンテナ名を指定 |
3. volumes
- データを永続化するためのボリュームを定義します。
オプション | 説明 |
---|---|
driver | ボリュームのドライバーを指定 |
driver_opts | ドライバー用のオプション |
例: volumes
volumes:
data-volume:
driver: local
4. networks
- サービス間の通信に使用するネットワークを定義します。
オプション | 説明 |
---|---|
driver | ネットワークのドライバーを指定 |
driver_opts | ドライバー用のオプション |
attachable | 外部コンテナを接続可能にする設定 |
例: networks
networks:
my-network:
driver: bridge
5. configs
- 外部設定ファイルを定義して、サービスに渡すことができます。
例: configs
configs:
my-config:
file: ./config.txt
6. その他の主要オプション
オプション | 説明 |
---|---|
secrets | セキュアな情報 (例: パスワード、証明書) をサービスに渡す |
logging | ログドライバーや設定を指定 |
deploy | スケーリングやリソース制限を含むデプロイメント設定 |
healthcheck | コンテナのヘルスチェック設定 |
extra_hosts | ホスト名と IP アドレスのマッピングを指定 |
ポイント
- YAML形式の注意
- インデントはスペースを使用(タブは使用しない)。
- キーと値の間はコロン(
:
)を使う。
docker-compose
コマンドと組み合わせる- サービスを起動:
docker-compose up
- サービスを停止:
docker-compose down
- サービスを起動:
- バージョン互換性
version
は使用するDocker Composeバージョンに応じて適切に指定します(通常は3.8
が推奨)。
主なコマンド
compose.yaml
ファイルがあるディレクトリで以下のコマンドを実行します。
サービスを起動
docker-compose up
(-d
を追加するとバックグラウンドで実行)
docker-compose up -d
サービスを停止
docker-compose down
サービスの状態確認
docker-compose ps
特定のサービスを再起動
docker-compose restart <service_name>
サービスのログを表示
docker compose logs
利用シーン
- ローカル開発環境の構築
複数のサービス(Webサーバー、データベース、Redisなど)を統一的に構築。 - テスト環境のセットアップ
テストごとに同じ環境を簡単に起動・破棄できる。 - コンテナの管理を効率化
手作業で複数のdocker run
コマンドを実行する手間を省く。
チュートリアル
Docker公式チュートリアル
https://docs.docker.com/compose/gettingstarted/

参考
Docker Compose Documentation(日本語)
https://docs.docker.jp/compose/toc.html
Docker Compose Documentation(英語)
https://docs.docker.com/compose
Compose file reference
https://docs.docker.com/compose/compose-file/
Docker Compose クイックスタート:チュートリアル
https://docs.docker.com/compose/gettingstarted/
Docker Compose Documentation:複数のComposeファイルを使用する
https://docs.docker.com/compose/how-tos/multiple-compose-files
Docker Compose Documentation:コマンドリスト
https://docs.docker.com/reference/cli/docker/compose
Docker Compose Documentation:Overview of installing Docker Compose
https://docs.docker.com/compose/install/
Docker:Packet filtering and firewalls
https://docs.docker.com/engine/network/packet-filtering-firewalls/#docker-and-ufw
Compose ファイルのバージョンとアップグレード
https://docs.docker.jp/compose/compose-file/compose-versioning.html#compose-file-versioning
コメント