1. 概要

Dockerには、さまざまな状態のコンテナーをリストおよびフィルター処理するためのさまざまなオプションや、リスト出力をカスタマイズするためのオプションが用意されています。

このチュートリアルでは、Dockerコンテナをさまざまな方法でフィルタリングする方法を説明します。

2. コンテナの一覧表示

Dockerコンテナーを一覧表示するには、「dockerps」または「dockercontainerls」コマンドを使用できます。このコマンドは、特定のDockerエンジン上のすべてのコンテナーを一覧表示およびフィルター処理するさまざまな方法を提供します。

実行中のすべてのコンテナーをリストすることから始めましょう。

2.1. エイリアス

Docker 1.13の時点で、Dockerチームはすべてのコマンドを再グループ化して、対話している論理オブジェクトの下に配置しました。 たとえば、 Dockerコンテナを一覧表示するには、 docker ps」に加えて、」を使用できます。 dockercontainerlist」またはdockercontainerls」コマンド。

これら3つのエイリアスはすべて、同じグループのオプションをサポートしています。 ただし、新しい構文を採用することをお勧めします。

2.2. 実行中のコンテナ

オプションなしで「dockercontainerls」コマンドを使用すると、実行中のすべてのコンテナーが一覧表示されます

$ docker container ls
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                NAMES
1addfea727b3        mysql:5.6            "docker-en.."   2 seconds ago       Up 1 second         0.0.0.0:32801->3306/tcp              dazzling_hellman
09c4105cb356        nats:2.1.0-scratch   "/nats-…"       17 minutes ago      Up 17 minutes       4222/tcp, 6222/tcp, 8222/tcp         nats-1
443fc0c41710        rabbitmq:3.7         "docker-…"      17 minutes ago      Up 17 minutes       4369/tcp, 5671-5672/tcp, 25672/tcp   rabbit-1
b06cfe3053e5        postgres:11          "docker-…"      29 minutes ago      Up 29 minutes       0.0.0.0:32789->5432/tcp              pg-2
4cf774b9e4a4        redis:5              "docker-…"      30 minutes ago      Up 30 minutes       0.0.0.0:32787->6379/tcp              redis-2

上に示したように、これまでに5つの実行中のコンテナー(Nats、RabbitMQ、PostgreSQL、MySQL、およびRedis)があります。

デフォルトでは、出力には実行中の各コンテナに関するいくつかの詳細が表示されます。

  • 「CONTAINERID」は、コンテナの一意の識別子です。 この識別子は、かなり長いSHA-256ハッシュの切り捨てられたバージョンです。
  • 「IMAGE」は、 postgres:11などのコロンで区切られたコンテナイメージ名とそのタグです。
  • 「COMMAND」は、コンテナの実行を担当するコマンドです。
  • 「CREATED」は、コンテナがいつ作成されたかを示します
  • 「STATUS」はコンテナの状態を示します。 上記のように、これらのコンテナはすべて実行されています
  • 「PORTS」は、ホストマシンとコンテナ内のポートマッピングを示しています。 たとえば、“ 0.0.0.0:32789->5432/tcp” は、ホストのポート32789がコンテナ内のポート5432にマップされていることを意味します。 また、Natsコンテナのポートをマップしなかったことがわかります— “ 4222 / tcp、6222 / tcp、8222 / tcp”
  • 「NAMES」は、 pg-2 など、人間が読める形式のDockerコンテナの名前を表します。

ここまでで、各列の意味について知っておく必要があります。 したがって、今後は、簡潔にするために、これらの列のサブセットのみを示します。

2.3. すべてのコンテナ

デフォルトでは、 docker container ls”コマンドは実行中のコンテナーのみを表示します。 ただし、 -aまたは–allオプションを渡すと、すべての(停止および実行中の)コンテナーが一覧表示されます

$ docker container ls -a
CONTAINER ID        IMAGE                STATUS
1addfea727b3        mysql:5.6            Up 4 hours
32928d81a65f        mysql:5.6            Exited (1) 4 hours ago
09c4105cb356        nats:2.1.0-scratch   Up 4 hours
443fc0c41710        rabbitmq:3.7         Up 4 hours
b06cfe3053e5        postgres:11          Up 4 hours
16d3c67ebd40        postgres:11          Exited (0) 4 hours ago
4cf774b9e4a4        redis:5              Up 4 hours
99c537a3dd86        redis:5              Exited (0) 4 hours ago

