6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

コンテナ間に依存関係がある場合、起動順を制御しないとエラーになるため整理しました。開発環境のため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もやります。

参考文献

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?