GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

デーモンが停止したときにDockerコンテナを実行し続ける方法

Dockerが終了すると、すべてのコンテナーが停止します。デフォルトのインストールでは、デーモンも起動していない限り、コンテナは実行されません。デーモンの停止中にコンテナを存続させることにより、ワークロードのダウンタイムを最小限に抑える方法は次のとおりです。

なぜこれが重要なのですか?

Dockerは、本番環境でソリューションをサポートできる信頼性の高いシステムであることが証明されています。それは間違いないということではありません。それでも、デーモンが動作しなくなり、コンテナがオフラインになるクラッシュが発生する可能性があります。

別のシナリオでは、オペレーティングシステムのパッケージマネージャーがDockerを自動更新し、デーモンが再起動して短時間のダウンタイムが発生する場合があります。理想的には、これらの状況はワークロードに影響を与えることなく解決できます。デーモンは管理するだけなので コンテナ、docker runなどのコマンドを実装する およびdocker rm 、コンテナのライフサイクルの間にある期間を通して、それが固執する必要はありません。

コンテナライブ復元

Dockerは、これを可能にする「ライブリストア」と呼ばれるシステムをサポートしています。 Dockerは、デーモンのシャットダウン中にコンテナーを終了する代わりに、コンテナーを実行し続けます。再起動すると、中断したところから再開します。

ライブリストアは手動で有効にする必要があります。 dockerdを実行すると、1回限りで使用できます。 --live-restore flagを使用 :

sudo dockerd --live-restore

ライブリストアを永続的に有効にするには、それをDockerデーモン構成ファイルに追加します。これは通常、/etc/docker/daemon.jsonにあります。 。ファイルがまだ存在しない場合は、作成する必要があります。

{
    "live-restore": true
}

次に、Dockerに構成をリロードするように指示する必要があります。デーモンの完全な再起動とは異なり、リロードはコンテナに影響を与えません。

sudo systemctl reload docker

これで、ライブ復元がアクティブ化されます。 Dockerデーモンを停止することでテストできます。

sudo systemctl stop docker

デーモンがシャットダウンされていても、実行中のコンテナはアクティブのままである必要があります。 dockerは使用できなくなります コマンド、デーモン接続は失われますが、コンテナーは実行を継続し、ネットワーク接続を保持します。

Dockerは、再起動時に既存のコンテナーを自動的に検出します。ダウンタイムに悩まされることなく、中断したところから続行できます。

持続デーモンなしの実行の処理

アクティブなデーモン接続なしでコンテナを実行しても、長期間にわたって深刻な結果を招くことはありません。ただし、デーモンが長期間停止すると、ログが失われ始めます。

Dockerコンテナーは、ログを先入れ先出し(FIFO)バッファーにパイプします。 Dockerデーモンはバッファーの内容を読み取り、docker logsで表示する永続ログファイルを作成します 。

デフォルトのバッファサイズはわずか64Kであるため、デーモンがその内容をアクティブに読み取っていない場合は、バッファが使い果たされる可能性があります。バッファーがいっぱいになると、デーモンがバッファーのフラッシュを完了するまで、ログを処理できなくなります。 /proc/sys/fs/pipe-max-sizeの値を編集することで、バッファーサイズを増やすことができます。 。

ライブ復元の警告

Live Restoreは、Dockerデーモンがシャットダウンして後で回復するほとんどのシナリオをカバーする必要があります。これにはDockerの更新が含まれますが、マイナーパッチリリース間のみです。新しいメジャーDockerバージョン(19.03など)をインストールする場合 20.10へ )、Live Restoreは使用されず、Dockerデーモンは常に再起動されます。

Dockerデーモン設定をその場で編集する方法としてLiveRestoreを使用する場合は注意が必要です。ブリッジIPアドレスなどの一部のオプションを変更すると、デーモンの再起動時にコンテナーが正しく復元されなくなります。この場合、影響を受けるすべてのコンテナを手動で停止し、新しいコンテナと交換する必要があります。この状況は、再起動後にオペレーティングシステムが別のネットワーク設定を割り当てた場合にも発生する可能性があります。

Live Restoreは、Dockerの更新および計画外のデーモンの停止中に使用することを目的としています。デーモン設定を編集する必要がある場合は、代わりにダウンタイムを計画してみてください。 systemctl reload dockerを使用することもできます デーモンを完全に再起動せずに構成ファイルをリロードします。

Windowsベースのコンテナ用のLiveRestoreはまだありません。 できます ライブ復元を使用する Linuxベースのコンテナを備えたWindows。 Docker Desktopに組み込まれており、[設定]>[デーモン]>[詳細]から有効になります。

結論

Live Restoreを使用すると、Dockerデーモンがない状態でコンテナーを実行し続けることで、中断を伴うダウンタイムを最小限に抑えることができます。緊急のDockerアップデートをインストールする必要がある場合、または突然のクラッシュが発生した場合は、デーモンが再起動している間、ワークロードは動作し続ける必要があります。

ライブリストアのアクティブ化は、本番環境でDockerを実行する場合のベストプラクティスの手順です。構成分析ツールは、それが有効になっていないインストールにフラグを立てる場合があります。

Live Restoreを使用するだけでなく、コンテナにも適切な再起動ポリシーがあることを確認する必要があります。 restart: alwaysを使用する OSの再起動後、またはLiveRestoreを使用できなかった他のデーモンの起動後に個々のコンテナが復旧します。


Docker
  1. DockerComposeの使用方法

  2. 実行中のDockerコンテナでコマンドを実行する方法

  3. 実行中のコンテナのホスト名を指定するには?

  1. 実行中のDockerコンテナを自動的に更新する方法

  2. Dockerコンテナを接続する方法

  3. 環境変数をDockerコンテナに渡す方法

  1. 未使用のDockerリソースを整理する方法

  2. Docker再起動ポリシーを使用してコンテナーを実行し続ける方法

  3. Dockerコンテナを一覧表示する方法