Docker Composeは、複数のDockerコンテナを一括で管理し、簡単に起動・停止できるツールです。docker-compose.yml
ファイルは、Composeの設定を定義するための重要なファイルで、プロジェクトの全体構成を一目で把握できるようにします。この記事では、docker-compose.yml
の基本概念から具体的な書き方までを解説します。
1. Docker Composeとは?
Docker Composeは、複数のDockerコンテナを簡単に定義、実行、および管理するためのツールです。docker-compose.yml
ファイルを使って、アプリケーションのサービス、ネットワーク、ボリュームなどの設定を行います。これにより、複数のコンテナを単一のコマンドで管理できるため、開発や運用が効率的になります。
2. docker-compose.ymlの基本構造
docker-compose.yml
ファイルは、YAML形式で記述され、主に以下の要素で構成されます:
- version: Composeファイルのバージョンを指定します。
- services: アプリケーションで使用する各コンテナの設定を定義します。
- networks: コンテナ間のネットワーク設定を定義します(オプション)。
- volumes: コンテナとホスト間で共有するデータの設定を定義します(オプション)。
基本的な構造は以下のようになります:
version: '3'
services:
service_name:
image: image_name
ports:
- "port:port"
environment:
- ENV_VAR=value
volumes:
- volume_name:/path/in/container
networks:
- network_name
networks:
network_name:
driver: bridge
volumes:
volume_name:
3. docker-compose.ymlの具体的な書き方
3.1. サービスの定義
サービスは、アプリケーションの各コンポーネントをDockerコンテナとして定義します。以下の例では、web
サービスとdb
サービスを定義しています:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example_db
networks:
- app-network
volumes:
- db-data:/var/lib/mysql
- image: 使用するDockerイメージを指定します。
- ports: ホストとコンテナのポートをマッピングします。
- volumes: ホストとコンテナ間でファイルを共有します。
- environment: コンテナの環境変数を設定します。
3.2. ネットワークの設定
ネットワークは、コンテナ間の通信を可能にします。docker-compose.yml
ファイル内でネットワークを定義し、サービス間の通信を設定します。
networks:
app-network:
driver: bridge
- driver: ネットワークの種類を指定します(デフォルトは
bridge
)。
3.3. ボリュームの設定
ボリュームは、コンテナのデータを永続化するために使用します。docker-compose.yml
でボリュームを定義し、サービスに割り当てます。
volumes:
db-data:
- db-data: ボリュームの名前を定義し、
db
サービスで使用します。
4. docker-compose.ymlの活用方法
- 開発環境の構築: 複数のサービスを迅速に構築し、開発環境を簡単にセットアップできます。
- CI/CDパイプライン: テストやデプロイメントの際に、設定済みのサービスを一括で起動し、作業の効率化が図れます。
- 運用管理: 本番環境のサービスを一元管理し、スケーリングやアップデートを容易に行えます。
5. まとめ
docker-compose.yml
は、複数のDockerコンテナを管理するための強力なツールです。基本的な構造を理解し、サービス、ネットワーク、ボリュームの設定を適切に行うことで、効率的な開発と運用が実現できます。この記事で紹介した具体的な書き方を参考に、自分のプロジェクトに最適なdocker-compose.yml
を作成してみてください。