はじめに
この実験では、docker container kill
コマンドを使用して Docker コンテナを管理する方法を学びます。まず、シンプルなコンテナを作成して実行します。その後、デフォルトのシグナルを使用して実行中のコンテナを停止する方法を探ります。最後に、名前と番号の両方でカスタムシグナルを使用してコンテナを強制終了する方法を学び、Docker コンテナのライフサイクルを制御するための重要なスキルを習得します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、docker container kill
コマンドを使用して Docker コンテナを管理する方法を学びます。まず、シンプルなコンテナを作成して実行します。その後、デフォルトのシグナルを使用して実行中のコンテナを停止する方法を探ります。最後に、名前と番号の両方でカスタムシグナルを使用してコンテナを強制終了する方法を学び、Docker コンテナのライフサイクルを制御するための重要なスキルを習得します。
このステップでは、シンプルな Docker コンテナを作成して実行する方法を学びます。コンテナとは、コードとその依存関係をパッケージ化した標準的なソフトウェアユニットであり、アプリケーションを異なるコンピューティング環境間で高速かつ確実に実行できるようにします。
まず、使用する Docker イメージをプルする必要があります。ここでは最小限の Ubuntu オペレーティングシステムであるubuntu
イメージを使用します。
docker pull ubuntu
このコマンドは Docker Hub からubuntu
イメージをローカルマシンにダウンロードします。ダウンロードの進捗状況を示す出力が表示されます。
イメージを取得したら、それに基づいてコンテナを実行できます。コンテナ内でシンプルなコマンドを実行してみましょう。
docker run ubuntu echo "Hello from Docker!"
このコマンドを分解してみましょう:
docker run
: 新しいコンテナを実行するコマンドubuntu
: 使用するイメージ名echo "Hello from Docker!"
: コンテナ内で実行されるコマンドこのコマンドを実行すると、Docker はubuntu
イメージから新しいコンテナを作成し、その中でecho
コマンドを実行した後、コンテナは停止します。ターミナルにHello from Docker!
という出力が表示されるはずです。
実行済みのコンテナ(終了したものも含む)を確認するには、docker ps -a
コマンドを使用します。
docker ps -a
このコマンドは実行中および停止中のすべてのコンテナを一覧表示します。先ほど実行したコンテナが"Exited"(終了)ステータスで表示されるはずです。
前のステップでは、コマンドを実行して終了するコンテナを実行しました。このステップでは、実行状態を維持するコンテナを起動し、デフォルトシグナルを使用して停止する方法を学びます。
まず、継続的に実行されるコンテナを起動します。再びubuntu
イメージを使用しますが、今回は無限に待機するコマンドを実行します。
docker run -d ubuntu sleep infinity
このコマンドの構成を見てみましょう:
docker run
: 新しいコンテナを実行するコマンド-d
: コンテナをデタッチドモード(バックグラウンド)で実行するフラグubuntu
: 使用するイメージsleep infinity
: コンテナ内で実行するコマンド。このコマンドはコンテナを無期限に実行状態に保ちますこのコマンドを実行すると、Docker はコンテナ ID を表示します。このコンテナは現在バックグラウンドで実行されています。
実行中のコンテナを確認するには、docker ps
コマンドを使用します。
docker ps
先ほど起動したコンテナが"Up"ステータスで表示され、実行時間が示されているはずです。コンテナを停止する際に必要となるため、CONTAINER ID
またはNAMES
をメモしておいてください。
次に、docker kill
コマンドを使用して実行中のコンテナを停止します。デフォルトでは、docker kill
はコンテナのメインプロセスにSIGKILL
シグナルを送信します。SIGKILL
はプロセスを即座に終了させるシグナルで、捕捉や無視ができません。
<container_id_or_name>
をdocker ps
の出力から取得した実際の ID または名前に置き換えてください。
docker kill <container_id_or_name>
このコマンドを実行すると、コンテナは停止します。再度docker ps
を実行して確認できます。実行中のコンテナリストにそのコンテナは表示されなくなっているはずです。
停止したコンテナを確認するには、docker ps -a
を使用します。ステータスが"Exited"に変わっていることを確認できます。
前のステップでは、デフォルトシグナルを使用して実行中のコンテナを強制終了しました。このステップでは、別のコンテナを作成して実行し、次のステップでカスタムシグナルを使用してコンテナを終了するデモンストレーションに使用します。
先ほどと同様に、ubuntu
イメージとsleep infinity
コマンドを使用して、デタッチドモードで別のコンテナを実行します。
docker run -d ubuntu sleep infinity
このコマンドは、バックグラウンドで無期限に実行される新しいコンテナを起動します。Docker は新しいコンテナ ID を表示します。
コンテナが実行中であることを確認するには、docker ps
コマンドを使用します。
docker ps
新しいコンテナが"Up"ステータスで表示されるはずです。このコンテナのCONTAINER ID
またはNAMES
をメモしてください。次のステップで、異なるシグナルを使用してコンテナを終了する際にこの ID または名前を使用します。
このコンテナは、さまざまなシグナルを送信する練習を行う準備が整いました。
前のステップで、現在実行中のコンテナを起動しました。このステップでは、シグナル名を指定してこのコンテナを終了する方法を学びます。
docker kill
コマンドを使用すると、コンテナ内のメインプロセスに特定のシグナルを送信できます。デフォルトではSIGKILL
が送信されますが、他のシグナルを指定することも可能です。アプリケーションを正常に終了させるためによく使用されるシグナルがSIGTERM
です。SIGTERM
はプロセスに終了を要求するシグナルで、SIGKILL
とは異なり、プロセスはこのシグナルを捕捉して終了前にクリーンアップ処理を実行できます。
まず、docker ps
コマンドで前のステップで起動したコンテナの ID または名前を確認してください。
docker ps
次に、docker kill
コマンドに-s
フラグを付けてシグナル名を指定します。ここではSIGTERM
を使用します。<container_id_or_name>
は実際のコンテナ ID または名前に置き換えてください。
docker kill -s SIGTERM <container_id_or_name>
このコマンドは、指定したコンテナのメインプロセスにSIGTERM
シグナルを送信します。コンテナ内のアプリケーションがSIGTERM
を処理するように設計されている場合、正常にシャットダウンを試みます。SIGTERM
を処理しない場合や一定時間内に終了しない場合、Docker は最終的にSIGKILL
を送信して強制終了させます。
コンテナが停止したことを確認するには、再度docker ps
を実行してください。
docker ps
コンテナは実行中リストに表示されなくなっているはずです。docker ps -a
を使用するとステータスを確認でき、"Exited"と表示されるでしょう。
前のステップでは、シグナル名 (SIGTERM
) を使用してコンテナを終了しました。このステップでは、シグナル番号を指定してコンテナを終了する方法を学びます。
各シグナルには対応する番号があります。例えば、SIGKILL
はシグナル 9、SIGTERM
はシグナル 15 です。Linux システムではkill -l
コマンドを使用してシグナル名と対応する番号の一覧を確認できます。
kill -l
このコマンドはシグナル名と対応する番号のリストを出力します。
では、前のステップと同様に、実行状態を維持する別のコンテナを起動しましょう。
docker run -d ubuntu sleep infinity
docker ps
を使用してこの新しい実行中コンテナの ID または名前を取得します。
docker ps
次に、docker kill
コマンドに-s
フラグを付けますが、今回はシグナル名ではなく番号を指定します。SIGKILL
に対応するシグナル番号 9 を使用しましょう。<container_id_or_name>
は実際の実行中コンテナの ID または名前に置き換えてください。
docker kill -s 9 <container_id_or_name>
このコマンドは、指定したコンテナのメインプロセスにSIGKILL
シグナル (番号 9) を送信します。前述の通り、SIGKILL
はプロセスを即座に終了させます。
コンテナが停止したことを確認するには、再度docker ps
を実行してください。
docker ps
コンテナは実行中リストに表示されなくなっているはずです。docker ps -a
を使用するとステータスを確認でき、"Exited"と表示されるでしょう。
シグナル番号の使用は、スクリプト作成時や送信するシグナルを正確に指定する必要がある場合に便利です。
この実験では、docker container kill
コマンドを使用して Docker コンテナを管理する基本的な手順を学びました。まずubuntu
イメージを基にしたシンプルなコンテナを作成・実行し、基本的なコマンドを実行後、docker ps -a
でその終了状態を確認しました。
その後、実行中のコンテナを終了させる方法を探求しました。最初にデフォルトのシグナルを使用してコンテナを終了させる方法を実演し、さらにdocker container kill
コマンドの柔軟性を活かし、カスタムシグナル名とそれに対応する数値の両方を使用してコンテナを終了させました。この実践的な経験を通じて、Docker コンテナのライフサイクルを制御する実用的な知識を得ることができました。