- Dockerでアプリケーションをデプロイしてサービスを運用しているLinuxサーバーで、ディスク容量不足のメッセージが表示されることがある
- 実際にアプリケーションが生成・保存するデータやログの容量がそれほど多くなくても、システム全体のストレージ容量がいっぱいになることがある
- Dockerを使う際にストレージ容量不足を招く原因の1つが「Dockerコンテナログ」
- Dockerのロギングドライバーとログの保存場所
- ロギングドライバー: Dockerには、実行中のコンテナやサービスから情報を取得するのに役立つロギングメカニズムが含まれており、これがロギングドライバー
docker logs コマンド: 実行中のコンテナが記録した情報を表示
docker service logs コマンド: サービスに参加しているすべてのコンテナが記録した情報を表示
- Dockerは、すべてのコンテナログの標準出力(stdout)または標準エラー(stderr)をキャプチャしてJSON形式のファイルに記録する
json-file ロギングドライバーを使用
docker run または docker-compose up コマンドでDockerコンテナを実行すると、/var/lib/docker/containers/[Container-ID]/[Container-ID]-json.log ファイルが生成され、ログが記録される
json-file ロギングドライバーはログローテーションを行わない
- このロギングドライバーで保存されたログファイルは、大量の出力を生成するコンテナの場合、かなりのディスク容量を消費し、その結果ディスク容量が枯渇する可能性がある
- Dockerコンテナログのサイズを減らす
docker rm または docker-compose down コマンドを実行するとDockerコンテナが削除され、/var/lib/docker/containers 配下の [Container-ID] に対応するディレクトリも削除される
- これにより、多くのディスク容量を占有していた
[Container-ID]-json.log ファイルも一緒に削除され、システム全体のディスク容量を確保できる
truncate -s 0 <json-log-file> コマンドを実行すると、ログファイルのサイズを0にできる
- ログローテーションの設定
- ログファイルの最大サイズ(
max-size)と最大ファイル数(max-file)を指定してログローテーションを有効化できる
- ファイルサイズが設定した最大値に達すると新しいファイルに切り替わり、既存ファイルは
...-json.log.1、...-json.log.2 のように最大数までログファイルが生成される
- 上限を超えると最も古いファイルが削除され、Dockerコンテナのログファイルサイズが無制限に増え続けるのを防げる
まだコメントはありません。