Docker Composeは、一言でいうと、これまで紹介してきた様々なDockerコマンドをまとめて管理できるファイルです。
Composeを使用することで、複数のコンテナを一つのYAMLファイルで定義し、簡単に管理、起動、停止、削除することができます。
この記事では、Docker Composeの基本概念、設定方法、および一般的な使用方法について解説します。
Docker Composeの基本概念
Docker Composeは、以下の主な機能を提供します。
- マルチコンテナ管理: 複数のコンテナを一つのYAMLファイルで定義し、単一のコマンドで操作できます。
- サービス定義: 各サービス(コンテナ)の設定を簡潔に定義でき、依存関係も管理できます。
- 環境の再現性: 開発環境や本番環境の構成を簡単に共有でき、再現することが可能です。
Docker Composeファイルの作成
Docker Composeの設定は、通常docker-compose.yml
という名前のYAMLファイルに記述します。以下は、基本的な構成の例です。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
この例では、NginxのWebサーバーとPostgreSQLのデータベースを定義しています。
このYAMLファイルは、Docker Composeの設定ファイルで、バージョン3.8を使用して、2つのサービス(web
とdb
)を定義しています。それぞれのサービスについて詳しく見ていきます。
version: '3.8'
- version: Docker Composeファイルのバージョンを指定します。この場合、3.8というバージョンを使用しています。バージョンによって利用できる機能や書き方が異なります。
webサービス
services:
web:
image: nginx:latest
ports:
- "8080:80"
-
services: このセクションでは、アプリケーションの各サービスを定義します。
-
web: サービスの名前です。この場合、
web
はNginxのWebサーバーを示しています。 -
image: 使用するDockerイメージを指定します。ここでは、
nginx:latest
という最新のNginxイメージを使用します。 -
ports: コンテナのポートとホストのポートをマッピングします。この場合、ホストのポート8080をコンテナのポート80にマッピングしています。これにより、ホストのブラウザで
http://localhost:8080
にアクセスすると、Nginxが提供するコンテンツにアクセスできます。
dbサービス
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
-
db: サービスの名前で、ここではPostgreSQLのデータベースを示しています。
-
image: 使用するDockerイメージを指定します。この場合、
postgres:latest
という最新のPostgreSQLイメージを使用します。 -
environment: 環境変数を設定するセクションです。PostgreSQLの設定に必要な環境変数を指定しています。
- POSTGRES_USER: PostgreSQLのデフォルトユーザー名を設定します。この例では
user
というユーザー名が設定されています。 - POSTGRES_PASSWORD: PostgreSQLのデフォルトユーザーのパスワードを設定します。この例では
password
が指定されています。
Docker Composeの基本コマンド
以下は、Docker Composeでよく使用されるコマンドの一覧です。
サービスの起動: docker-compose up
-d
オプションを使用すると、バックグラウンドで起動します。
docker-compose up -d
サービスの停止: docker-compose down
コンテナを停止し、ネットワークやボリュームも削除します。
docker-compose down
コンテナのログの表示: docker-compose logs
各サービスのログを確認できます。
docker-compose logs -f
環境変数の設定
環境変数は、environment
キーを使って定義できます。また、.env
ファイルを作成し、そこから環境変数を読み込むことも可能です。これにより、設定の柔軟性が向上します。
version: '3.8'
services:
app:
image: myapp:latest
environment:
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
ボリュームとネットワーク
Docker Composeでは、データの永続性を保つためにボリュームを使用し、サービス間の通信を容易にするためにネットワークを設定できます。YAMLファイルでボリュームとネットワークを定義することができます。
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- mydata:/data
volumes:
mydata:
Docker Composeでバインドマウントを設定する方法について解説します。バインドマウントは、ホストマシン上の特定のディレクトリやファイルをコンテナ内にマウントすることで、ホストとコンテナ間でデータを共有できる機能です。これにより、ホスト上のファイルの変更がコンテナ内に即座に反映され、開発作業が効率化されます。
バインドマウントの設定方法
以下は、先ほどのYAMLファイルにバインドマウントを追加する例です。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html # バインドマウントの設定
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
-
volumes: コンテナにマウントするボリュームを指定します。このセクションでバインドマウントを設定します。
-
- ./html:/usr/share/nginx/html
: これはバインドマウントの具体的な設定です。 -
./html: ホストマシン上の相対パスです。
docker-compose.yml
ファイルが存在するディレクトリ内のhtml
フォルダを指定しています。このフォルダにNginxが配信するHTMLファイルを置きます。 -
/usr/share/nginx/html: コンテナ内のパスです。NginxがデフォルトでHTMLファイルを提供するディレクトリです。ここにホストの
html
フォルダの内容がマウントされます。
まとめ
Docker Composeは、複数のコンテナを簡単に管理できる強力なツールです。設定ファイルを使用して、アプリケーションの構成を再現性のある形で定義することができ、環境のセットアップやデプロイメントを効率化します。ぜひ、Composeを活用して、Dockerでの開発をよりスムーズに進めてください。