docker compose ps コマンドでコンテナを一覧表示する方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、Docker Compose で管理されているコンテナを一覧表示する docker compose ps コマンドの効果的な使い方を学びます。まず Docker Compose をインストールし、docker-compose.yml ファイルを使用してシンプルなプロジェクトをセットアップします。

セットアップ後、以下の操作について学びます:

  • 実行中のコンテナのみを一覧表示する方法
  • 停止中のコンテナも出力に含める方法
  • ステータスに基づいてコンテナをフィルタリングする方法
  • 解析や統合が容易になるよう JSON 形式で出力する方法

このハンズオン体験を通じて、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/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555086{{"docker compose ps コマンドでコンテナを一覧表示する方法"}} docker/pull -.-> lab-555086{{"docker compose ps コマンドでコンテナを一覧表示する方法"}} end

docker compose ps で実行中のコンテナを一覧表示

このステップでは、docker compose ps を使用して実行中のコンテナを一覧表示する方法を学びます。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

このコマンドは、システムのアーキテクチャに合わせた Docker Compose バイナリをダウンロードし、/usr/local/bin/docker-compose に保存します。

次に、バイナリに実行権限を付与します。

sudo chmod +x /usr/local/bin/docker-compose

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

docker-compose --version

出力にインストールされた Docker Compose のバージョンが表示されるはずです。

docker compose ps を実行するには、docker-compose.yml ファイルと実行するサービスが必要です。~/project ディレクトリにシンプルな docker-compose.yml ファイルを作成しましょう。

nano ~/project/docker-compose.yml

以下の内容をファイルに追加します:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep infinity

この docker-compose.yml ファイルは 2 つのサービスを定義しています:

  • web サービス:nginx イメージを使用
  • app サービス:alpine イメージを使用

web サービスはホストのポート 80 をコンテナのポート 80 にマッピングします。app サービスは sleep infinity コマンドを実行してコンテナを実行し続けます。

ファイルを保存し、エディタを終了します(Ctrl+X、Y、Enter)。

必要なイメージをプルします。

docker pull nginx:latest
docker pull alpine:latest

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

次に、docker-compose.yml ファイルで定義されたサービスを起動します。~/project ディレクトリにいることを確認してください。

cd ~/project
docker-compose up -d

docker-compose up -d コマンドは、サービスのコンテナをビルド、作成、起動、アタッチします。-d フラグはコンテナをバックグラウンドで実行します。

コンテナが実行中になったので、docker compose ps で一覧表示できます。

docker-compose ps

このコマンドは、docker-compose.yml ファイルで定義された実行中のコンテナを一覧表示します。以下のような出力が表示され、コンテナ名、コマンド、ステータス、ポートが確認できます。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 running
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

出力には project-app-1project-web-1 コンテナが実行中であることが表示されます。NAME は通常、プロジェクト名(ディレクトリ名)にサービス名と番号が続きます。

停止済みコンテナを含む全コンテナの一覧表示

前のステップでは、docker compose ps を使用して実行中のコンテナのみを一覧表示しました。時には、停止または終了したコンテナも含めてすべてのコンテナを確認する必要がある場合があります。

停止済みコンテナを含む全コンテナを一覧表示するには、docker compose ps コマンドに -a フラグを追加します。

まず、-a フラグの効果を確認するため、実行中のコンテナの 1 つを停止しましょう。app サービスを停止します。~/project ディレクトリにいることを確認してください。

cd ~/project
docker-compose stop app

このコマンドは app サービスのコンテナを停止します。コンテナは実行されなくなりますが、依然として存在しています。

次に、docker compose ps で再度コンテナを一覧表示します。

docker-compose ps

web コンテナのみが実行中として表示され、app コンテナは停止しているため表示されないはずです。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

では、-a フラグを使用して停止済みコンテナも含めて全コンテナを一覧表示しましょう。

docker-compose ps -a

このコマンドは、ステータスに関係なく docker-compose.yml ファイルで定義されたすべてのコンテナを表示します。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

project-app-1project-web-1 の両方のコンテナが表示されていることがわかります。project-app-1STATUS 列には exited と表示されており、停止していることを示しています。

docker compose ps -a を使用すると、現在アクティブでないサービスも含め、すべてのサービスの状態を確認するのに便利です。

ステータスによるコンテナのフィルタリング

前のステップでは、実行中のコンテナと全コンテナの一覧表示方法を学びました。時には、コンテナのステータスに基づいて一覧をフィルタリングしたい場合があります。

docker compose ps コマンドでは、--filter フラグを使用して出力をフィルタリングできます。コンテナのステータスを含む様々な条件でフィルタリング可能です。

