はじめに
この実験では、docker container stop
コマンドを使用して Docker コンテナを適切に停止する方法を学びます。まず、シンプルなコンテナを作成して実行します。その後、デフォルトのシグナルとタイムアウトを使用してコンテナを停止する方法を探り、続いてコンテナ停止に使用するタイムアウトとシグナルをカスタマイズする方法を学びます。この実践的な経験を通じて、Docker コンテナのライフサイクルを効果的に管理するための実用的なスキルを習得できます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、docker container stop
コマンドを使用して Docker コンテナを適切に停止する方法を学びます。まず、シンプルなコンテナを作成して実行します。その後、デフォルトのシグナルとタイムアウトを使用してコンテナを停止する方法を探り、続いてコンテナ停止に使用するタイムアウトとシグナルをカスタマイズする方法を学びます。この実践的な経験を通じて、Docker コンテナのライフサイクルを効果的に管理するための実用的なスキルを習得できます。
このステップでは、シンプルな Docker コンテナを作成して実行する方法を学びます。コンテナは、コードとその依存関係をパッケージ化した標準的なソフトウェアユニットであり、アプリケーションを異なるコンピューティング環境間で迅速かつ確実に実行できるようにします。
まず、Docker Hub からシンプルなイメージをプルしましょう。ここではhello-world
イメージを使用します。これは非常に小さなイメージで、単純にメッセージを表示して終了します。
docker pull hello-world
イメージがプルされ、ダウンロードされていることを示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
イメージを取得したので、このイメージを基にコンテナを実行できます。docker run
コマンドを使用します:
docker run hello-world
このコマンドを実行すると、Docker はhello-world
イメージから新しいコンテナを作成します。コンテナはイメージで定義されたコマンドを実行し、この場合はコンソールにメッセージを表示します。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
この出力は、Docker のインストールが正常に機能しており、最初のコンテナを正常に実行できたことを確認します。コンテナはhello-world
プログラムを実行し、その後終了しました。
実行されたコンテナ(終了したものも含む)を確認するには、docker ps -a
コマンドを使用できます:
docker ps -a
hello-world
コンテナがExited
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> hello-world "/hello" About a minute ago Exited (0) About a minute ago <container_name>
出力には、コンテナ ID、ベースとなったイメージ、実行されたコマンド、作成時刻、現在のステータス、および割り当てられた名前が表示されます。
このステップでは、デフォルトのシグナルとタイムアウトを使用して実行中の Docker コンテナを停止する方法を学びます。コンテナを停止すると、Docker はコンテナ内で実行されているメインプロセスにシグナルを送信します。デフォルトでは、Docker はSIGTERM
シグナルを送信し、プロセスに正常終了するよう通知します。プロセスがデフォルトのタイムアウト期間(通常 10 秒)内に終了しない場合、Docker はSIGKILL
シグナルを送信してプロセスを強制終了させます。
まず、実行状態を維持するコンテナを起動しましょう。ubuntu
イメージを使用し、コンテナを起動したままにするシンプルなコマンドを実行します。
docker pull ubuntu
ubuntu
イメージがプルされていることを示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
次に、ubuntu
コンテナをデタッチモード(-d
)で実行し、バックグラウンドで動作させます。また、コンテナを永続的に実行し続けるコマンド(例:tail -f /dev/null
)を実行します。
docker run -d ubuntu tail -f /dev/null
このコマンドはコンテナ ID を出力します。
<container_id>
docker ps
コマンドを使用して、コンテナが実行中であることを確認できます:
docker ps
ubuntu
コンテナがUp
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
では、docker stop
コマンドを使用してこの実行中のコンテナを停止しましょう。コンテナ ID またはコンテナ名のどちらかを使用できます。<container_id>
を実際の実行中コンテナの ID に置き換えてください。
docker stop <container_id>
このコマンドは停止されたコンテナ ID を出力します。
<container_id>
docker stop
コマンドを実行すると、コンテナはSIGTERM
シグナルを受け取ります。Docker はデフォルトのタイムアウト(10 秒)間、コンテナが正常に停止するのを待ちます。その時間内に停止しない場合、SIGKILL
を送信します。
再度docker ps
を実行して、コンテナが停止したことを確認できます。
docker ps
ubuntu
コンテナはdocker ps
の出力(実行中のコンテナのみ表示)に表示されなくなっているはずです。停止したコンテナも含めてすべてのコンテナを表示するには、docker ps -a
を使用します。
docker ps -a
ubuntu
コンテナがExited
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (0) About a minute ago <container_name>
これにより、デフォルトのシグナルとタイムアウトを使用してコンテナが正常に停止されたことが確認できます。
このステップでは、実行中の Docker コンテナを停止する際に、正常終了期間のカスタムタイムアウトを指定する方法を学びます。これは、アプリケーションがクリーンにシャットダウンするための時間を調整したい場合に有用です。
前のステップと同じubuntu
イメージとコマンドを使用して、実行状態を維持するコンテナを起動します。
まず、ubuntu
コンテナをデタッチモード(-d
)で起動し、tail -f /dev/null
コマンドを実行します:
docker run -d ubuntu tail -f /dev/null
このコマンドはコンテナ ID を出力します。
<container_id>
docker ps
を使用してコンテナが実行中であることを確認します:
docker ps
ubuntu
コンテナがUp
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
次に、docker stop
コマンドを使用してコンテナを停止しますが、今回は-t
または--time
フラグを使用してタイムアウトを指定します。タイムアウトを 5 秒に設定しましょう。<container_id>
を実際の実行中コンテナの ID に置き換えてください。
docker stop -t 5 <container_id>
このコマンドは停止されたコンテナ ID を出力します。
<container_id>
docker stop -t 5
を使用すると、Docker はSIGTERM
シグナルを送信し、コンテナが停止するまで 5 秒間待機します。5 秒後もコンテナが実行中のままの場合、Docker はSIGKILL
シグナルを送信します。
docker ps -a
を実行してコンテナが停止したことを確認します:
docker ps -a
ubuntu
コンテナがExited
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (0) About a minute ago <container_name>
これで、5 秒のカスタムタイムアウトでコンテナを正常に停止できました。
このステップでは、デフォルトのSIGTERM
以外の特定のシグナルを送信して、実行中の Docker コンテナを停止する方法を学びます。これは、正常終了やその他のアクションに対して異なるシグナルに応答するように設定されたアプリケーションに有用です。
再びubuntu
イメージとtail -f /dev/null
コマンドを使用して、コンテナを実行状態に保ちます。
ubuntu
コンテナをデタッチモード(-d
)で実行します:
docker run -d ubuntu tail -f /dev/null
このコマンドはコンテナ ID を出力します。
<container_id>
docker ps
を使用してコンテナが実行中であることを確認します:
docker ps
ubuntu
コンテナがUp
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
次に、docker stop
コマンドを使用してコンテナを停止しますが、--signal
フラグでカスタムシグナルを指定します。例えば、直接SIGKILL
シグナルを送信してみましょう。<container_id>
を実際の実行中コンテナの ID に置き換えてください。
docker stop --signal SIGKILL <container_id>
このコマンドは停止されたコンテナ ID を出力します。
<container_id>
docker stop --signal SIGKILL
を使用すると、Docker はコンテナ内のメインプロセスに即座にSIGKILL
シグナルを送信します。このシグナルはプロセスでキャッチまたは無視できないため、正常終了期間なしに強制的に終了します。
docker ps -a
を実行してコンテナが停止したことを確認します:
docker ps -a
ubuntu
コンテナがExited
ステータスで表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (137) About a minute ago <container_name>
SIGKILL
でコンテナを停止すると、終了コードが異なる(例:137)場合があることに注意してください。これは非正常終了を示しています。
カスタムシグナルを送信してコンテナを正常に停止できました。
この実験では、Docker コンテナを操作する基本的な手順を学びました。まず Docker Hub からシンプルなイメージ (hello-world
) をプルし、そのイメージを基にコンテナを実行しました。これによりコンテナの作成と実行の基本プロセスを確認し、docker ps -a
コマンドでコンテナのステータスをチェックすることで正常に完了したことを検証しました。
提供された内容には詳細は記載されていませんが、その後のステップではdocker container stop
コマンドを使用して実行中のコンテナを停止するプロセスをガイドしていたでしょう。これには、停止時に使用されるデフォルトのシグナルとタイムアウトの理解、そして正常終了を実現するためにタイムアウト時間とコンテナに送信するシグナルの両方をカスタマイズする方法の探求が含まれていたはずです。