はじめに
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-frontend と web-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 コンテナの効率的なフィルタリング方法を学びました。これまでの内容を振り返ってみましょう。
基本的なコンテナリスト表示:
docker psコマンドを使用して、実行中のコンテナを表示する方法、およびすべてのコンテナを表示するための-aなどのさまざまなオプションを学習しました。基本的な名前フィルタリング:
--filter name=オプションを使用して、完全一致と部分一致の両方で、名前でコンテナを検索する方法を学びました。高度なフィルタリングとフォーマット: 複数のフィルターを組み合わせ、必要な情報のみを表示するために
--formatオプションを使用して出力をカスタマイズする方法を探求しました。実用的な応用: 監視、管理、およびデプロイメントタスクのためのコンテナフィルタリングの実際の使用法を示すスクリプトを作成しました。
これらのスキルは、特にコンテナの数が増えるにつれて、Docker 環境をより効率的に管理するのに役立ちます。コンテナフィルタリングは、特定のコンテナをすばやく識別して管理する必要がある開発、テスト、および本番環境で特に役立ちます。
Docker の学習を続ける中で、名前フィルタリング以外にも、ボリューム、ネットワーク、またはラベルによるフィルタリングなど、他のフィルタリングオプションを検討してください。これらの追加のフィルタリングテクニックは、コンテナ管理機能をさらに強化できます。



