Dockerコンテナのネイティブヘルスチェックメカニズムの詳細な説明

Dockerコンテナのネイティブヘルスチェックメカニズムの詳細な説明

なぜヘルスチェックメカニズムが必要なのでしょうか?

ヘルス チェック メカニズムは、サービスの可用性をチェックし、サービスが利用できない場合は、可用性を回復するためにサービスを適時に再起動するために使用されます。前回の記事「Kubernetes で livenessProbe、readinessProbe、startupProbe を構成する」では、Kubernetes のさまざまなヘルスチェックの種類と構成方法について説明しました。この記事では、Docker コンテナのヘルスチェックのメカニズムについて説明します。

上記の記事を読んだ人なら、サービス自体のヘルスチェックを実行する必要がある理由をきっと理解できるでしょう。 Docker を例にして説明しましょう。 Docker デーモンはコンテナの実行と管理に使用されます。コンテナ内の PID 1 のプロセスを監視します。実際、実際のシナリオでは、PID 1 のプロセスだけを監視するだけでは不十分です。たとえば、コンテナ内のサービスでデッドロックが発生した場合、サービスはユーザー要求を処理できませんが、PID 1 のプロセスは引き続き実行されています。

Docker ヘルスチェックメカニズム

Docker の健全性を確認するには 2 つの方法があります。

  • ヘルスチェック戦略を構成するには、Dockerfile で HEALTHCHECK コマンドを使用します。
  • コンテナを起動するときにヘルスチェック ポリシーを構成します (docker run コマンド)。

DockerfileのHEALTHCHECKコマンドを使用してヘルスチェック戦略を設定します。

HEALTHCHECK を使用して Dockerfile でヘルスチェック ポリシーを宣言すると、コンテナの起動後にヘルスチェックが自動的に実行されます。 HEALTHCHECK は次のオプションをサポートしています。

  • --interval=<interval>: 2 つのヘルスチェック間の間隔。デフォルト値は 30 秒です。
  • --timeout=<timeout>: ヘルスチェック コマンドを実行するためのタイムアウト。この時間を超過すると、ヘルスチェックは失敗とみなされます。デフォルト値は 30 秒です。
  • --retries=<再試行回数>: 指定された回数連続して再試行すると、コンテナのステータスが異常に設定されます。デフォルトは3回です。
  • --start-period=<interval>: アプリケーションの起動時間(起動時のヘルスチェックの失敗を除く)。デフォルトは 0 秒です。

以下に使用例をいくつか示します。

 from elasticsearch:latest HEALTHCHECK --interval=5s --timeout=2s --retries=3 \ CMD curl --silent --fail localhost:9200/_cluster/health || exit 1

Dockerfile には HEALTHCHECK を 1 つだけ記述するのが最適です。複数の HEALTHCHECK を記述した場合、最後のものだけが有効になります。

CMDコマンドの戻り値には次の3種類があります。

  • 0、成功;
  • 1. 失敗
  • 2. 値を予約し、使用しないでください。

docker run を実行すると、コンテナの初期状態が起動します。設定された間隔時間を待機した後、ヘルス チェックが開始されます。単一のチェックの戻り値が 0 でない場合、またはチェック時間がタイムアウトを超えた場合、チェックは失敗したとみなされます。ヘルス チェックが再試行回数を超えて連続して失敗すると、状態が「不正常」に変わります。ヘルスチェックの結果が成功すると、コンテナは正常状態に設定されます。

コンテナの起動時にヘルスチェックポリシーを構成する(docker runコマンド)

次に例を示します。

 $ docker run --rm -d \ --name=es \ --health-cmd="curl --silent --fail localhost:9200/_cluster/health || exit 1" \ --health-interval=5s \ --health-timeout=2s \ --health-retries=3 \ elasticsearch:latest

パラメータは最初の方法と同じ意味を持ちます。ヘルス チェック コマンドの出力はヘルス ステータスに保存され、docker inspect コマンドで表示できます。

まとめ

この記事では、非常に便利な Docker のネイティブ ヘルス チェック メソッドを 2 つ紹介します。現在主流のコンテナ オーケストレーション フレームワークには、ヘルス チェック機能も組み込まれています。この場合、Docker のネイティブ ヘルス チェック メソッドを使用する必要はありません。

<<:  K8S を学びたいなら、DaemonSet は非常に重要です!収集する価値がある

>>:  5G時代のエッジコンピューティングとは?

推薦する

ウェブサイト構築、シンプル化の方が良い

現在のインターネット環境は非常に衝動的であり、人々はランキングと利益のためにユーザーエクスペリエンス...

品質重視の時代にSEO最適化は何をすべきか?

Baidu などの検索エンジン アルゴリズムの頻繁な更新を背景に、インターネット コンテンツの品質向...

hosteons: 50% オフ、24 時間限定、1G メモリ + データ無制限、年払い $13.5

hosteons からの最新ニュース: 新しく発売された OpenVZ7 シリーズ VPS の 50...

ウェブサイトマーケティングはユーザーのニーズに基づいて行い、革新を追求する必要がある

今日、私はギークパークイノベーションカンファレンスでのQihoo 360 CEO の周紅毅氏のスピー...

ユーザー維持を左右する重要な要素は、製品、ユーザー チャネル、運用戦略の 3 つです。

今日のAPP爆発の時代では、栄光も衰退も予想外のものとなりました。一夜にして有名になるか、一夜にして...

Amazon Kinesis Data Streams の紹介

Amazon Kinesis Data Streams を使用すると、特定のニーズに合わせてストリー...

AI+クラウドランディングBeifei Technology、Amazon Pollyの助けを借りて教育モードの変化を促進

[51CTO.comより引用] 時代のトレンドである最先端技術として、人工知能はニュースという形で人...

百度が2013年の年間検索ランキングを発表、教育分野ではオンライン教育がホットワードに

A5 Webmaster Network は 12 月 24 日に、今日が 2013 年のクリスマス...

医療SEO相談件数増加の分析

医療 SEO 担当者としての職務は、内部リンク、外部リンク、タイトル、キーワード、説明などの基本的な...

なぜ Tencent App Store はワールドカップカーニバルで Momo と提携したのでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますワールドカ...

簡単な分析: オリジナル記事は SEO にとってどれほど重要ですか?

SEO 最適化におけるオリジナル記事の重要性についての記事はこれまでにも数多く目にしてきました。Ba...

LEE外部リンク判定はネットワーク最適化の新時代に相当する

あなたと私がまだ「頑張れ雅安」の悲しみに浸っている間にも、百度は世界を変えるペースを止めていません。...

Springboot+Dubboを使用して分散マイクロサービスを構築し、プロセス全体にわたって開発に注釈を付ける

インターネットの発展に伴い、ウェブサイトアプリケーションの規模は拡大し続けています。従来の垂直アプリ...