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"