ビジネスの継続的な更新と反復により、コンテナは頻繁に起動および停止されます。コンテナが停止しているときに、コンテナ内のプログラムが実行されないと、特に一部の分散トランザクションではデータが不完全になり、データの不整合が発生する可能性があります。このため、コンテナではエレガントなシャットダウン機能が導入されています。 前回のコンテナ内で kill -9 を使用してコンテナを強制終了する方法に関する記事では、シグナルをキャプチャする方法を紹介しました。 docker stop コマンドを実行すると、docker はコンテナ内のプロセス ID 1 のプロセスに SIGTERM (kill -15) シグナルを送信します。しばらく待ってもプログラムが終了しない場合は、SIGKILL (kill -9) シグナルを送信してプロセスを強制終了します。待機時間はパラメータで設定できます
ただし、docker kill コマンドを使用すると、待機時間は発生せず、SIGKILL シグナルが直接送信されます。 Kubernetes は、コンテナがシャットダウンされるときに、docker stop コマンドを通じてコンテナを正常にシャットダウンします。コンテナ内のアプリケーションは SIGTERM シグナルを受信すると、新しいアクセス要求を拒否し、未処理のタスクを完了して占有されているリソースを再利用します。以下は、SIGTERM シグナルを取得して正常に終了する方法を示す Go コードの例です。
他のプログラミング言語でも同様ですが、ここで注意すべき落とし穴があります。 Docker がシャットダウンされると、プロセス ID 1 のプロセスにのみシグナルが送信されます。つまり、アプリケーションのプロセス ID が 1 でない場合、Docker から送信されたシグナルは受信されません。次の例がこれを示しています。まず、通常の JAVA プログラムである Kill.java を見てみましょう。
「Javac Kill.java」を実行してコードをコンパイルし、Docker イメージにパッケージ化します。 Dockerfile は次のとおりです。
コンテナを起動してコンテナに入り、「java Kill」プロセス番号が 1 であることを確認します。docker stop コマンドが実行されると、プログラムは TERM シグナルを受信し、正常に終了します。次に、Dockerfile を変更し、起動スクリプト start.sh を追加します。スクリプトは次のように 2 行のみで非常にシンプルです。
イメージを再構築して起動します。新しい Dockerfile は次のとおりです。
コンテナを起動した後、コンテナに入ると JAVA プロセスの ID が 7 になり、シェル (プロセス ID は 1) の子プロセスになることがわかります。
このとき、docker stop コマンドを再度実行すると、コンテナは TERM シグナルを受信せず、デフォルトの 10 秒間の正常なシャットダウン時間後に直接終了します (実際には、SIGKILL によって直接強制終了されます)。したがって、エレガントな終了が必要な場合は、アプリケーションのプロセス ID は 1 である必要があります。 PID が 1 でない場合に正常に終了する他の方法はありますか?もちろん、一般的な方法は 2 つあります。 (1)コンテナをシャットダウンする前にprestopスクリプトを実行することができます。スクリプトは最初に JAVA プロセスの ID を動的に取得し、次に kill を介してプロセスに TERM シグナルを直接送信し、それによってプログラムを正常にシャットダウンします。以下のように表示されます。
(2)tiniコンテナを介してアプリケーションを起動することができます。 Tini は ID 1 のプロセスです。シグナルを受信すると、そのシグナルを子プロセスに転送し、子プロセスが適切な終了操作を実行できるようにします。また、tini 自体にもゾンビ プロセスをリサイクルする機能があります。 |
<<: 黄鶴楼をライトアップ! 2021年テンセントデジタルエコシステムカンファレンスは本日から【ライブ中継予約】を開始します!
>>: 企業がハイブリッド クラウドの導入を検討する必要があるのはなぜですか?
profitserver は、クリスマスと新年に向けて、ロシア (チェリャビンスク、モスクワ)、オラ...
著者 |シルヴァン・カラシュ翻訳者 |張野貴 Kubernetes (略して K8s)上のデータ サ...
パート01機能紹介開発者コンソールの機能1. サービスインスタンス管理: Kafka クラスターイン...
中国新聞社、4月25日(ITチャンネルパンダ) 「偽造品の販売」や製品認可の欠如などの高級品電子商取...
alpharacks.com では、お買い得な夏の終わりセールを実施中です。ご興味がございましたら、...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています昨今、多く...
外部リンク サンドボックスと出力サンドボックスの存在、および外部リンク サンドボックスよりも出力サン...
12月7日、Amazon Cloud Service(AWS)が開催する年次イベント「AWS re:...
著名な企業ドメイン名の投機的かつ悪意のある登録は、指定された期間内に取り消されます。重慶市第五中級人...
クラウドベースのアーキテクチャとオープンソースは理想的な組み合わせのはずですが、Kubernetes...
1. Xiaomi フォーラムのユーザー 800 万人分のデータベースが流出、ダウンロード可能に昨夜...
現在、Kubernetes エコシステムは、技術的な機能と企業顧客のニーズへの適応性の面で急速に発展...
サイトのアップグレードは、あらゆるサイトのライフサイクルに欠かせない部分です。アップグレード プロセ...
Hostxen は 6 年間にわたり VPS を運営しています。現在、香港、日本、シンガポール、米国...
ブラックフライデーとサイバーマンデーに加えて、11月に見逃せないブランドマーケティングのホットスポッ...