Docker ps徹底解剖:運用で差がつく中〜上級テクニック(ハンズオン付き)

はじめに

docker ps は、コンテナの稼働状況を確認する最も基本的なコマンドですが、上級者ほど「監視」「自動化」「分析」のために使いこなしています。
この記事では、単なる一覧確認に留まらず、運用効率を上げるための実践的テクニックをハンズオン形式で解説します。


1. 環境準備

まずはテスト用のコンテナをいくつか起動しておきましょう。

# nginxとredisをテスト起動
docker run -d --name webserver -p 8080:80 nginx
docker run -d --name cache redis
docker run -d --name db postgres

状態を確認します:

docker ps

出力例:

CONTAINER ID   IMAGE      COMMAND                  STATUS         PORTS                 NAMES
2a91f7c3f2b3   nginx      "/docker-entrypoint.…"   Up 10 seconds  0.0.0.0:8080->80/tcp  webserver
3e12bde71ef9   redis      "docker-entrypoint.s…"   Up 11 seconds                         cache
f13a8e32297a   postgres   "docker-entrypoint.s…"   Up 11 seconds                         db

2. --format で出力を整形する

docker ps の出力は、Goテンプレートで柔軟にカスタマイズできます。
監視に必要な情報だけを整形して見やすくしましょう。

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RunningFor}}\t{{.Ports}}"

出力例:

NAMES       STATUS         RUNNING FOR   PORTS
webserver   Up 2 minutes   2 minutes     0.0.0.0:8080->80/tcp
cache       Up 2 minutes   2 minutes
db          Up 2 minutes   2 minutes

応用:JSON出力 + jqで整形

docker ps --format '{{json .}}' | jq '.Names, .Status'

このようにすれば、監視スクリプトやダッシュボード連携に活用できます。


3. --filter で条件付き出力を使いこなす

停止中コンテナや特定イメージに関連するコンテナを抽出できます。

停止中のコンテナを確認

docker ps -a --filter "status=exited"

特定イメージのコンテナを確認

docker ps --filter "ancestor=nginx"

名前で検索(部分一致)

docker ps --filter "name=web"

--filter を組み合わせると、特定状態の検出スクリプトを容易に作成できます。


4. 実践ハンズオン:停止中コンテナの自動検出スクリプト

次に、停止したコンテナを検知して通知する簡単なスクリプトを作ってみましょう。

ファイル名:monitor_stopped_containers.sh

#!/bin/bash

STOPPED=$(docker ps -a --filter "status=exited" --format "{{.Names}}")

if [ -n "$STOPPED" ]; then
  echo "[ALERT] The following containers have stopped:"
  echo "$STOPPED"
else
  echo "All containers are running normally."
fi

実行権限を付与してテストします:

chmod +x monitor_stopped_containers.sh
./monitor_stopped_containers.sh

出力例:

All containers are running normally.

もしコンテナを1つ停止してみると…

docker stop cache
./monitor_stopped_containers.sh

結果:

[ALERT] The following containers have stopped:
cache

これを cron に登録すれば、定期監視スクリプトとして利用できます。


5. docker ps × grep で即席モニタリング

稼働中コンテナ数をカウント

docker ps -q | wc -l

特定アプリの稼働確認

docker ps | grep nginx

シンプルながら、CI/CDパイプラインやシステムチェックに組み込むことで軽量な稼働確認が可能です。


6. docker ps と他コマンドの連携応用

docker ps を他のDockerコマンドと組み合わせると、より高度な監視や診断が行えます。

CPU・メモリ使用率を合わせて確認

docker stats --no-stream $(docker ps -q)

詳細情報との統合

docker inspect $(docker ps -q) | jq '.[].State.Status'

これらを組み合わせれば、独自の運用ダッシュボードを自作することもできます。


7. トラブルシューティングの実践ポイント

docker ps 出力の「STATUS」欄は、トラブルの初期発見に役立ちます。

状態意味対応例
Exited (0)正常終了再実行可
Exited (1)異常終了ログ確認 (docker logs)
Restarting再起動ループコンテナ設定・アプリエラー確認
Up X seconds頻繁リスタートヘルスチェック設定を見直し

状態監視例

docker ps --format "{{.Names}}: {{.Status}}" | grep Restarting

これでリスタート中コンテナを自動抽出できます。


8. docker container ls との関係と推奨使用法

docker psdocker container ls のショートエイリアスです。
今後はDocker CLI構文統一の観点から、以下のように記述しておくと保守性が高まります。

docker container ls --format "table {{.Names}}\t{{.Status}}"

9. まとめ:docker psを「見る」から「使う」へ

本記事では、docker ps をただの一覧表示コマンドから、
監視・通知・可視化の起点として活用する方法を紹介しました。

ポイントおさらい:

  • --format で出力整形 → 見やすく分析可能
  • --filter で特定条件抽出 → 異常検知に活用
  • スクリプト化で自動監視を実現
  • 他コマンド連携で診断効率化

次のステップ

次回は以下を扱います:

  • docker inspectでコンテナ内部状態を深掘り
  • docker statsを使った軽量モニタリング
  • CLI出力をGrafanaなどに可視化連携

これにより、「手動確認 → 自動監視 → ダッシュボード可視化」 へと運用を進化させられます。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です