Docker コンテナを名前でフィルタリングする方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker は、開発者や IT プロフェッショナルにとって不可欠なツールとなり、アプリケーションをコンテナ化するための強力なプラットフォームを提供しています。このチュートリアルでは、Docker コンテナを名前でフィルタリングする方法を探求します。これは、Docker 環境を効果的に管理するための重要なスキルです。このガイドの終わりには、名前を基に特定のコンテナを効率的に見つけて管理できるようになり、Docker ワークフローを最適化できるようになります。

docker ps で Docker コンテナを表示する

Docker コンテナをフィルタリングする前に、まずシステムで実行中のコンテナを表示する方法を理解する必要があります。この目的のための最も基本的なコマンドは docker ps です。

docker ps コマンドの理解

docker ps コマンドは、システム上で実行中のすべての Docker コンテナを一覧表示します。このコマンドを実行すると、各コンテナに関する情報が表示されます。これには以下が含まれます。

  • Container ID (コンテナ ID): コンテナの一意な識別子
  • Image (イメージ): コンテナの作成に使用された Docker イメージ
  • Command (コマンド): コンテナ内で実行されているコマンド
  • Created (作成): コンテナが作成された日時
  • Status (ステータス): コンテナの現在のステータス
  • Ports (ポート): ポートマッピング
  • Names (名前): コンテナの名前

docker ps コマンドを実行して、実行中のすべてのコンテナを確認してみましょう。

docker ps

次のような出力が表示されるはずです。

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"             About a minute ago   Up About a minute             db-server
26f8c661f7a5   alpine    "sleep 1000"             About a minute ago   Up About a minute             utility-alpine
a3bb567cc561   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp  cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-frontend

すべてのコンテナを表示する

デフォルトでは、docker ps は実行中のコンテナのみを表示します。停止したコンテナを含むすべてのコンテナを表示するには、-a フラグを使用します。

docker ps -a

このコマンドは、ステータスに関係なく、すべてのコンテナを表示します。これは、終了または一時停止したコンテナを確認する場合に役立ちます。

Container ID のみを表示する

Container ID だけが必要な場合は、-q フラグを使用できます。

docker ps -q

これにより、Container ID のみが表示されます。これは、他のコマンドに Container ID を渡す必要がある場合に役立ちます。

次のステップでフィルタリングに進む前に、これらのコマンドをターミナルで試して、基本的なコンテナ一覧表示機能に慣れてください。

名前による基本的なコンテナのフィルタリング

Docker コンテナを一覧表示する方法を理解したので、次に名前でフィルタリングする方法を学びましょう。複数のコンテナが実行されている場合、特定のコンテナを見つけることは困難な場合があります。Docker は、このタスクを非常に簡単にするフィルタリング機能を提供しています。

--filter オプションの使用

docker ps コマンドは、--filter または -f オプションによるフィルタリングをサポートしています。名前でフィルタリングするための基本的な構文は次のとおりです。

docker ps --filter name=<container-name>

名前の中に "web" を含むコンテナをフィルタリングしてみましょう。

docker ps --filter name=web

次のような出力が表示されるはずです。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-frontend

web-frontendweb-backend の両方のコンテナが、名前の中に "web" という単語が含まれているため表示されることに注意してください。

正確な名前でのフィルタリング

正確な名前のコンテナをフィルタリングするには、完全な名前を使用できます。

docker ps --filter name=web-frontend

このコマンドは、正確に "web-frontend" という名前のコンテナのみを表示します。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d6fe891c1f04   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    web-frontend

複数のフィルターの使用

複数の --filter オプションを追加することで、複数のフィルターを適用できます。たとえば、名前の中に "web" を含み、"nginx" イメージから構築されたすべてのコンテナを見つけるには、次のようにします。

docker ps --filter name=web --filter ancestor=nginx

結果は、両方の "web" コンテナが nginx イメージを使用しているため、最初のフィルターと同じになるはずです。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-frontend

名前の先頭によるコンテナのフィルタリング

名前が特定の文字列で始まるコンテナをフィルタリングする場合は、次のようなパターンを使用できます。

docker ps --filter name=^db

このコマンドは、名前が "db" で始まるコンテナを表示します。

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"  16 minutes ago   Up 16 minutes             db-server

これらのフィルタリングコマンドをターミナルで試して、名前で特定のコンテナを見つける練習をしてください。

高度なフィルタリングと出力のフォーマット

