実行中のコンテナが終了したときに、コンテナが完全に終了する前に環境をクリーンアップするなど、いくつかの定義済みアクションを実行するにはどうすればよいでしょうか。これはプレストップに似たフック体験です。ただし、Docker 自体はこの機能を提供することはできません。この記事では、Linux 組み込みコマンド トラップを組み合わせて、コンテナーが正常に閉じられる前にカスタム操作を実装します。 実行中のコンテナが終了したときに、コンテナが完全に終了する前に環境をクリーンアップするなど、いくつかの定義済みアクションを実行するにはどうすればよいでしょうか。これはプレストップに似たフック体験です。ただし、Docker 自体はこの機能を提供することはできません。この記事では、Linux 組み込みコマンド トラップを組み合わせて、コンテナーが正常に閉じられる前にカスタム操作を実装します。 コンテナを閉じる方法実行中のコンテナをシャットダウンする方法は 3 つあり、いずれも docker コマンドラインによって開始されると理解しています。
Docker の設計者は、理由もなくコンテナをシャットダウンするための 3 つのコマンドの組み合わせを設計することはありません。どのようなシナリオで 3 つの方法を使用すべきでしょうか? コンテナを終了するこれら 3 つの方法は、それぞれ若干異なります。これらの違いを説明する前に、コンテナとは関係ないと思われるいくつかの知識ポイント、つまり SIGNAL について触れておく必要があります。 プロセスとシグナルユーザーはシグナルを送信することでプロセスと通信できます。 ほぼすべての運用および保守エンジニアは、プロセスを強制終了するために次のコマンドを実行したことがあります。
このコマンドは正しいようです。プロセスを「強制終了」しましたが、なぜ「-9」なのでしょうか? 9 はシグナル SIGKILL のコードです。上記のコマンドは、実際に対応するプロセスにシグナルを送信します。このシグナルによって、プロセスが強制終了されます。
各信号の意味を詳しく説明するつもりはありません。私のスキルはまだそこまでには程遠いです。ここでは、私たちのトピックに関連する知識だけを取り上げ、説明します。 私たちのトピックに関連するシグナルは
コンテナとシグナルコンテナの本質は、カプセル化されたプロセスのグループです。したがって、冒頭で述べた 3 つのコマンド ライン メソッドを使用して実行中のコンテナーを閉じることは、本質的には、コンテナー内のプロセスと対話してプロセスを「強制終了」するシグナルを送信するプロセスです。
比較すると、実行中のコンテナを停止するために さて、いよいよ本題に入りましょう。 信号をキャプチャして処理するシグナル Linux には、シグナルをキャプチャし、プロセスが完全に終了する前に特定のタスクが実行されるようにする組み込みの
基本的な使い方は以下のとおりです。
アイデアは明確です。コンテナが終了する前に実行する必要があるすべての処理を完了するには、コンテナの起動スクリプトに 以下は、コンテナの ENTRYPOINT として実行されるスクリプトの例です。 #!/bin/bash 関数 clean_up_term { rm -rf /データ/tmp echo "clean_up_term が実行中" } トラップ clean_up_term SIGTERM ((i=1;i<=1000;i++)) の場合 する echo "$i を待つ" 睡眠1 終わり コンテナが起動したら、別のターミナルから
これで、docker コンテナが正常に終了する前に、trap を使用して環境のクリーンアップを実行する方法についての説明は終了です。docker コンテナ実行環境のクリーンアップの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 中国語と英語のフォント名の比較表(FounderとArphicを含む)
setinterval を使用すると、ページを開いた直後に 1 秒の遅延後に実行されることがわかりま...
スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...
1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...
Bashで配列を定義するbash スクリプトで新しい配列を作成する方法は 2 つあります。 1 つ目...
1. VMware vSphere 導入の早期計画のポイント1. vSphereの利点(わずかに)...
memcachedをインストールする yum インストール -y memcached #memcac...
nginx がリソース圧縮を実現する原理は、ngx_http_gzip_module モジュールを介...
MySQL スロー クエリ ログは、問題のあるクエリを追跡するのに非常に役立ちます。現在のプログラム...
CSS を使用してすべての子要素を再帰的に選択するにはどうすればよいですか?以下の記事では、CSS ...
目次Jenkinsのインストールインストールポート番号を変更します(デフォルトのポートは8080です...
主に2つの側面から: 1. ハイライト/改行2. コードのコピーボタンこれら両方には既製のプラグイン...
序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...
コードをコピーコードは次のとおりです。 <本文<フォームアクション="&quo...
汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...
仕事で必要になったため、インターネットで多くの情報を見つけましたが、それらはすべてコピーアンドペース...