上に示したように、数時間前に停止された3つのコンテナー、Redis、MySQL、およびPostgreSQLがあります。

2.4. 最新のコンテナ

最後を見るには n Dockerコンテナー(実行中と停止中の両方)、使用できます -n また -過去オプション:

$ docker container ls -n 2
CONTAINER ID        IMAGE               STATUS
1addfea727b3        mysql:5.6           Up 4 hours
32928d81a65f        mysql:5.6           Exited (1) 4 hours ago

-l または–最新のオプションを使用して、最新のコンテナーを表示することもできます。

$ docker container ls --latest
CONTAINER ID        IMAGE               STATUS
1addfea727b3        mysql:5.6           Up 4 hours

もちろん、 -n1オプションでも同じことができます。

2.5. 切り捨ての無効化

デフォルトでは、Dockerは、出力列の値がしきい値よりも長い場合、出力列を切り捨てます。 実際のところ、コンテナIDの切り捨てられた値はすでに見ています。

これはほとんどの場合優れた機能ですが、 –no-truncオプションを使用して無効にすることができます。

$ docker container ls --latest --no-trunc
CONTAINER ID                                                       COMMAND
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7   "docker-entrypoint.sh mysqld"

上に示したように、出力列はより冗長になりました。

2.6. 静かなモード

コンテナのコンテナIDのみを表示することも可能です。 これを行うには、 -qまたは–quietオプションを使用できます。

$ docker container ls -q
1addfea727b3
09c4105cb356
443fc0c41710
b06cfe3053e5
4cf774b9e4a4

オプションを組み合わせて一致させ、完全なコンテナ識別子を確認できます。

$ docker container ls --quiet --no-trunc
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7
09c4105cb3567ba0070dacf7381b9946165908c819c0841cffaa1855766537c7
443fc0c41710ee3811e72fe5079bf4696b9318e0754c38eeab1c960f5c5a7007
b06cfe3053e521704c67a1902a7302665ae05f66ef592419f32b8c73b2a066fd
4cf774b9e4a487a2ba658de37273994161378cffe7e69fe5c928ad29e6946372

クワイエットモードは、IDのコレクションを別のコマンドに渡す場合に特に便利です。 たとえば、すべてのコンテナを強制的に削除する方法は次のとおりです。

$ docker container rm -f $(docker container ls -aq)

もちろん、これらの種類の組み合わせは細心の注意を払って使用する必要があります。

2.7. コンテナサイズ

-sまたは–size オプションを使用して、コンテナーのサイズとディスク上のイメージを確認できます。

$ docker container ls --latest -s
CONTAINER ID        IMAGE               SIZE
1addfea727b3        mysql:5.6           2B (virtual 256MB)

最初の値(2B)は、各コンテナーの書き込み可能レイヤーに使用されるバイト数を表します。 2番目の値は、ディスク上のイメージサイズであり、この場合は256MBです。

2.8. カスタマイズされた出力

デフォルトの出力形式に満足できない場合は、Goテンプレートを使用して出力をカスタマイズできます。 必要なフォーマットを–formatオプションに渡すだけです。 これを実際に実行する簡単な例を見てみましょう。

$ docker container ls --format "{{.ID}} -> Based on {{.Image}}, named {{.Names}}, ({{.Status}})"
1addfea727b3 -> Based on mysql:5.6, named dazzling_hellman, (Up 3 hours)
09c4105cb356 -> Based on nats:2.1.0-scratch, named nats-1, (Up 4 hours)
443fc0c41710 -> Based on rabbitmq:3.7, named rabbit-1, (Up 4 hours)
b06cfe3053e5 -> Based on postgres:11, named pg-2, (Up 4 hours)
4cf774b9e4a4 -> Based on redis:5, named redis-2, (Up 4 hours)

ここでは、基本的にGoテンプレート形式のテンプレート文字列を使用しました。 ID Image Names 、および Status はプレースホルダーであり、残りのテキストはそのままレンダリングされます。

さらに、列を表形式で表示することができますテーブルプレフィックスを使用する必要があります。

$ docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
CONTAINER ID        IMAGE                NAMES
1addfea727b3        mysql:5.6            dazzling_hellman
09c4105cb356        nats:2.1.0-scratch   nats-1
443fc0c41710        rabbitmq:3.7         rabbit-1
b06cfe3053e5        postgres:11          pg-2
4cf774b9e4a4        redis:5              redis-2

テンプレート文字列で使用できるフィールドを詳しく見てみましょう。

  • .ID —コンテナID
  • .Image —画像名とタグ
  • .Command —このコンテナーの実行を担当するコマンド
  • .CreatedAt —コンテナ作成時間
  • .Running —コンテナが開始してからの経過時間
  • .Ports —ポートマッピング
  • .Status —コンテナの実行ステータス
  • .Size —コンテナとそのイメージディスクサイズ
  • .Names —コンテナ名
  • .Labels —コンテナに割り当てられたすべてのラベル
  • .Mounts —コンテナのボリューム
  • .Networks —コンテナに接続されているすべてのネットワーク名

2.9. 高度なフィルタリング

これまでのところ、実行中または停止中のステータスに基づいてコンテナをフィルタリングするだけでした。 結局のところ、 docker container ls」は、この基本的なフィルタリングよりもはるかに多くの機能を提供します。

コンテナをフィルタリングするために、-fまたは–filterオプションを使用できます。 たとえば、ここでは、exitedステータスのコンテナをフィルタリングします。

$ docker container ls --filter "status=exited"
CONTAINER ID        IMAGE               STATUS
32928d81a65f        mysql:5.6           Exited (1) 8 hours ago
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago
99c537a3dd86        redis:5             Exited (0) 9 hours ago

上に示したように、 key =value形式でフィルター基準に合格する必要があります。

複数のフィルターを同時に適用する場合は、複数の–filterオプションを渡す必要があります。 たとえば、さらに進んで、終了ステータスが1の終了コンテナのみを保持できます。

$ docker container ls --filter "status=exited" --filter "exited=1"
CONTAINER ID        IMAGE               STATUS
32928d81a65f        mysql:5.6           Exited (1) 8 hours ago

予想どおり、MySQLのみがフィルター基準に一致するようになりました。 Dockerコンテナーの状態は、実行中または停止中だけではありません。 実際のところ、たとえば、Dockerコンテナを一時停止すると、次のようになります。

$ docker container pause redis-2

次に、一時停止したすべてのコンテナをフィルタリングできます。

$ docker container ls --filter "status=paused"
CONTAINER ID        IMAGE               STATUS
4cf774b9e4a4        redis:5             Up 45 minutes (Paused)

さらに、コンテナは、作成済み再起動実行中削除中一時停止[ X155X]、 exited 、またはdead

コンテナ名の一部がわかっている場合は、それを検索できます。

$ docker container ls -a --filter "name=pg"
CONTAINER ID        IMAGE               STATUS
b06cfe3053e5        postgres:11         Up 18 minutes
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago

ベースイメージに基づいてコンテナをフィルタリングすることもできます。

$ docker container ls -a --filter "ancestor=postgres"
CONTAINER ID        IMAGE               STATUS
b06cfe3053e5        postgres:11         Up 28 minutes
16d3c67ebd40        postgres:11         Exited (0) 9 hours ago

ここでは、postgresイメージに基づくコンテナのみをリストしています。

作成時間に基づいてコンテナをフィルタリングすることも可能です。 たとえば、ここでは、Natsコンテナの前に作成されたコンテナのみを保持します。

$ docker container ls --filter "before=nats-1"
CONTAINER ID        IMAGE               STATUS
443fc0c41710        rabbitmq:3.7        Up 52 minutes
b06cfe3053e5        postgres:11         Up 52 minutes
4cf774b9e4a4        redis:5             Up 52 minutes (Paused)

一方、フィルター以降のを使用して、Natsコンテナの後に作成されたすべてのDockerコンテナを一覧表示できます。

$ docker container ls --filter "since=nats-1"
CONTAINER ID        IMAGE               STATUS
2fdc65a6effb        mysql:5.6           Exited (137) 4 days ago
1addfea727b3        postgres:11         Exited (0) 3 days ago

3. 結論

このチュートリアルでは、「dockercontainerls」コマンドとその便利なオプションを使用してDockerコンテナーを一覧表示およびフィルター処理する方法を説明しました。

詳細については、公式ドキュメントを確認することをお勧めします。