dockerコンテナ の ログ は 肥大化 を続けてしまうのでその対応法をご紹介します。

2021年4月19日

この記事では 肥大化 を続ける dockerコンテナ の ログ への対処法をご紹介します。

すばらしいDocker

私は何か試したいアプリケーション(主にOSS)すぐにdockerを使って試しています。
以前は仮想化で定番のVMwareVirtualBoxを使ってOSからインストールして・・・とやっていました。
これはこれで楽しかったのですが目的を忘れて戯れることが多く、時間のかかることでした。

スナップショットを使えばいい感じにクリーンな状態にもどせるのですがOS起動までまたなければいけなかったりどうしても削れない時間がでてくるものです。

そこで登場したのがDockerです。
Dockerは広義では仮想化技術のひとつです。

Dockerの最大の特徴は(条件さえ整えれば) 数秒以内にアプリケーションサーバやデータベースサーバなどを起動し使用することができる点と、
不要になったら即破棄してクリーンな状態でまた確認を行えることです。
イメージとしてはWindowsの電卓を起動するかの如く起動して使用できます。

ブログ開設するにあたっての手順およびポイントをまとめてみました。(その1)の投稿からお伝えしているように私のブログサイトもDockerコンテナで運用しています。
どのような構成で運用するかという点では悩みましたが、構成が決まるとDocker用の各種イメージをプル(ダウンロード)して数分後にはWordPressのインストール画面を拝むことができました。

すばらしい😁

しかしDockerについて完璧に分かっているわけではありません。
そこで私の遭遇したDockerにまつわるトラブルを思い出したら記述していこうと思います。

Dockerコンテナを稼働してしばらくすると・・・

ブログ以外にもDockerを使用している私、ある日なんとなしにハードディスクの容量を見たところ・・・

※画像はイメージです。

慌てて原因を探りました。そしたらなんとDockerのログだったのです😓
正しいかどうかわかりませんが、Dockerのログ出力は未設定のままだと無限に大きくなるそうです!

Nomad: Dockerログは無限に成長します

恐ろしすぎる!

この問題の対処法

この問題は

  • コンテナを起動するときにログの制御を行う
  • デフォルトの動作を変更する

という方法があるようです。

コンテナを起動するときにログの制御を行う

私のブログサイトでも制御しています。docker-composeファイルの場合はこのように書きます。

 logging:
   options:
     max-size: 200M
     max-file: 2

loggingのoptionsにmax-sizeを指定してあげればいいわけですね。
Dockerコマンドの場合はこんな風に記述するそうです。

$ docker run \
--log-driver local --log-opt max-size=10m \
alpine echo hello world

デフォルトの動作を変更する

各コンテナに毎回設定するのが億劫!という人には良いかもしれません。

daemon.jsonファイルにこのように記述します。
(daemon.jsonファイルは/etc/dockerディレクトリにあるようです。参考)

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "2"
  }
}

私の記憶ではこの設定が適用されるのは、この後Dockerを再起動するわけですが
再起動後に作成されたコンテナから有効だったように思います。ご注意ください。

 

Dockerにまつわるトラブルについて書いてみました。
また思い出したら書いてみようと思います。