Docker Composeとは? マルチコンテナアプリを解説
Docker Composeは、単一のYAMLファイルからマルチコンテナアプリケーションを定義し実行するため、アプリケーションとその依存関係が1つのコマンドで一緒に起動します。
実際のアプリケーションには複数のcontainerが必要です: webサービス、データベース、cacheなどです。Docker Composeでは、それらすべて、そのネットワーク、そして設定を1つのファイルで宣言し、1つのコマンドでstack全体を起動または停止できます。これはローカル開発とCIにとって非常に価値があります。
Docker Composeとは
Docker Composeは、マルチコンテナのDockerアプリケーションを定義し実行するためのツールです。compose.yamlファイルには、サービス(container)、ネットワーク、volumeとその設定が列挙されます。"docker compose" コマンドがそれを読み取り、セット全体を1つのユニットとして管理します。
仕組み
ファイル内の各サービスはcontainerに対応し、Dockerfileからビルドされるか、imageとしてpullされ、ポート、環境変数、依存関係が宣言されます。Composeは共有ネットワークを作成するため、サービスは名前で互いに到達できます。"docker compose up" がすべてを起動し、"down" がクリーンに停止します。
composeの例
1つのファイルで結び付けられた2つのサービス。
services:
web:
build: .
ports: ["3000:3000"]
depends_on: [db]
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secretCI/CDにおける役割
CIでは、Composeは実際の依存関係を必要とする統合テストに理想的です: アプリケーションをデータベースやcacheとともに立ち上げ、それらに対してテストを実行し、その後すべてを停止します。"docker compose up -d" がstackをバックグラウンドで起動し、テストが実行され、"down" がクリーンアップします。完全なstackの起動はリソース負荷が高いため、warmなimageのcacheを備えたより高速なマネージドrunnerがこれらのjobを迅速に保ちます。
代替ツール
Testcontainersはテストコード内からプログラム的にcontainerを管理し、多くのチームが統合テストで好んで使います。kindやk3dを使ったKubernetesは、より本番に近いセットアップのためにローカルクラスタを実行します。Composeは、開発とCIのためにマルチコンテナアプリを宣言し実行する最もシンプルな方法であり続けています。
重要なポイント
- Docker Composeは1つのYAMLファイルからマルチコンテナアプリを実行します。
- サービスをネットワークで結び付け、1つのユニットとして管理します。
- CIでは、統合テストのために実際の依存関係を立ち上げるのに理想的です。