Docker サービスを再起動する方法

DockerDockerBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Docker は、開発者がアプリケーションを効率的にデプロイおよび管理できる強力なコンテナ化プラットフォームです。Docker サービスを再起動する方法を理解することは、システムの安定性を維持し、潜在的な構成またはパフォーマンスの問題を解決するために重要です。このチュートリアルでは、さまざまなシナリオおよびオペレーティングシステムにわたる Docker サービスの再起動に関する包括的なガイダンスを提供します。この実験(Lab)では、Docker デーモンと個々のコンテナを再起動する方法を学び、さまざまな再起動方法の影響を理解します。

Docker デーモンの再起動

Docker デーモンは、イメージ、コンテナ、ネットワーク、ボリュームなどの Docker オブジェクトを管理するバックグラウンドプロセスです。Docker デーモンの再起動は、構成変更後や、Docker 環境全体に影響を与える問題を解決するために必要な場合があります。

このステップでは、systemd コマンドを使用して Docker デーモンを再起動する方法を学びます。

まず、Docker サービスの現在のステータスを確認しましょう。

sudo systemctl status docker

Docker サービスがアクティブで実行中かどうかを示す出力が表示されるはずです。

Output of checking Docker service status

次に、Docker サービスを再起動しましょう。これにより、デーモンによって管理されているすべての実行中のコンテナが停止し、デーモンが再度起動します。

sudo systemctl restart docker

コマンドが完了したら、ステータスを再度確認して、Docker サービスが正常に再起動されたことを確認します。

sudo systemctl status docker

サービスが再起動され、アクティブになっていることが表示されるはずです。

あるいは、Docker サービスを個別に停止および開始することもできます。まず、サービスを停止します。

sudo systemctl stop docker

ステータスを確認して、非アクティブであることを確認します。

sudo systemctl status docker

次に、サービスを開始します。

sudo systemctl start docker

最後に、ステータスをもう一度確認して、アクティブであることを確認します。

sudo systemctl status docker

Docker デーモンの再起動は、Docker 環境を管理するための基本的な操作です。このアクションにより、すべての実行中のコンテナが停止することに注意してください。

個々のコンテナの再起動

Docker デーモン全体の再起動はすべてのコンテナに影響を与えますが、特定のコンテナのみを再起動する必要があることがよくあります。これは、コンテナ固有の構成変更を適用したり、単一のアプリケーションの問題を解決したり、単にコンテナ内で実行されているサービスを再起動したりする場合に役立ちます。

このステップでは、個々の Docker コンテナを再起動する方法を学びます。

まず、簡単な Nginx イメージを pull し、コンテナを実行しましょう。

docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx

このコマンドは、nginx イメージを pull し、my-nginx という名前のコンテナをデタッチモード (-d) で実行し、ホストのポート 80 をコンテナのポート 80 にマッピングします (-p 80:80)。

コンテナが実行されていることを確認します。

docker ps

my-nginx コンテナが Up のステータスでリストされているはずです。

次に、my-nginx コンテナを再起動しましょう。

docker restart my-nginx

このコマンドは、コンテナに停止シグナルを送信し、正常に停止するのを待ってから、再度起動します。デフォルトでは、Docker はコンテナが強制的に kill されるまで 10 秒間待ちます。

コンテナのステータスを再度確認します。

docker ps

コンテナは引き続き Up としてリストされているはずですが、STATUS 列には再起動されたことが表示されます (例:Up X seconds)。

-t フラグを使用して、再起動操作のタイムアウトを指定することもできます。たとえば、5 秒間待機するには:

docker restart -t 5 my-nginx

これは、アプリケーションをクリーンにシャットダウンするためにより多くの時間が必要な場合に役立ちます。

個々のコンテナを再起動すると、他の実行中のコンテナや Docker デーモン自体に影響を与えることなく、アプリケーションをきめ細かく制御できます。

コンテナの再起動ポリシーの設定

Docker では、コンテナの再起動ポリシーを設定できます。再起動ポリシーは、コンテナが終了した後、Docker デーモンによって自動的に再起動されるかどうかを決定します。これは、アプリケーションの可用性を確保するための重要な機能です。

このステップでは、Docker コンテナの再起動ポリシーを設定する方法を学びます。

まず、以前の my-nginx コンテナを停止して削除し、新たに開始しましょう。

docker stop my-nginx
docker rm my-nginx

次に、再起動ポリシー always を指定して、新しい Nginx コンテナを実行します。

docker run -d --name my-nginx-always --restart=always -p 80:80 nginx

--restart=always フラグは、終了コードに関係なく、コンテナが停止した場合に常にコンテナを再起動するように Docker に指示します。また、Docker デーモンが起動したときにもコンテナを再起動します。

コンテナが実行されていることを確認します。

docker ps

次に、手動で停止してコンテナの障害をシミュレートしましょう。

docker stop my-nginx-always

数秒待ってから、コンテナのステータスを再度確認します。

docker ps

my-nginx-always コンテナが Docker デーモンによって自動的に再起動されたことが表示されるはずです。STATUS 列には、短時間 Up になっていることが示されます。

その他の一般的な再起動ポリシーには、次のものがあります。

  • no: コンテナを自動的に再起動しません (デフォルト)。
  • on-failure: コンテナがゼロ以外の終了コードで終了した場合にのみ、コンテナを再起動します (エラーを示します)。オプションで、再試行の最大回数を指定できます (例:on-failure:5)。
  • unless-stopped: ユーザーによって明示的に停止されるか、Docker デーモンが停止されない限り、常にコンテナを再起動します。

on-failure ポリシーを試してみましょう。現在のコンテナを停止して削除します。

docker stop my-nginx-always
docker rm my-nginx-always

on-failure ポリシーを使用して新しいコンテナを実行します。

docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx

実行されていることを確認します。

docker ps

次に、障害をシミュレートしましょう。これを行うには、ゼロ以外のステータスで終了するコマンドをコンテナ内で実行します。

docker exec my-nginx-on-failure sh -c "exit 1"

数秒後にコンテナのステータスを確認します。

docker ps

コンテナはゼロ以外のステータスで終了したため、自動的に再起動されたはずです。

再起動ポリシーは、コンテナ化されたアプリケーションの回復力を確保するための強力なツールです。適切なポリシーを設定することで、予期せず停止したコンテナの回復を自動化できます。

まとめ

この実験(Lab)では、Docker デーモンと個々のコンテナを再起動する方法を学びました。systemd コマンドを使用してデーモンを再起動するさまざまな方法を調査し、docker restart コマンドを使用して特定のコンテナを再起動する方法を学びました。さらに、Docker の再起動ポリシーと、さまざまな条件に基づいてコンテナを自動的に再起動するように構成する方法について学習し、アプリケーションの可用性を高めました。これらのスキルは、Docker 環境を効果的に管理およびトラブルシューティングするための基本です。