このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】compose.yamlのコンテナ依存関係の定義

Docker Composeにおけるコンテナ依存関係の定義は、複数のサービスがお互いに依存関係を持つ場合に使用されます。これは、特定のサービスが他のサービスの起動を待機する必要がある場合に特に重要です。以下に、コンテナ依存関係の定義に関する詳細を解説します。
Docker Composeファイルでは、「depends_on
」キーを使用してコンテナの依存関係を定義します。具体的には、あるサービスが他のサービスに依存している場合、そのサービスの定義内で「depends_on
」キーを使用して依存関係を指定します。

depends_onの依存関係の定義
依存関係の定義には以下のポイントがあります。
起動順序の制御
「depends_on
」を使用すると、依存関係のあるコンテナが起動される順序を制御できます。依存するサービスが起動していることを確認してから、依存するサービスを起動することができます。
待機の制御
ただし、「depends_on
」はコンテナが起動したかどうかを待機する機能を提供しません。コンテナの起動が完了したかどうかを確認する機能はありません。そのため、起動したコンテナが処理を開始する前に、依存するコンテナに接続しようとするとエラーが発生する可能性があります。
Healthcheckの活用
コンテナが起動した後に依存関係があるサービスに接続する必要がある場合、Healthcheckを使用して依存するサービスの状態を定期的にチェックすることが有効です。これにより、依存するサービスが利用可能になるまで待機することができます。
コンテナの依存関係を適切に定義することで、複数のサービスを協調して起動し、連携させることができます。これにより、システム全体の正常な動作を確保し、依存関係が適切に管理されることになります。
depends_onのconditionとhealthcheckについて
Docker Composeの「depends_on
」ディレクティブには、「condition
」というオプションがあります。これは、サービス間の依存関係を制御するための追加の条件を指定するために使用されます。一方、「healthcheck
」ディレクティブは、サービスが健康状態であるかどうかを定期的にチェックするための機能です。
1.depends_onのconditionについて
「depends_on
」ディレクティブには、「condition
」というオプションがあります。これを使用することで、特定の条件が満たされるまで待機するかどうかを制御できます。「condition
」には以下の値を指定することができます。
service_started
依存するサービスが起動したかどうかを確認します。サービスが起動していれば待機せず、直ちに次のサービスを起動します。
service_healthy
依存するサービスのHealthcheckが成功したかどうかを確認します。サービスが健康状態であれば待機せず、直ちに次のサービスを起動します。
「condition
」を使用することで、サービスが起動する順序をより厳密に制御することができます。
2.healthcheckについて
「healthcheck
」ディレクティブは、サービスが健康状態であるかどうかを定期的にチェックするための機能です。この機能を使用することで、依存するサービスが利用可能になるまで待機することができます。「healthcheck
」には、コマンド、インターバル、リトライ回数、タイムアウトなどの設定を指定することができます。
定義の例
以下は、「depends_on
」の「condition
」と「healthcheck
」を使用したDocker Composeの定義の例です。
services:
db:
image: mariadb
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
retries: 5
ports:
- "3306:3306"
wordpress:
image: wordpress
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:80"]
interval: 10s
retries: 5
ports:
- "80:80"
この例では、WordPressサービスはMariaDBサービスに依存しており、「condition: service_healthy
」を使用して、MariaDBサービスの Healthcheck が成功するまで待機します。また、各サービスの healthcheck
ディレクティブを使用して、定期的にサービスの健康状態をチェックしています。