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

Docker再起動ポリシーのビギナーズガイド

Dockerには、特定のイベントや障害が発生した場合にコンテナーを自動的に再起動できるようにする再起動ポリシーオプションが用意されています。

これは、Dockerホスト(Linuxサーバー)を再起動する必要があるシナリオや、コンテナーで実行されているサービスに障害が発生した場合に非常に役立ちます。

Dockerの再起動ポリシーは、コンテナーごとに適用されます。再起動ポリシーをコンテナに割り当てるには、2つの方法があります。 Docker Compose、Swarm、Kubernetesを使用する場合は、YAMLファイルで設定できます。

コンテナを実行するときに、コマンドラインで直接再起動ポリシーを設定することもできます。

docker container run --restart <policy>

使用できる再起動ポリシーの種類について話しましょう。

Docker再起動ポリシー

Dockerコンテナには次の再起動ポリシーがあります:

  • いいえ:デフォルトの動作では、コンテナは自動的に起動されません
  • 常に:コンテナが明示的に停止されていない限り、停止されたコンテナを常に再起動します
  • unless-stopped:Dockerデーモンが停止する前にコンテナーが停止状態になっていない限り、コンテナーを再起動します(後で説明します)
  • 失敗時:コンテナがゼロ以外の終了コードで終了した場合、またはdockerデーモンが再起動した場合は、コンテナを再起動します

前述したように、再起動ポリシーを明示的に追加しない場合は、「no」が表示されます。これは、コンテナが自動的に再起動されないことを意味します。

Docker再起動ポリシーの説明と例

実際に視覚化できるように、これらのポリシーの実際の動作を示しましょう。これは、alwaysの違いを理解するのに特に役立ちます およびunless-stopped ポリシー。

常にポリシーを再起動します

alwaysから始めましょう ポリシーを再起動します。このポリシーを設定すると、明示的に停止されない限り、コンテナは常に再起動されます。

alwaysでAlpineLinuxコンテナを実行します ポリシーを再起動します。私はそれをalways-policyと名付けています。

コンテナには1つのタスクがあります。 bash sleepコマンドを10秒間実行してから、終了します。

docker container run --name always-policy --restart always alpine sleep 10

alwaysなし ポリシーを再起動すると、コンテナは10秒後に停止します。ただし、ここでは自動的に再起動し、sleepコマンドをさらに10秒間実行すると、このように続行されます。

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   25 seconds ago   Up 4 seconds             always-policy

上記のコマンドで、コンテナは25秒前に作成されましたが、稼働しているのは4秒だけであることがわかります。同じコンテナが再起動され、新しいコンテナは作成されないことに注意してください。

docker inspectコマンドを使用して、コンテナがこれまでに再起動された回数を確認できます。

[email protected]:~$ docker inspect always-policy | grep -i restartcount
        "RestartCount": 4,

stopコマンドでコンテナを停止した場合、その後自動的に再起動することはありません。以下の例では、コンテナのステータスがUpではなく「Exited」になっていることがわかります。

[email protected]:~$ docker stop always-policy 
always-policy
[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                     PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   58 seconds ago   Exited (0) 6 seconds ago             always-policy

-itを使用しました 上のスクリーンショットのインタラクティブ端末でコンテナを実行するためのオプション。それは習慣から外れていて、ここでは不要でした。

unless-stopped vs always restart policy

unless-stopped alwaysに似ています ポリシーを再起動します。どちらもコンテナを自動的に再起動し、コンテナを明示的に停止しても再起動しません。

ただし、この2つの主な違いは、docker stopコマンドを使用してコンテナーを停止してから、dockerデーモンを再起動すると、コンテナーはalwaysで再起動することです。 再起動ポリシーはコンテナを自動的に起動しますが、unless-stoppedのコンテナ ポリシーは再開されません。

例を挙げて説明します。常に再起動ポリシーで停止したコンテナがすでにあります。 unless-stopped-policyという名前の新しいコンテナを作成しましょう unless-stopped ポリシー。

docker container run --name unless-stopped-policy --restart always alpine sleep 10

コンテナを停止します:

docker stop unless-stopped-policy

これで、明示的に停止された2つのコンテナがあります:

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                          PORTS     NAMES
d244b6e08899   alpine    "sleep 10"   2 minutes ago    Exited (0) About a minute ago             unless-stopped-policy
1171dcfb7e06   alpine    "sleep 10"   22 minutes ago   Exited (0) 21 minutes ago                 always-policy

Dockerデーモンを再起動します:

sudo systemctl restart docker

実行中のコンテナーを確認すると、always-policyという名前のコンテナーがalwaysで設定されているため、実行中であることがわかります。 ポリシーを再起動します。

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   30 minutes ago   Up 8 seconds             always-policy

手順全体は、次のスクリーンショットで確認できます:

障害時の再起動ポリシー

on-failure コンテナがゼロ以外の終了コード(エラー/失敗を示す)で終了した場合、再起動ポリシーはコンテナを再起動します。また、以前に停止状態だったものを含め、dockerデーモンが再起動した場合は、コンテナーを再起動します。

docker stopコマンドを使用してコンテナを手動で停止すると、すべてが正常であることを示すコード0でコンテナが存在します。

DockerComposeファイルでの再起動ポリシーの設定

これで、再起動ポリシーを使用してコンテナを実行することについて、かなり良いアイデアが得られました。

Docker Composeのようなものをコンテナのデプロイに使用している場合は、YAMLファイルでサービスオブジェクトの再起動ポリシーを指定できます。

サンプル例を次に示します。

version: "3.3"      
services:
    NginxProxy:
        image: "jwilder/nginx-proxy:latest"
        restart: "on-failure"
        networks: ["net"]
        ports:
            - "80:80"
            - "443:443"

どのDocker再起動ポリシーを使用しますか?

正直なところ、この質問に対する直接的な答えはありません。それはあなたのユースケースとあなたが望むものに依存します。

この記事がDockerの再起動ポリシーを理解するのに役立つことを願っています。ご質問やご提案がございましたら、コメント欄でお知らせください。


Docker
  1. Dockerコンテナとは:初心者向け入門ガイド

  2. DockerコンテナでNginxを実行する方法:ステップバイステップガイド

  3. DockerコンテナでMySQLを実行する方法:シンプルでわかりやすいガイド

  1. 一部のDOCKERコマンド

  2. Dockerの概要

  3. Dockerコンテナに静的IPを割り当てる方法

  1. DockerコンテナでMySQLを実行する方法

  2. DockerコンテナにVimをインストールする方法

  3. Dockerロギングの完全な初心者向けガイド