(最終更新月:2023年8月)
✔当記事は以下のような方に向けて書かれています。
「docker logsの機能について理解したい」
「docker logsの入力法を身につけたい」
「docker logsの実用ケースを探している」
✔当記事を通してお伝えすること
- docker logsの基本的な知識
- docker logsの具体的な書き方やその応用方法
- docker logsの事例
当記事では、docker logsの基本知識から、その実例まで、丁寧にわかりやすく解説することに努めています。
ぜひ最後までお読みください。
DockerでLogを扱う前提知識
こちらでは、DockerでLogを扱う前提知識についてお伝えしていきます。
- Dockerとは
- コンテナ仮想化
- ログの重要性
Dockerとは
Dockerは、ソフトウェアをコンテナとしてパッケージ化する技術です。
このコンテナ化により、開発環境と本番環境の違いを最小限に抑えられます。
例えば、開発者が自身のローカル環境で動作するアプリケーションを、そのまま本番環境にデプロイできるというのがメリットのひとつです。
コンテナ仮想化
コンテナ仮想化は、一台の物理マシン上で複数の仮想環境を作成する技術です。
Dockerを使用すると、OSやライブラリのバージョンに依存せず、同じ条件でアプリケーションを動作させられます。
仮想マシンとも似てますが、ゲストOSなどが不要になることから、軽量で高速なのが特徴。
この概念は、複数の開発者が共同作業する際や、異なる環境間での互換性を確保するために非常に重要です。
ログの重要性
ログは、以下のような必要な情報を記録するものです。
- システムの動作
- エラーの検出
- 監視
ログを適切に管理することで、システムの状態を迅速に把握したり、問題が発生した際の対応を迅速化することが可能になります。
とくにDockerを使用する際には、各コンテナの動作状況を正確に把握するため、ログの取得と分析が不可欠です。
「docker logs」コマンドの紹介
こちらでは、docker logsコマンドについてお伝えしていきます。
- 「docker logs」の基本的な概念
- 「docker logs」の実例
「docker logs」の基本的な概念
「docker logs」コマンドは、Dockerコンテナのログを取得するためのコマンドです。
コンテナが出力したログを一覧表示するために使用されます。
例として、デバッグ時にエラーメッセージを素早く確認するためなどに活用されることが一般的です。
$ docker logs 084486c95426
root@084486c95426:/# which curl
/usr/bin/curl
root@084486c95426:/# cd tmp
root@084486c95426:/tmp# ls
root@084486c95426:/tmp# wget http://nginx.org/download/nginx-1.19.0.tar.gz
「docker logs」の実例
具体的な使用例として、コンテナIDが「abcd1234」のコンテナのログを表示しましょう。
ターミナルで以下を入力してください。
docker logs abcd1234
該当するコンテナのログが表示されます。
これにより、簡単に特定のコンテナの動作状況が確認できます。
コンテナIDを調べるには、以下のようなコマンドが使えます。
「-a」オプションをはずすと、起動中のコンテナだけが表示されます。
docker ps -a
「docker logs」の使い方
「docker logs」の使い方について詳しく説明します。
- コマンドの基本形式
- 主なオプションの解説
- 特定時間範囲のログを表示する方法
コマンドの基本形式
「docker logs」コマンドの基本形式は非常にシンプルです。
docker logs コンテナID
指定したコンテナのログを取得可能。
この基本形式をマスターすることで、容易にコンテナのログを閲覧できます。
主なオプションの解説
「docker logs」コマンドにはいくつかのオプションがあります。
以下が主要なものをまとめた例です。
オプション名 | 説明 | 例 |
---|---|---|
--details | ログの詳細情報を表示する | docker logs --details [コンテナ名] |
--follow or -f | ログの出力をリアルタイムで追跡する | docker logs -f [コンテナ名] |
--since | 指定したタイムスタンプ以降のログのみを表示する | docker logs --since=2023-09-01T00:00:00 [コンテナ名] |
--tail | 最後のN行のログのみを表示する | docker logs --tail 100 [コンテナ名] |
--timestamps or -t | 各ログエントリにタイムスタンプを追加する | docker logs -t [コンテナ名] |
--until | 指定したタイムスタンプまでのログを表示する | docker logs --until=2023-09-01T12:00:00 [コンテナ名] |
この一覧表はdocker logs
のオプションの一部を示しています。全てのオプションや詳細については、公式のDockerドキュメントを参照することをおすすめします。
特定時間範囲のログを表示する方法
特定の時間範囲でログを表示することも、「docker logs」コマンドの強力な機能のひとつです。
調べたい時間に限定し、余計な情報を省けます。
ただしdocker logs事態に特定の期間を指定してログをフィルタリングするためのオプションはありません。
UNIXコマンドを組み合わせることでこのような操作が可能なのです。
1. 特定の日付でログをフィルタリングする
docker logs [コンテナ名] 2>&1 | grep "2023-09-01"
このコマンドは、2023-09-01
という日付を含むログエントリのみを表示します。
2. 特定の時間範囲でログをフィルタリングする
docker logs [コンテナ名] 2>&1 | grep -E "2023-09-01T(08|09|10)"
このコマンドは、2023-09-01
の8時から10時までのログエントリを表示します。
grep -E
は拡張正規表現を使用するためのオプションで、上記の例では8時、9時、10時をマッチする正規表現を使用しています。
grepコマンドについては、以下の記事で詳しく解説しています。
「docker logs」の実践例
こちらでは、「docker logs」を実際に使用する際の例と手順を解説します。
- 実際にログを出力する手順と例
- よくあるエラーとその解決策
- 「docker logs」使用上の注意点と設定方法
実際にログを出力する手順と例
ログを出力するには、まずコンンテナを実行します。
例えば、Nginxのイメージを使ってコンテナを実行し、以下のコマンドでログを表示しましょう。
docker run -d --name nginx-container nginx
docker logs nginx-container
Nginxコンテナのログが表示されます。
特定のコンテナの動作状況を素早く確認することが可能です。
よくあるエラーとその解決策
「docker logs」コマンドを使用する際に遭遇する可能性のある一般的なエラーと、それらのエラーを解決するための方法を示します。
- コンテナIDの誤入力
- ログが存在しない場合
コンテナIDの誤入力
存在しないコンテナIDを指定した場合、エラーが発生します。
これは、正しいコンテナIDを指定することで解決可能です。
$ docker logs wrong-container-id
Error: No such container: wrong-container-id
ログが存在しない場合
コンテナがログを出力していない場合、ログが空になります。
ログが生成されるようにアプリケーションの設定を見直しましょう。
「docker logs」の使用上の注意点とその設定方法
docker logs
コマンドを使用する際のログの管理に関する注意点と、その設定方法を以下に示します。
- ログのドライバー
- ログのローテーション
- ログのフォーマット
1. ログのドライバー
Dockerはさまざまなログドライバーをサポートしています。
デフォルトでは json-file
ドライバーが使用されているので、ログはJSON形式のファイルとして保存されます。
ほかにも以下のようなログドライバーが利用可能です。
syslog
journald
gelf
fluentd
Dockerのデーモン設定ファイル(通常は /etc/docker/daemon.json
)を編集し、ログドライバーを変更します。
{
"log-driver": "syslog"
}
上記の設定は、ログを syslog
に送信するようにDockerを設定します。
2. ログのローテーション
json-file
ログドライバーを使用する場合、ログファイルが無限に大きくなる可能性があります。
これを防ぐために、ログのローテーションを設定することがおすすめです。
ログのローテーションは、ログオプションを使用して設定できます。
以下は、最大5つのログファイルを保持し、各ログファイルの最大サイズを10MBに制限する設定の例です。
docker run --log-opt max-size=10m --log-opt max-file=5 [イメージ名]
3. ログのフォーマット
特定のログドライバー(例: json-file
や journald
)では、ログのフォーマットをカスタマイズできます。
--log-opt
オプションを使用して、ログのフォーマットを指定。
docker run --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" [イメージ名]
上記の設定では、ログエントリのタグに以下を含めるようにDockerを設定しています。
- イメージ名
- コンテナ名
- コンテナID
まとめ
当記事では、Dockerのログ管理について学習してきました。
Dockerを使用して開発や運用を行う際には、ログの取得と分析が不可欠であることが理解されたことでしょう。
これらの知識を基に、効果的なログ管理を実践していくことが重要です。
以上、初心者のためのDocker Log取得ガイドでした。
最適なログ管理と分析に向けて、本ガイドが参考になることを願っています。