docker compose kill コマンドでサービスを強制停止する方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、Docker Compose ファイルで定義されたサービスを強制的に停止するdocker compose killコマンドの使用方法を学びます。まず、複数のサービスを含むシンプルな Compose ファイルを準備し、docker compose upを使用してサービスを起動します。

その後、docker compose killコマンドの様々な使用方法を探求します:すべてのサービスを強制停止する方法、特定のサービスを強制停止する方法、異なるシグナルを使用してサービスを強制停止する方法などです。このハンズオン体験を通じて、killコマンドを使用した Docker Compose サービスの管理に関する実践的な知識を得ることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555081{{"docker compose kill コマンドでサービスを強制停止する方法"}} docker/logs -.-> lab-555081{{"docker compose kill コマンドでサービスを強制停止する方法"}} docker/pull -.-> lab-555081{{"docker compose kill コマンドでサービスを強制停止する方法"}} end

複数サービスを含むシンプルな Compose ファイルの準備

このステップでは、複数のサービスを定義したシンプルな Docker Compose ファイルを準備します。Docker Compose は、マルチコンテナの Docker アプリケーションを定義・実行するためのツールです。この VM には Docker がプリインストールされていますが、Docker Compose は含まれていません。まずこれをインストールします。

最初に、Docker Compose をインストールしましょう。最新の安定版をダウンロードし、実行可能にします。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

インストールを確認するため、バージョンを確認します。

docker-compose --version

コンソールにバージョン情報が表示されれば、Docker Compose が正しくインストールされたことが確認できます。

次に、プロジェクト用のディレクトリを作成し、移動します。

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

このディレクトリ内にdocker-compose.ymlファイルを作成します。このファイルでサービスを定義します。nanoエディタを使用してファイルを作成・編集します。

nano docker-compose.yml

nanoエディタ内で、以下の内容を貼り付けます。このファイルはwebredisの 2 つのサービスを定義しています。webサービスはnginxイメージを使用し、コンテナのポート 80 をホストのポート 8080 にマッピングします。redisサービスはredisイメージを使用します。

version: "3.8"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  redis:
    image: redis

内容を貼り付けた後、Ctrl + X、次にY、最後にEnterを押してファイルを保存します。

サービスを起動する前に、docker-compose.ymlファイルで定義されたイメージをプルする必要があります。docker pullコマンドを使用してこれを行います。

docker pull nginx
docker pull redis

これらのコマンドは、Docker Hub からnginxredisのイメージをダウンロードします。

docker compose up でサービスを起動する

このステップでは、docker-compose.ymlファイルで定義したサービスをdocker compose upコマンドで起動します。このコマンドはサービスのコンテナをビルドし、(再) 作成、起動、アタッチします。

docker-compose.ymlファイルを作成した~/project/my-compose-appディレクトリにいることを確認してください。

cd ~/project/my-compose-app

次に、以下のコマンドを実行してサービスを起動します。-dフラグはコンテナをデタッチドモードで実行し、バックグラウンドで動作させてターミナルを占有しないようにします。

docker-compose up -d

ネットワーク、ボリューム(存在する場合)、コンテナが作成・起動されていることを示す出力が表示されるはずです。

コンテナが実行中か確認するには、docker psコマンドを使用します。

docker ps

このコマンドは実行中のすべてのコンテナをリスト表示します。web(nginx)とredisの両コンテナのエントリが表示されるはずです。

サービスのログを確認するには、docker-compose logsコマンドを使用します。

docker-compose logs

これですべてのサービスのログが表示されます。特定のサービスのログを表示するにはサービス名を追加します(例:docker-compose logs web)。

最後に、nginxコンテナのポート 80 をホストのポート 8080 にマッピングしたので、curlでポート 8080 のlocalhostにアクセスするとデフォルトの Nginx ウェルカムページを確認できます。

curl localhost:8080

出力に Nginx ウェルカムページの HTML コンテンツが表示されるはずです。

docker compose kill で全サービスを強制停止する

このステップでは、docker-compose.ymlファイルで定義された実行中のサービスをdocker compose killコマンドで強制停止する方法を学びます。docker compose downがコンテナを正常に停止しリソースを削除するのに対し、docker compose killは指定したシグナルをコンテナに送信して即座に強制停止します。

