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"