はじめに
コンテナ間に依存関係がある場合、起動順を制御しないとエラーになるため整理しました。開発環境のためcomposeを想定します。
参考:
結論
healthcheckとdepends_onにより制御する。
compose.yml
services:
backend:
ports:
- "5100:5000"
health_check:
test: "curl -f http://localhost:5000 || exit 1"
interval: 10s
timeout: 10s
retires: 3
start_period: 30s
frontend:
depends_on:
backend:
condition: service_healthy
healthcheck
test
ヘルスチェックとして実行するコマンドを指定する。
- localhost:5100はホスト(ローカルマシン)からアクセスするときのURL
- localhost:5000はコンテナ内からアクセスするときのURL
- ヘルスチェックはコンテナ内部の環境を基準に動作するため、コンテナ内部のポート番号(ここでは5000)を使う
interval
コンテナが動作中の間、ヘルスチェックを繰り返し実行する。この「繰り返し間隔」を指定する(デフォルト: 30s)。
timeout
ヘルスチェックコマンドを実行し、この時間内に応答がないと「失敗」とみなされる時間を指定する(デフォルト: 30s)。
retries
ヘルスチェックの失敗が何回連続するとunhealthyと判定するかを指定する(デフォルト: 3)。
start_period
コンテナが起動してからヘルスチェックを開始するまでの猶予時間を指定する(デフォルト: 0s)。この間に失敗してもカウントされない。
- コンテナが起動してすぐにヘルスチェックを開始すると、アプリケーションがまだ完全に起動していない場合に「失敗」と判定されることがあるため、このような場合に設定する
depends_on
condition
コンテナ間通信を可能にし、依存関係を定義する。ここではbackend→frontendの順にコンテナを起動する。
- service_healthyにより対象のコンテナが起動し正常に動作するのを確認してから起動する
おわりに
Kubernetesもやります。
参考文献