主なコンテナのステータスは以下の通りです:

  • created: コンテナが作成されたが起動されていない状態
  • restarting: コンテナが再起動中の状態
  • running: コンテナが現在実行中
  • removing: コンテナが削除中の状態
  • paused: コンテナが一時停止中
  • exited: コンテナが停止済み
  • dead: コンテナがデッド状態

まず、実行中のコンテナのみを表示するフィルタリングを行いましょう。デフォルトの docker compose ps も実行中のコンテナを表示しますが、フィルターを使用して同じ結果を得られます。~/project ディレクトリにいることを確認してください。

cd ~/project
docker-compose ps --filter status=running

このコマンドは、ステータスが running のコンテナのみを一覧表示します。web コンテナのみが表示されるはずです。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

次に、停止済みのコンテナのみを表示するフィルタリングを行いましょう。前のステップで app コンテナを停止したので、そのステータスは exited になっているはずです。

docker-compose ps --filter status=exited

このコマンドは、ステータスが exited のコンテナのみを一覧表示します。app コンテナのみが表示されるはずです。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)

複数のステータスでフィルタリングするには、--filter フラグを複数回指定します。例えば、実行中または停止済みのコンテナを一覧表示するには:

docker-compose ps --filter status=running --filter status=exited

このコマンドは webapp の両方のコンテナを表示します。

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

ステータスによるフィルタリングは、特定の状態のコンテナを素早く見つける強力な方法であり、サービスのデバッグや管理に非常に役立ちます。

JSON 形式での出力フォーマット

前のステップでは、docker compose psを使用してコンテナの一覧表示とフィルタリングを行いました。デフォルトでは、出力は人間が読みやすい表形式で表示されます。しかし、スクリプト作成や他のツールとの連携には、JSON のような構造化された形式での出力が必要になる場合があります。

docker compose psコマンドでは、--formatフラグを使用して出力形式を指定できます。jsonを含む様々な形式を指定可能です。

実行中および停止中の全コンテナを一覧表示し、出力を JSON 形式で表示してみましょう。~/projectディレクトリにいることを確認してください。

cd ~/project
docker-compose ps -a --format json

このコマンドは、全コンテナの情報を JSON 形式で出力します。出力は JSON 配列となり、各要素がコンテナとその詳細を表します。

[
  {
    "ID": "...",
    "Name": "project-app-1",
    "Image": "alpine:latest",
    "Command": "sleep infinity",
    "Project": "project",
    "Service": "app",
    "Created": "...",
    "State": "exited",
    "Status": "Exited (0) ...",
    "Health": "",
    "ExitCode": 0,
    "Publishers": []
  },
  {
    "ID": "...",
    "Name": "project-web-1",
    "Image": "nginx:latest",
    "Command": "/docker-entrypoint.sh nginx -g 'daemon off;'",
    "Project": "project",
    "Service": "web",
    "Created": "...",
    "State": "running",
    "Status": "Up ...",
    "Health": "",
    "ExitCode": null,
    "Publishers": [
      {
        "URL": "0.0.0.0",
        "TargetPort": 80,
        "PublishedPort": 80,
        "Protocol": "tcp"
      }
    ]
  }
]

JSON 出力はコンテナ情報の構造化された表現を提供し、プログラムで解析・処理するのが容易です。各コンテナは、IDNameImageStateStatusなどのフィールドを持つ JSON オブジェクトとして表現されます。

--format jsonフラグは、自動化やレポート作成のためにコンテナの特定情報を抽出する必要がある場合に特に有用です。

最後に、この実験で作成したコンテナをクリーンアップしましょう。

docker-compose down

このコマンドは、docker-compose upで作成されたコンテナ、ネットワーク、ボリュームを停止して削除します。

まとめ

この実験では、Docker Compose で管理されるコンテナを一覧表示するdocker compose psコマンドの使用方法を学びました。まず Docker Compose をインストールし、インストールを確認しました。その後、2 つのサービスを定義するシンプルなdocker-compose.ymlファイルを作成し、必要なイメージを取得しました。docker-compose up -dを使用してサービスをデタッチドモードで起動しました。

次に、docker compose psコマンドを使って実行中のコンテナを一覧表示する方法を確認しました。-aフラグで停止中のコンテナも含めて表示する方法、--filter status=<status>オプションでステータスによるフィルタリングを行う方法、--format jsonオプションで JSON 形式で出力する方法を学びました。最後に、docker-compose downを使用して作成したリソースを停止・削除してクリーンアップしました。