はじめに
この実験では、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 コンテナのライフサイクルを制御する実用的な知識を得ることができました。