~/project/my-compose-appディレクトリにいることを確認してください。

cd ~/project/my-compose-app

全サービスを強制停止するには、サービス名を指定せずにdocker compose killコマンドを実行します。デフォルトではSIGKILLシグナルがコンテナに送信されます。

docker-compose kill

コンテナが強制停止されていることを示す出力が表示されるはずです。

コンテナが停止したことを確認するには、再度docker psコマンドを使用します。

docker ps

今回はweb(nginx)とredisコンテナがリストに表示されないはずです。これらは停止されています。

docker ps -aを使用すると、停止中のコンテナも含めてすべてのコンテナを確認できます。my-compose-app-web-1my-compose-app-redis-1コンテナが"Exited"ステータスで表示されるはずです。

docker ps -a

docker compose kill で特定サービスを強制停止する

このステップでは、docker-compose.ymlファイルで定義された特定のサービスを、docker compose killコマンドにサービス名を指定して強制停止する方法を学びます。

まず、停止対象のコンテナがある状態にするため、再度サービスを起動します。~/project/my-compose-appディレクトリにいることを確認してください。

cd ~/project/my-compose-app
docker-compose up -d

docker psを使用して両方のコンテナが実行中か確認します。

docker ps

ここで、webサービスのみを強制停止します。docker compose killコマンドの後にサービス名webを指定します。

docker-compose kill web

webコンテナが強制停止されていることを示す出力が表示されるはずです。

webコンテナのみが停止したことを確認するには、再度docker psコマンドを使用します。

docker ps

実行中のコンテナリストにはredisコンテナのみが表示され、webコンテナは表示されないはずです。

docker ps -aを使用すると、停止中のコンテナも含めてすべてのコンテナを確認できます。my-compose-app-web-1コンテナは"Exited"ステータスに、my-compose-app-redis-1コンテナは"Up"ステータスのまま表示されるはずです。

docker ps -a

docker compose kill -s で異なるシグナルを使用してサービスを強制停止する

このステップでは、docker compose killコマンドに-sフラグを追加して特定のシグナルをコンテナに送信する方法を説明します。デフォルトではdocker compose killSIGKILLシグナルを送信し、プロセスを即座に終了させます。しかし、SIGTERMのような別のシグナルを送信したい場合もあります。SIGTERMはプロセスに正常終了を要求するシグナルです。

まず、サービスが実行中であることを確認します。プロジェクトディレクトリに移動し、デタッチモードでサービスを起動します。

cd ~/project/my-compose-app
docker-compose up -d

docker psを使用して両方のコンテナが実行中か確認します。

docker ps

次に、SIGTERMシグナルを使用して全サービスを強制停止します。-sフラグの後にシグナル名を指定します。

docker-compose kill -s SIGTERM

指定したシグナルでコンテナが強制停止されていることを示す出力が表示されるはずです。

コンテナが停止したことを確認するには、docker psコマンドを使用します。

docker ps

webコンテナもredisコンテナも実行中のリストには表示されないはずです。

docker ps -aを使用すると、コンテナが終了した状態で表示されます。

docker ps -a

異なるシグナルを送信できる機能は、より制御されたシャットダウンに有用です。コンテナ内のアプリケーションがこれらのシグナルを処理するように設定されていれば、終了前にクリーンアップタスクを実行できます。

最後に、停止したコンテナと Docker Compose で作成されたネットワークをクリーンアップするには、docker compose downコマンドを使用します。

docker-compose down

このコマンドは、docker-compose.ymlファイルで定義されたコンテナ、ネットワーク、ボリュームを停止して削除します。

まとめ

この実験では、複数のサービス(webredis)を定義するシンプルな Docker Compose ファイルの準備方法と Docker Compose のインストール方法を学びました。その後、docker compose upコマンドを使用してこれらのサービスを起動しました。続いて、Compose ファイルで定義された実行中のサービスをdocker compose killで強制停止する方法と、特定のサービスを対象にdocker compose kill <service_name>で強制終了する方法を確認しました。最後に、-sフラグを使用してdocker compose kill -s SIGKILLのように、kill プロセス中にサービスに異なるシグナルを送信する方法を学びました。