docker-compose.ymlファイルの書き方 超入門
1. はじめに
Docker Composeとは?
Docker Composeは、複数のDockerコンテナを定義し、実行するためのツールです。単一の設定ファイルを使用して、アプリケーションの全サービスを構成し、単一のコマンドでそれらすべてを起動または停止することができます。
Docker Composeの概要と役割
複数コンテナの定義と管理を簡素化
アプリケーションのスタック全体を単一のファイルで記述
開発、テスト、本番環境での一貫性を確保
Dockerのマルチコンテナ環境の管理の利点
環境の再現性が向上
開発からプロダクションまでの移行が容易に
マイクロサービスアーキテクチャの実装をサポート
2. Docker Composeの基本
docker-compose.ymlファイルとは?
docker-compose.ymlは、Docker Composeが使用する主要な設定ファイルです。YAMLフォーマットで記述され、アプリケーションのサービス、ネットワーク、ボリュームを定義します。
ymlファイルの基本構造
version: '3'
services:
# サービス定義
volumes:
# ボリューム定義
networks:
# ネットワーク定義
主な要素の説明
version: 使用するDocker Composeファイルのバージョン
services: アプリケーションを構成する各コンテナの設定
volumes: データの永続化に使用するボリューム
networks: コンテナ間の通信に使用するネットワーク
最もシンプルなdocker-compose.ymlの例
以下は、単一のWebサーバーを実行する最も基本的なdocker-compose.ymlの例です:
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
各要素の簡単な解説
web: サービス名(任意の名前を付けられます)
image: 使用するDockerイメージ
ports: ホストとコンテナのポートマッピング(ホスト:コンテナ)
3. docker-compose.ymlの詳細な解説
複数のサービスの定義
実際のアプリケーションでは、複数のサービスを組み合わせることが一般的です。以下は、Webサーバーとデータベースを組み合わせた例です:
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
サービス間の通信や依存関係の設定方法
depends_on: サービスの起動順序を制御(この例では、dbサービスが先に起動)
サービス名をホスト名として使用可能(例:webサービスからdbサービスへの接続には"db"というホスト名を使用)
ボリュームとネットワークの管理
データの永続化とネットワークの分離は、多くのアプリケーションで重要です。
version: '3'
services:
web:
image: nginx:alpine
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
networks:
- backend
volumes:
db_data:
networks:
frontend:
backend:
永続化データを扱うためのボリューム設定
名前付きボリューム(db_data): データの永続化に使用
バインドマウント(./html:/usr/share/nginx/html): ホストのファイルシステムとの共有
カスタムネットワークの設定方法とその利点
フロントエンドとバックエンドの分離
セキュリティの向上(必要なサービス間のみ通信可能)
環境変数の使用
環境変数を使用することで、異なる環境で同じdocker-compose.ymlファイルを再利用できます。
version: '3'
services:
web:
image: nginx:alpine
ports:
- "${WEB_PORT}:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
環境変数を使って設定を柔軟に変更する方法
${変数名} の形式で環境変数を参照
コマンドラインや.envファイルで値を設定可能
.envファイルの利用例
WEB_PORT=8080
DB_ROOT_PASSWORD=mysecretpassword
.envファイルをdocker-compose.ymlと同じディレクトリに配置することで、自動的に読み込まれます。
まとめ
Docker Composeは、複雑なマルチコンテナアプリケーションの管理を大幅に簡素化します。本記事で紹介した基本概念と実践的な例を通じて、Docker Composeの強力な機能を活用し、効率的な開発環境や本番環境の構築に役立ててください。
初心者の方は、まずシンプルな構成から始め、徐々に複雑な設定に挑戦していくことをおすすめします。Docker Composeの公式ドキュメントも参考になりますので、ぜひ併せてご覧ください。