基本的な名前フィルタリングをマスターしたので、docker ps コマンドの出力をフィルタリングおよびフォーマットするための、より高度なテクニックを探求しましょう。これらのスキルは、Docker 環境をより効率的に管理するのに役立ちます。

複数のフィルタリング条件の組み合わせ

Docker では、複数のフィルタリング条件を組み合わせて結果を絞り込むことができます。たとえば、名前の中に "web" が含まれていて、現在実行中のすべてのコンテナを見つけるには、次のようにします。

docker ps --filter name=web --filter status=running

これにより、名前の中に "web" が含まれるすべての実行中のコンテナが表示されます。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-frontend

カスタム出力のための --format オプションの使用

docker ps コマンドは、Go テンプレートを使用した --format オプションによるカスタム出力フォーマットをサポートしています。これにより、必要な情報を必要な形式で表示できます。

たとえば、コンテナの名前とそのステータスのみを表示するには、次のようにします。

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

次のような簡略化された出力が表示されます。

NAMES               STATUS
db-server           Up 26 minutes
utility-alpine      Up 26 minutes
cache-server        Up 26 minutes
web-backend         Up 26 minutes
web-frontend        Up 26 minutes

フィルタリングとフォーマットの組み合わせ

フィルタリングとフォーマットを組み合わせて、必要な情報を正確に取得できます。

docker ps --filter name=web --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

これにより、名前の中に "web" が含まれるコンテナの名前、イメージ、およびステータスが表示されたテーブルが表示されます。

NAMES               IMAGE               STATUS
web-backend         nginx               Up 27 minutes
web-frontend        nginx               Up 27 minutes

正規表現のようなフィルタリングの使用

Docker のフィルタリングシステムは、いくつかの正規表現のようなパターンをサポートしています。たとえば、名前が "web" または "cache" のいずれかを含むコンテナを見つけるには、次のようにします。

docker ps --filter name=web --filter name=cache

これにより、web コンテナと cache コンテナの両方が表示されます。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a3bb567cc561   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   6379/tcp   cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-frontend

実用的な例:コンテナ管理スクリプト

フィルタリングを実用的なシナリオで使用する方法を示す簡単なスクリプトを作成しましょう。container-stats.sh という名前の新しいファイルを作成し、次の内容を追加します。

nano container-stats.sh

次のスクリプトを追加します。

#!/bin/bash
## This script displays container names, images and status for a filtered set of containers

echo "Web containers:"
docker ps --filter name=web --format "{{.Names}} - {{.Image}} - {{.Status}}"

echo -e "\nCache and database containers:"
docker ps --filter name=cache --filter name=db --format "{{.Names}} - {{.Image}} - {{.Status}}"

ファイルを保存し (Ctrl+O、Enter、次に Ctrl+X)、実行可能にします。

chmod +x container-stats.sh

次に、スクリプトを実行して、フィルタリングされたフォーマットされたコンテナ情報を確認します。

./container-stats.sh

次のような出力が表示されるはずです。

Web containers:
web-backend - nginx - Up 35 minutes
web-frontend - nginx - Up 35 minutes

Cache and database containers:
cache-server - redis - Up 35 minutes
db-server - alpine - Up 35 minutes

このスクリプトは、コンテナフィルタリングを使用して、Docker 環境に関する情報をより読みやすく、役立つ方法で整理し、提示する方法を示しています。

コンテナフィルタリングの実用的な応用

このステップでは、一般的な Docker 管理タスクを実行するためのコンテナフィルタリングの実用的な応用を探求します。これらの例は、フィルタリングが実際のシナリオでどのように使用され、コンテナ管理をより効率的にできるかを示しています。

特定のコンテナの検索と再起動

すべての Web 関連コンテナを再起動する必要があるとします。名前フィルタリングを使用してそれらを識別し、再起動できます。

## まず、Web コンテナを識別します
docker ps --filter name=web

## 次に、それらを 1 つずつ再起動します
docker restart web-frontend
docker restart web-backend

これらのコマンドを実行すると、各コンテナが再起動されたことを確認するメッセージが表示されます。

web-frontend
web-backend

特定の名前パターンを持つすべてのコンテナの検索と削除

特定の名前パターンを持つすべてのコンテナを削除する必要がある場合は、フィルタリングとコンテナ削除を組み合わせることができます。

## 警告: これはデモンストレーションのみを目的としています。実際の環境では、
## 削除するものを必ず確認してください!

## 名前に "utility" を含むコンテナを一覧表示します
docker ps -a --filter name=utility

ユーティリティコンテナが表示されるはずです。

CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS     NAMES
26f8c661f7a5   alpine    "sleep 1000"    45 minutes ago   Up 45 minutes             utility-alpine

それを削除するには、通常次のように使用します。

## 実験環境を維持するために、このコマンドは実際に実行しません
## docker rm -f $(docker ps -aq --filter name=utility)

代わりに、このコマンドがどのように機能するかを見てみましょう。

## 影響を受ける ID を取得するだけです
docker ps -aq --filter name=utility

これにより、コンテナ ID が出力されます。

26f8c661f7a5

特定のコンテナグループの監視へのフィルタリングの使用

コンテナフィルタリングは、ターゲットを絞った監視に役立ちます。Web コンテナのステータスをチェックする簡単な監視スクリプトを作成しましょう。

nano web-monitor.sh

次のスクリプトを追加します。

#!/bin/bash
## このスクリプトは、Web コンテナのステータスをチェックし、実行されていないものがあれば報告します

echo "=== Web Container Status Check ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## 停止した Web コンテナをカウントします
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nWARNING: $STOPPED web containers are not running!"
else
  echo -e "\nAll web containers are running normally."
fi

ファイルを保存し (Ctrl+O、Enter、次に Ctrl+X)、実行可能にします。

chmod +x web-monitor.sh

次に、スクリプトを実行して、Web コンテナのステータスを確認します。

./web-monitor.sh

次のような出力が表示されるはずです。

=== Web Container Status Check ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

All web containers are running normally.

CI/CD パイプラインでのフィルタリング

CI/CD パイプラインでは、コンテナのフィルタリングは、自動化されたテストとデプロイメントに不可欠です。特定の名前パターンを持つコンテナのみを対象とするデプロイメントプロセスをシミュレートするスクリプトを作成しましょう。

nano deploy-update.sh

次のスクリプトを追加します。

#!/bin/bash
## このスクリプトは、特定のタイプのすべてのコンテナの更新をシミュレートします

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Usage: $0 <container-name-pattern>"
  exit 1
fi

echo "Preparing to update containers matching pattern: $TARGET_CONTAINERS"
echo "Containers affected:"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nIn a real deployment, this would:"
echo "1. Pull the latest images"
echo "2. Stop each container"
echo "3. Start new containers with the updated images"
echo "4. Verify the containers are running correctly"

echo -e "\nSimulation completed successfully!"

ファイルを保存し (Ctrl+O、Enter、次に Ctrl+X)、実行可能にします。

chmod +x deploy-update.sh

次に、Web コンテナの更新をシミュレートしてみましょう。

./deploy-update.sh web

次のような出力が表示されるはずです。

Preparing to update containers matching pattern: web
Containers affected:
web-backend
web-frontend

In a real deployment, this would:
1. Pull the latest images
2. Stop each container
3. Start new containers with the updated images
4. Verify the containers are running correctly

Simulation completed successfully!

これらの実用的な例は、コンテナフィルタリングを Docker ワークフローに統合して、コンテナ管理をより効率的かつ自動化する方法を示しています。

まとめ

この実験では、Docker 環境を効果的に管理するための重要なスキルである、名前による Docker コンテナの効率的なフィルタリング方法を学びました。これまでの内容を振り返ってみましょう。

  1. 基本的なコンテナリスト表示: docker ps コマンドを使用して、実行中のコンテナを表示する方法、およびすべてのコンテナを表示するための -a などのさまざまなオプションを学習しました。

  2. 基本的な名前フィルタリング: --filter name= オプションを使用して、完全一致と部分一致の両方で、名前でコンテナを検索する方法を学びました。

  3. 高度なフィルタリングとフォーマット: 複数のフィルターを組み合わせ、必要な情報のみを表示するために --format オプションを使用して出力をカスタマイズする方法を探求しました。

  4. 実用的な応用: 監視、管理、およびデプロイメントタスクのためのコンテナフィルタリングの実際の使用法を示すスクリプトを作成しました。

これらのスキルは、特にコンテナの数が増えるにつれて、Docker 環境をより効率的に管理するのに役立ちます。コンテナフィルタリングは、特定のコンテナをすばやく識別して管理する必要がある開発、テスト、および本番環境で特に役立ちます。

Docker の学習を続ける中で、名前フィルタリング以外にも、ボリューム、ネットワーク、またはラベルによるフィルタリングなど、他のフィルタリングオプションを検討してください。これらの追加のフィルタリングテクニックは、コンテナ管理機能をさらに強化できます。