ウェブサイト検索

ログを持つDockerの実行 – 出力のキャプチャとデバッグ


ログは、Dockerコンテナのトラブルシューティングやデバッグにおいて非常に重要な要素です。Docker内でアプリケーションを実行するとき、ログを効率的にキャプチャすることで、開発者は問題を迅速に診断し、効果的に修正することができます。この記事では、Dockerコンテナからログをキャプチャして分析し、その動作を理解し、発生する問題を解決するためのさまざまな方法を探ります。

このチュートリアルでは、次のことを学びます:

  • docker logs コマンドを使用して出力をキャプチャする方法
  • Dockerコンテナでのログ記録のベストプラクティス
  • デバッグ目的のためにログを分析する方法

ソフトウェア要件とLinuxコマンドラインの規則

Dockerからのログのキャプチャと分析

DOCKER ログの理解
Docker は、コンテナの出力 (stdout と stderr) をキャプチャし、問題のデバッグに役立つコマンドを使用してアクセスできます。

このセクションでは、Dockerコンテナを実行する際にログをキャプチャし分析する方法について、ステップバイステップの指示を提供します。効果的なログ管理は、問題を迅速に特定し修正するために重要です。

ステップバイステップの指示

  1. デタッチモードでDockerコンテナを実行する:必要なポートを公開しながら、バックグラウンドでコンテナを開始します。

    docker run -d --name linuxconfig -p 8888:80 httpd
  2. ここで、httpdはApache HTTP Serverのイメージで、linuxconfigはコンテナに割り当てられた名前であり、ホストのポート8888はコンテナのポート80にマッピングされています。-dオプションは、コンテナをデタッチモードで実行します。

  3. コンテナログを表示: 実行中のコンテナのログにアクセスして、その出力を監視します。

    docker logs linuxconfig

    このコマンドは、コンテナが起動して以来生成されたすべてのログを表示します。

  4. リアルタイムログをフォローする: ログが生成される際に継続的にモニタリングします。

    docker logs -f linuxconfig
  5. -f(または--follow)オプションは、コマンドを実行し続け、新しいログエントリが発生するたびにそれを表示します。これは、ログファイルに対してtail -fを使用するのと似ています。

Dockerログコマンドの例

Dockerは、開発者が問題をトラブルシューティングし、コンテナの動作を監視するのに役立つ強力なログ機能を提供します。以下の例では、コンテナログをキャプチャ、フィルタリング、分析するためのさまざまな技術を示しています。基本的なコマンドから高度な構成に至るまで、これらの例は、コンテナ化されたアプリケーションを効果的にデバッグするための幅広いシナリオをカバーしています。

  1. 基本ログ取得: コンテナからすべてのログを取得します.

    docker logs linuxconfig
  2. これはコンテナが起動して以来生成されたすべてのログを示しています。

  3. リアルタイムログ監視: ログが生成される際にそれを追跡します。

    docker logs --follow linuxconfig
  4. ログを表示し、Ctrl+Cを押すまで新しい出力をストリーミングし続けます。

  5. ログ出力の制限: 最新のログのみを取得します。

    docker logs --tail=50 linuxconfig
  6. 最後の50行のログのみを表示します。これは、非常に多くのログを持つコンテナに便利です。

  7. タイムスタンプ付きログの表示: 時間情報を含むログを表示します。

    docker logs --timestamps linuxconfig

    各ログ行はイベントの追跡をより良くするために、タイムスタンプで先頭が付けられています。

  8. 時間制限のあるログの取得: 特定の時間枠内のログを取得します。

    docker logs --since="2023-03-15T10:00:00" --until="2023-03-15T11:00:00" linuxconfig
  9. 指定された期間内に生成されたログのみを表示します。

  10. 相対時間フィルタリング: 過去数分または数時間のログを表示します。

    docker logs --since=30m linuxconfig
  11. 過去30分間のログを表示します。s(秒)、m(分)、h(時間)、またはd(日)を使用できます。

  12. ログをファイルに保存する: ログをファイルにリダイレクトして、さらなる分析のために使用します。

    docker logs linuxconfig > container_logs.txt 2>&1

    すべてのコンテナログをテキストファイルに保存し、他のツールと共有したり分析したりすることができます。

  13. grepでログをフィルタリング: ログ内の特定のパターンを検索する。

    docker logs linuxconfig 2>&1 | grep ERROR
  14. “ERROR”という単語を含むログ行のみを表示し、問題を特定しやすくします。

  15. 複数のコンテナの監視: サービススタックからのログを表示するためにDocker Composeを使用します。

    docker-compose logs -f
  16. Docker Composeファイルで定義された複数のコンテナを使って作業しているとき、このコマンドはすべてのサービスのログを表示します。

  17. ログドライバーによる高度なデバッグ: 特定のログドライバーを使用するようにコンテナを設定します。

    docker run -d --name debug-container --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx
  18. ローテーション設定を使用したJSONファイルドライバーを使い、ログファイルを10MBに制限し、最大で3つのファイルを保持します。

  19. 停止したコンテナのログを表示

    docker logs my_old_container
  20. Dockerは、コンテナが停止してもログを保持しますが、削除されない限り.

  21. コンテナを起動する時にJSONロギングドライバーを使用する

    docker run -d --name jsonlogger --log-driver=json-file httpd
  22. デフォルトの `json-file` ログドライバーを使用しています。ログは docker logs で確認できます。

  23. カスタムログドライバを使用する(例:syslog)

    docker run -d --name syslogger --log-driver=syslog httpd
  24. 集中システム(Syslog、Fluentdなど)にログを送信するのに便利です。

  25. ログドライバの設定を確認する

    docker inspect --format='{{.HostConfig.LogConfig.Type}}' linuxconfig

    コンテナで現在使用されているログドライバーを返します。

  26. コンテナイベントの分析: コンテナのライフサイクルイベントを追跡します。

    docker events --filter container=linuxconfig
  27. コンテナに関連するイベント、例えば開始、停止、または健康状態の変化を表示します。

ベストプラクティス
中央集中的なログソリューションやログドライバーの使用を検討してください。Dockerは、json-fileやfluentdなどのいくつかのログドライバーをサポートしており、ログを集約して簡単にクエリできるようにするのに役立ちます。

結論

Dockerコンテナからのログを一貫してキャプチャし、分析することは、効果的なデバッグと問題解決のために不可欠です。Dockerのネイティブなロギング機能を活用することで、アプリケーションの挙動について貴重な洞察を得ることができ、効率的な運用を維持できます。
FluentdやELKスタック統合など、ロギングの効果を高める追加のツールやフレームワークを探求することを忘れないでください。

よくある質問 (FAQ)

  1. コンテナが再起動してもログを保持できますか?

    はい、json-fileのようなロギングドライバーを使用することで、ログを永続化し、コンテナの再起動後もログを利用可能にすることができます。

  2. Dockerはどのログフォーマットをサポートしていますか?

    Dockerは主にログにJSON形式を使用しますが、syslogやjournaldなどの異なる形式に対応できる様々なログドライバをサポートしています。

  3. すべてのコンテナのログを一度に表示するにはどうすればよいですか?

    すべての実行中のコンテナからログをまとめて分析したい場合は、$ docker logs $ (docker ps -q)を使用してログを取得してください。

  4. 特定のキーワードでログをフィルタリングできますか?

    はい、ログコマンドとgrepを使用して関連情報をフィルタリングできます。例えば、$ docker logs my_container | grep "ERROR"です。

関連記事: