【Docker】Dockerがコンテナそのものについて持つログの量の上限を docker-compose.yml 上で設定する

 Docker は仮想環境を用意してその中で色々する仕組みです。自分がよく使うパターンは Linux ディストリビューションの上に置かれた公式の環境をベースにして、その上に用途に応じたちょっとしたものを乗せるパタ―ンです。例えば、次の様に nginx に設定ファイルをあらかじめ入れておくだけ、というのがあります。

# Dockerfile
FROM nginx:1.21-alpine

COPY ./default.conf /etc/nginx/conf.d/default.conf

 Docker は Docker 自身がコンテナについてのログを持ちます。これは次の様なコマンドで中身を見れます。

docker logs [コンテナID]

 この中身にはコンテナが行った標準出力、標準エラー出力の中身が格納されています。例えば、PHP のコマンドラインツールのログには次のようなものが格納されていたりします。

# --tail 10 は末尾10行のみ表示のオプション
$ docker logs --tail 10 b012b4d422d0
 Illuminate\Container\Container->call() at /work/backend/vendor/laravel/framework/src/Illuminate/Console/Command.php:136
 Illuminate\Console\Command->execute() at /work/backend/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /work/backend/vendor/laravel/framework/src/Illuminate/Console/Command.php:121
 Illuminate\Console\Command->run() at /work/backend/vendor/symfony/console/Application.php:1015
 Symfony\Component\Console\Application->doRunCommand() at /work/backend/vendor/symfony/console/Application.php:299
 Symfony\Component\Console\Application->doRun() at /work/backend/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /work/backend/vendor/laravel/framework/src/Illuminate/Console/Application.php:94
 Illuminate\Console\Application->run() at /work/backend/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:129
 Illuminate\Foundation\Console\Kernel->handle() at /work/backend/artisan:45

 このログですが設定次第ではどこまでも貯まります。それこそディスク容量の限界まで貯まりました。docker-compose.yml 上でログについての設定する方法を紹介します。

 リファレンスは次です。
Compose ファイル version 3 リファレンス — Docker-docs-ja 20.10 ドキュメント#logging
 例と説明コメントを合わせたのが次です。

version: "3.9" # docker-compose.yml の形式のバージョン
services: # サービス定義。ここの直下にコンテナ定義を並べる
  web-server: # web-server という名前のコンテナの定義をする、と宣言
    # web-server コンテナについての定義の中身
  some-service:
    image: some-service # コンテナのベースイメージ。"build: Dockerfileの場所"とも書ける
    logging: # ログ設定を行う、と宣言
      # ログの保存形式の設定。json-file はデフォルト。他に何があるのかは↓を参照
      # https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers
      driver: "json-file"
      # ログの細かいオプションを設定。ドライバー次第で設定できる内容が変わる。ここでは json-file を前提にする
      # json-file ドライバーで設定可能な項目は↓
      # https://docs.docker.com/config/containers/logging/json-file/#options
      options:
        # ログの最大サイズ
        # 1ファイルがこれを超えると次のログファイルを作る
        # デフォルトは無限大
        max-size: "200k"
        # ログファイルの最大個数
        # これを超えると古いファイルから消す
        # デフォルトは 1
        max-file: "10" 
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG