特定のシグナルでコンテナを再起動する
このステップでは、コンテナのメインプロセスに特定のシグナルを送信して Docker コンテナを再起動する方法を学びます。docker restart
はデフォルトで停止シグナル (SIGTERM
) を送信し、タイムアウト後に kill シグナル (SIGKILL
) を送信しますが、コンテナ内で実行されているアプリケーションに応じて異なるシグナルを送信する必要がある場合があります。これは、docker stop
で特定のシグナルを使用してコンテナを停止し、その後docker start
で再度起動することで実現できます。
再びmy-nginx
コンテナを使用します。まずコンテナが実行中であることを確認してください。
docker ps
実行中でない場合は起動します:
docker start my-nginx
ここで、SIGKILL
シグナルを送信してコンテナを停止します。このシグナルはクリーンアップ処理を行わせず、プロセスを即座に終了させます。
docker stop -s SIGKILL my-nginx
コンテナ名が表示され、docker ps
を実行するとコンテナがリストに表示されなくなっているはずです。
docker ps
コンテナは停止状態になりました。再起動するには、単純に再度起動します。
docker start my-nginx
コンテナは再び実行中になっているはずです。docker ps
で確認します。
docker ps
my-nginx
がUp
ステータスでリストされているのが確認できるでしょう。
SIGKILL
は強制的な停止方法ですが、アプリケーションが適切なシャットダウンやリロードのために処理できるように設定されている場合は、SIGHUP
やSIGINT
などの他のシグナルを送信することもできます。ただし、nginx
コンテナのデフォルト設定はSIGTERM
を適切に処理します。
今度はデフォルトのSIGTERM
シグナル(docker stop
でシグナルが指定されない場合のデフォルト)を使用してコンテナを停止してみましょう。
docker stop my-nginx
停止状態を確認します:
docker ps
最後にもう一度起動します。
docker start my-nginx
実行状態を確認します:
docker ps
docker stop -s <signal>
とdocker start
を組み合わせることで、コンテナを再起動する前にどのように停止するかをより細かく制御できます。