はじめに
この実験では、docker statsコマンドを使用して Docker コンテナのリソース使用状況を効果的に監視する方法を学びます。実行中のすべてのコンテナ、および名前や ID で指定した特定のコンテナに対するリアルタイムのリソース使用状況を表示する方法を探求します。
さらに、停止中のコンテナも含むすべてのコンテナのリソース使用状況を表示する方法や、カスタムテンプレートを使用してdocker statsコマンドの出力形式をカスタマイズする方法について学びます。最後に、継続的なストリーミングなしでコンテナ統計の単一スナップショットを取得する方法を習得します。
実行中の全コンテナのリアルタイムリソース使用状況を表示
このステップでは、docker statsコマンドを使用して実行中の Docker コンテナのリアルタイムリソース使用状況を表示する方法を学びます。このコマンドは、CPU、メモリ、ネットワーク I/O、ブロック I/O などのコンテナリソース使用データをリアルタイムでストリーム表示します。
まず、監視対象となるいくつかのコンテナを起動しましょう。ubuntuイメージを使用し、バックグラウンドで実行するためデタッチモード (-d) で起動します。また、識別しやすいように名前を付けます。
docker pull ubuntu
docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity
docker run -d --name container3 ubuntu sleep infinity
コンテナが実行されたので、docker statsコマンドでリソース使用状況を確認できます。
docker stats
各実行中コンテナの ID、名前、CPU 使用率、メモリ使用量、ネットワーク I/O、ブロック I/O、PIDs などの情報がテーブル形式で表示されます。この出力はリアルタイムで更新されます。
docker statsコマンドを停止するには、Ctrl+Cを押してください。
名前または ID で特定コンテナのリアルタイムリソース使用状況を表示
前のステップでは、実行中の全コンテナのリソース使用状況を表示する方法を学びました。このステップでは、docker statsコマンドに名前や ID を指定して特定コンテナのリソース使用状況を表示する方法を学びます。
単一コンテナの統計情報を表示するには、docker statsコマンドの後にコンテナ名または ID を指定します。例えば、container1の統計情報を表示するには:
docker stats container1
container1のみのリアルタイムリソース使用状況が表示されます。出力を停止するにはCtrl+Cを押してください。
複数のコンテナ名または ID を指定して、複数コンテナの統計情報を同時に表示することも可能です。例えば、container1とcontainer2の統計情報を表示するには:
docker stats container1 container2
これにより、container1とcontainer2両方のリアルタイムリソース使用状況が表示されます。出力を停止するにはCtrl+Cを押してください。
特に複数コンテナが実行されている場合、コンテナ ID よりもコンテナ名を使用する方が覚えやすく操作しやすいでしょう。
全コンテナ (稼働中・停止中) のリソース使用状況を表示
デフォルトでは、docker statsは実行中のコンテナの統計情報のみを表示します。このステップでは、-aまたは--allフラグを使用して、停止中のコンテナを含む全コンテナのリソース使用状況を表示する方法を学びます。
まず、前のステップで起動したコンテナの 1 つを停止しましょう。
docker stop container3
ここでフラグを指定せずにdocker statsを実行すると、まだ実行中のcontainer1とcontainer2のみが表示されます。
docker stats
出力を停止するにはCtrl+Cを押してください。
停止中のcontainer3を含む全コンテナの統計情報を表示するには、-aフラグを使用します:
docker stats -a
これでcontainer1、container2、container3が一覧表示されます。停止中のコンテナについては、リソースを消費していないため、ほとんどの使用量フィールドに0%や0Bと表示されます。
この機能は、システム上の全コンテナと、それらが停止される前の最終的なリソース使用状況を把握するのに役立ちます。
カスタムテンプレートを使用したコンテナ統計の出力フォーマット
このステップでは、Go テンプレートを使用してdocker statsコマンドの出力をフォーマットする方法を学びます。これにより、必要な情報のみを表示したり、解析や読み取りが容易な形式で表示したりすることが可能になります。
docker statsコマンドは--formatフラグをサポートしており、Go テンプレート文字列を引数として受け取ります。テンプレート内では様々なプレースホルダーを使用して、異なるコンテナ情報を表現できます。主なプレースホルダーには以下があります:
.ContainerID: コンテナ ID.Name: コンテナ名.CPUPerc: CPU 使用率.MemUsage: メモリ使用量.NetIO: ネットワーク I/O.BlockIO: ブロック I/O.PIDs: PID 数
コンテナ名、CPU 使用率、メモリ使用量のみを表示するフォーマットを試してみましょう。
docker stats --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
このコマンドでは:
--formatでカスタムフォーマットを使用することを指定"{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"が Go テンプレート文字列{{.Name}}でコンテナ名を表示\tでタブ文字を挿入して区切り{{.CPUPerc}}で CPU 使用率を表示{{.MemUsage}}でメモリ使用量を表示
コンテナ名、CPU 使用率、メモリ使用量がタブ区切りでリアルタイムに表示されます。出力を停止するにはCtrl+Cを押してください。
様々なプレースホルダーやフォーマットを試して、必要な出力を得ることができます。例えば、コンテナ ID とネットワーク I/O を含める場合:
docker stats --format "ID: {{.ContainerID}}\tName: {{.Name}}\tNetIO: {{.NetIO}}"
これにより、よりカスタマイズされたコンテナ統計情報のビューが提供されます。
ストリーミングなしでコンテナ統計の単一スナップショットを取得
デフォルトでは、docker statsはリソース使用状況をリアルタイムでストリーミング表示します。しかし、継続的な更新なしに現在の統計のスナップショットだけが必要な場合もあります。このステップでは、--no-streamフラグを使用してこれを実現する方法を学びます。
--no-streamフラグは、docker statsに統計情報を 1 回収集して終了するよう指示します。継続的な出力更新は行われません。
実行中の全コンテナの統計スナップショットを取得してみましょう:
docker stats --no-stream
コンテナ統計のテーブルが 1 回表示され、コマンドが終了します。これはスクリプトでの使用や、現在のリソース使用状況を簡単に確認したい場合に便利です。
--no-streamは他のフラグと組み合わせることができます。例えば、-aフラグと組み合わせて全コンテナ(実行中・停止中含む)のスナップショットを表示:
docker stats -a --no-stream
これにより全コンテナの単一スナップショットが表示されます。
特定のコンテナを指定して使用することも可能です:
docker stats container1 container2 --no-stream
これにより、container1とcontainer2の統計スナップショットが取得できます。
--no-streamは、リアルタイム更新が必要なく、現在のリソース使用状況の状態だけをキャプチャしたい場合に効率的です。
まとめ
この実験では、Docker コンテナのリソース使用状況を監視するためにdocker statsコマンドを効果的に使用する方法を学びました。まず、実行中の全コンテナのリアルタイムリソース使用状況を表示し、CPU、メモリ、ネットワーク I/O、ブロック I/O のライブデータストリームを観察しました。
続いて、特定のコンテナに焦点を当て、その名前や ID を使用して個々のリソース消費を確認することで、監視をより詳細に行いました。これにより、コンテナのパフォーマンスをターゲットを絞って分析できるようになりました。



